sql连接查询语句中on、where筛选的区别总结

SQL连接查询语句中on、where筛选的区别总结:

在SQL连接查询语句中,on和where是两个常用的筛选条件,它们用于对连接的两个表的行进行筛选。下面将详细介绍on和where的用法和区别。

  1. on的用法

on的作用是对连接的两张表进行关联。on和join一起使用,所以它只能用于连接查询中。on条件语句是放在join关键字后面的:

SELECT Orders.OrderID, Customers.CustomerName, Orders.OrderDate
FROM Orders
JOIN Customers
ON Orders.CustomerID = Customers.CustomerID;

上面的代码是一个常见的连接查询语句,通过on条件连接了两张表(Orders和Customers)。上面的代码语句的含义是:连接订单表和客户表,只返回那些「订单表」和「客户表」的「客户ID」相等的行。这样就可以得到包含订单和客户的完整表。

  1. where的用法

where的作用是对连接后的表进行过滤。where子句一般位于查询语句的末尾,表示对查询结果进行过滤。

SELECT Orders.OrderID, Customers.CustomerName
FROM Orders
JOIN Customers
ON Orders.CustomerID = Customers.CustomerID
WHERE Orders.OrderDate='1996-07-04';

上面的代码语句的含义是:连接订单表和客户表,只返回那些「订单表」和「客户表」中「订单日期」为「1996-07-04」的行。这样就可以得到在1996年7月4日建立的订单列表。

  1. 区别总结

  2. on是在连接的时候使用,用于指定连接的条件,而where子句是在连接后过滤结果时使用。

  3. on和where最主要的区别是:on筛选条件是在两张表连接的时候就进行筛选,而where子句是在连接后进行数据筛选。
  4. 在大多数情况下,on关键字筛选的效果与where关键字筛选的效果是相同的。不过,若是使用外连接时(左联、右联、全联),两个关键字的效果就会有所不同,on关键字会在连接时起作用,而where子句则会在查询结果上进行过滤。

总结了on和where的区别,下面来看两个使用实例:

示例一:使用on和where分别进行查询筛选

创建student和teacher两张表,并且建立两张表的连接关系。

CREATE TABLE student (
   Id INT PRIMARY KEY,
   Name VARCHAR(20) NOT NULL,
   Gender VARCHAR(10) NOT NULL,
   Age INT NOT NULL,
   Course VARCHAR(10) NOT NULL
);

CREATE TABLE teacher (
   Name VARCHAR(20) PRIMARY KEY,
   Gender VARCHAR(10) NOT NULL,
   Course VARCHAR(10) NOT NULL
);

INSERT INTO student (Id, Name, Gender, Age, Course)
VALUES (1, 'Tom', 'Male', 18, 'Math'),
       (2, 'Jerry', 'Male', 19, 'Chem'),
       (3, 'Lucy', 'Female', 18, 'Eng');

INSERT INTO teacher (Name, Gender, Course)
VALUES ('John', 'Male', 'Math'),
       ('Alice', 'Female', 'Eng'),
       ('Tony', 'Male', 'Chem');

使用on语句连接两张表,并通过where子句对结果进行数据筛选。

SELECT s.Name AS "学生姓名", t.Name AS "教师姓名", s.Age AS "学生年龄", t.Gender AS "教师性别", s.Course AS "学生科目", t.Course AS "教师科目"
FROM student s
JOIN teacher t
ON s.Course = t.Course
WHERE s.Age >= 19;

查询结果:

学生姓名 教师姓名 学生年龄 教师性别 学生科目 教师科目
Jerry Tony 19 Male Chem Chem

以上代码的基本含义是:查询 学生和教师表,连接条件是科目相同,但条件是年龄大于19岁的同学和对应的任课老师姓名、年龄、科目等。

示例二:使用on进行筛选查询

建立staff和department两个表,并且建立两张表的连接关系。

CREATE TABLE staff (
   Id INT PRIMARY KEY,
   Name VARCHAR(20) NOT NULL,
   Gender VARCHAR(10) NOT NULL,
   Dept_ID INT NOT NULL
);

CREATE TABLE department (
   Dept_ID INT PRIMARY KEY,
   Dept_Name VARCHAR(20) NOT NULL
);

INSERT INTO staff (Id, Name, Gender, Dept_ID)
VALUES (1, 'Tom', 'Male', 1),
       (2, 'Jerry', 'Male', 2),
       (3, 'Lucy', 'Female', 1),
       (4, 'Lily', 'Female', 3);

INSERT INTO department (Dept_ID, Dept_Name)
VALUES (1, '开发部'),
       (2, '运维部'),
       (3, '测试部');

