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日

相关文章

  • MySQL查看事件状态信息

    MySQL中的事件是一种与时间相关的对象,包括存储程序、存储函数和一些特殊事件,用于执行预定义的任务或策略。 在MySQL中查看事件状态信息,可以通过以下步骤实现: 1. 登录MySQL数据库: $ mysql -u root -p 2. 进入要查看状态信息的数据库: mysql> use yourdatabase; 3. 查看事件的状态信息: mys…

    MySQL 2023年3月10日
    00
  • SQL注入是什么?SQL注入原理及预防方法

    SQL注入是一种针对Web应用程序的攻击方法,攻击者通过注入恶意的SQL语句来获取或修改数据库中的数据。攻击者可以利用各种SQL注入技术来执行操作,包括数据盗取、数据修改和数据删除等。 SQL注入是利用了应用程序对用户输入数据的不充分验证,把恶意的SQL代码注入到应用程序的查询语句中,通过这种方式来控制或者破坏数据库的行为 SQL注入攻击是Web应用程序最常…

    MySQL 2023年3月10日
    00
  • mysql插入记录INSERT与多表更新

    1、第一种:INSERT [INTO] tbl_name[ (col_name, … ) ]  {VALUES | VALUE}({expr |default}, … ), (…), … 如果为自动编号的字段赋值的话,可以采用NULL或者DEFAULT让其采用默认的递增的形式来实现。 INSERT users VALUES(DEFAULT, …

    MySQL 2023年4月16日
    00
  • mysql常用日期时间/数值函数详解(必看)

    MySQL常用日期时间/数值函数详解(必看) 日期和时间函数 NOW() NOW() 函数返回当前日期和时间。 示例: SELECT NOW(); 输出: +———————+ | NOW() | +———————+ | 2021-10-27 16:30:53 | +——————-…

    database 2023年5月22日
    00
  • SQL 叠加两个行集

    SQL中叠加两个行集可以通过UNION和UNION ALL两种操作实现。以下是详细的攻略: UNION操作 UNION操作将两个SELECT语句返回的结果集合并成一个结果集,去除重复的部分,但不会保留重复记录的数量。 下面是一个实例,查询所有学生和教师的名字并合并成一个结果集: SELECT name FROM students UNION SELECT n…

    database 2023年3月27日
    00
  • MySQL之Join语句执行流程是什么

    本文小编为大家详细介绍“MySQL之Join语句执行流程是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“MySQL之Join语句执行流程是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。 Join语句执行流程 在实际生产中,关于 join 语句使用的问题,一般会集中在以下两类: 不让使用 join,使用 join 有什么问…

    MySQL 2023年4月11日
    00
  • mysql timestamp比较查询遇到的坑及解决

    MySQL Timestamp比较查询遇到的坑及解决 在MySQL中,Timestamp是表示日期和时间的数据类型,它可以用于存储时间戳,并可以用于表示日期和时间。它使用的格林威治标准时间。在MySQL中,对Timestamp进行查询时可能会遇到一些比较隐晦的问题,下面将针对这些问题进行分析和解决。 关于Timestamp Timestamp列可以在插入记录…

    database 2023年5月22日
    00
  • SQL 使用Null覆盖默认值

    SQL使用NULL覆盖默认值的完整攻略 当使用SQL创建表时,可以为列指定默认值。当插入一行时,如果未提供该列的值,则使用默认值。但是,如果想要覆盖默认值,可以使用NULL关键字。在本文中,我们将介绍如何使用NULL覆盖默认值。 语法 在插入行时,可以使用以下语法使用NULL覆盖默认值: INSERT INTO table_name (column1, co…

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