SQL连接查询语句中on、where筛选的区别总结:
在SQL连接查询语句中,on和where是两个常用的筛选条件,它们用于对连接的两个表的行进行筛选。下面将详细介绍on和where的用法和区别。
- 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」相等的行。这样就可以得到包含订单和客户的完整表。
- 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日建立的订单列表。
-
区别总结
-
on是在连接的时候使用,用于指定连接的条件,而where子句是在连接后过滤结果时使用。
- on和where最主要的区别是:on筛选条件是在两张表连接的时候就进行筛选,而where子句是在连接后进行数据筛选。
- 在大多数情况下,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技术站