使用on关键字连接两张表,并通过on条件语句进行数据筛选。

SELECT s.Name AS "员工姓名", d.Dept_Name AS "所属部门"
FROM staff s
JOIN department d
ON s.Dept_ID = d.Dept_ID AND d.Dept_Name = '开发部';

查询结果:

员工姓名 所属部门
Tom 开发部
Lucy 开发部

以上代码的含义是:查询 员工表 和 部门表,并且连接条件是「部门表」的「部门名称」等于「开发部」,返回结果是结果员工名字和所属部门。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:sql连接查询语句中on、where筛选的区别总结 - Python技术站

(0)
上一篇 2023年5月21日
下一篇 2023年5月21日

相关文章

  • Wampserver2.5配置虚拟主机出现403 Forbidden的处理方案

    标题:Wampserver2.5配置虚拟主机出现403 Forbidden的处理方案 在Wampserver2.5中配置虚拟主机(Virtual Host)时,可能会出现403 Forbidden错误,这是因为默认情况下Wampserver禁止了访问虚拟主机的文件夹权限。下面是解决该问题的步骤。 步骤一:打开httpd-vhosts.conf文件 首先打开W…

    database 2023年5月22日
    00
  • Redis和Memcache对比与如何选择

    Redis和Memcached是两种常用的内存缓存技术。它们都提供快速访问和存储数据的能力,但它们的实现方式,适用场景以及优化策略有所不同。在选择哪一个使用时,需要衡量自己的需求和实际限制。 对比Redis和Memcached 1. 数据结构 Redis支持更多的数据类型,包括字符串、哈希、列表、集合、有序集合等。 Memcached只支持简单的键值对。 2…

    database 2023年5月22日
    00
  • Linux MySQL忘记root密码解决方案

    作为网站的作者,我很乐意为您详细讲解如何解决Linux MySQL忘记root密码的问题。以下是完整攻略: 1. 通过忘记密码向导重置MySQL root密码 这是MySQL提供的一种简单易行的重置密码方式。下面是操作步骤: 以root账号登录到Linux服务器上的MySQL数据库,输入以下命令: sudo mysql -u root 如果成功登录,则会看到…

    database 2023年5月22日
    00
  • ASP.net MVC redis完整示例(含集合,哈希,sortedset)

    (核心部分原创,转载请保留链接) 1:下载redis for windows or linux安装并开启服务,并在vs的工具菜单下安装nuget(本文采用windows版本) http://www.fanli7.net/a/caozuoxitong/Windows/20150318/497842.html(redis安装和开启) http://www.cnb…

    Redis 2023年4月12日
    00
  • linux下安装mysql及mysql.sock问题

    Linux下安装MySQL的完整攻略 步骤1: 下载MySQL 首先,从MySQL官网下载适合自己的MySQL版本,如5.7或8.0等。也可以使用包管理器(如yum)安装官方提供的MySQL版本。 步骤2: 安装MySQL 在安装MySQL之前,需要先安装系统的依赖库。在CentOS中,可以使用以下命令安装: sudo yum install -y wget…

    database 2023年5月22日
    00
  • MySQL 时间类型用 datetime, timestamp 还是 integer 更好

    MySQL 中时间类型可以使用 datetime、timestamp 和 integer 三种类型,但不同的类型有着不同的特点,用起来需要根据具体场景进行选择。下面我来详细讲解一下。 datetime类型 datetime 类型用于表示日期和时间,如 2022-01-01 12:00:00。其占用存储空间相对较大,为 8 个字节。可以使用函数 NOW() 来…

    database 2023年5月22日
    00
  • 细数MySQL中SQL语句的分类

    MySQL作为关系型数据库管理系统,SQL语句分类是我们需要学习的内容之一。下面将详细讲解MySQL中SQL语句的分类。 SQL语句分类 MySQL中的SQL语句可以分为以下几类: 数据定义(DDL)语句 数据定义语句用来创建或删除数据库表、视图、索引等。包括: CREATE:创建数据库表、视图、索引等对象。 DROP:删除数据库表、视图、索引等对象。 AL…

    database 2023年5月21日
    00
  • Express作者TJ告别Node.js奔向Go

    Express作者TJ告别Node.js奔向Go 最近,Express.js的作者TJ Holowaychuk宣布放弃Node.js,改为使用Go语言来开发后端应用程序。这个消息一出,立刻引起了广泛关注和讨论。在本篇文章中,我们将详细讲解TJ向Go转换的完整攻略。 为什么TJ要放弃Node.js? 首先,我们需要了解TJ放弃Node.js背后的原因。在TJ发…

    database 2023年5月21日
    00
合作推广
合作推广
分享本页
返回顶部