携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第6天
连接查询 连接 联结 联接
注意:多表查询时,如果要引用不同表中的同名属性,则在属性名前加表名,即用“表名.属性名”的形式表示,以便区分。
1、交叉连接查询(广义笛卡尔积)
格式:SELECT 列表列名 FROM 表名1 CROSS JOIN 表名2
例题: 产生了152条记录(8*19=152)
use 学生管理
go
SELECT 学生.学号,姓名,成绩 FROM 学生 CROSS JOIN 成绩
2、等值与非等值连接查询
格式:[<表名1>.]<列名1> <比较运算符> [<表名2>.]<列名2>
其中:比较运算符主要是:=,>,<,>=,<=,!=(或<>)
等值连接,格式如下:
SELECT 列表列名
FROM 表名1 [INNER] JOIN 表名2
ON 表名1.列名=表名2.列名
例题:
use 学生管理
go
SELECT 学生.学号,姓名,成绩.学号,课程号,成绩
FROM 学生 JOIN 成绩
on 学生.学号=成绩.学号
为表起个别名
use 学生管理
go
SELECT a.学号,姓名,b.学号,课程号,成绩
FROM 学生 as a JOIN 成绩 as b
on a.学号=b.学号
AS 可以省略
自然连接是最常用的:去掉重复属性的等值连接。
例题:
use 学生管理
go
SELECT 学生.学号,姓名 ,课程号,成绩
FROM 学生 JOIN 成绩
on 学生.学号=成绩.学号
等价于:
use 学生管理
go
SELECT 学生.学号,姓名 ,课程号,成绩
FROM 学生 , 成绩
where 学生.学号=成绩.学号
例题:
use 学生管理
go
SELECT 学生.学号,姓名 ,课程号,成绩
FROM 学生 JOIN 成绩
on 学生.学号=成绩.学号
where 性别=’女’
等价于:
use 学生管理
go
SELECT 学生.学号,姓名 ,课程号,成绩
FROM 学生 , 成绩
where 学生.学号=成绩.学号 and 性别=’女’
三张表的连接
use 学生管理
go
SELECT 学生.学号,姓名,课程名,成绩.成绩
FROM 学生 JOIN 成绩
on 学生.学号=成绩.学号
join 课程
on 成绩.课程号=课程.课程号
等价于:
use 学生管理
go
SELECT 学生.学号,姓名,课程名 ,成绩.成绩
FROM 学生 , 成绩, 课程
where 学生.学号=成绩.学号 and 成绩.课程号=课程.课程号
非等值连接(75条记录,思考为什么?)
例题:
use 学生管理
go
SELECT a.学号,姓名,b.学号,课程号,成绩
FROM 学生 as a JOIN 成绩 as b
on a.学号>b.学号
order by a.学号
3、自连接查询
连接操作既可在多表之间进行,也可以是一个表与其自己进行连接,称为表的自身连接。使用自身连接时,必须为表指定两个别名,以示区别。
例题:
use 学生管理
go
SELECT a.学号,b.姓名
FROM 学生 as a JOIN 学生 as b
on a.学号=b.学号
查找重名的学生
use 学生管理
go
SELECT a.学号,b.姓名
FROM 学生 as a JOIN 学生 as b
on a.姓名=b.姓名
where a.学号<>b.学号
4、外连接查询
①左外连接
左外连接(Left Outer Join)是结果表中除了包含满足连接条件的记录外,还包含左表中不满足连接条件的记录。
注意:左表中不满足条件的记录与右表记录连接时,右表的相应列上填充NULL值。
左外连接的语法格式为:
SELECT 列表列名
FROM 表名1 LEFT [OUTER] JOIN 表名2
ON 表名1.列名=表名2.列名
例题: 将“学生”表左外连接“成绩”表
use 学生管理
go
SELECT 学生.学号,姓名 ,课程号,成绩
FROM 学生 left JOIN 成绩
on 学生.学号=成绩.学号
②右外连接
右外连接(Right Outer Join)是结果表中除了包含满足连接条件的记录外,还包含右表中不满足连接条件的记录。
注意:右表中不满足条件的记录与左表记录连接时,左表的相应列上填充NULL值。
右外连接的语法格式为:
SELECT 列表列名
FROM 表名1 RIGHT [OUTER] JOIN 表名2
ON 表名1.列名=表名2.列名
例题: 将“学生”表右外连接“成绩”表
use 学生管理
go
SELECT 学生.学号,姓名 ,课程号,成绩
FROM 学生 right JOIN 成绩
on 学生.学号=成绩.学号
③完全外连接
完全外连接(Full Outer Join)是结果表中除了包含满足连接条件的记录外,还包含两个表中不满足连接条件的记录。
注意:左(右)表中不满足条件的记录与右(左)表记录连接时,右(左)表的相应列上填充NULL值。
完全外连接的语法格式为:
SELECT 列表列名
FROM 表名1 FULL [OUTER] JOIN 表名2
ON 表名1.列名=表名2.列名
例题:
use 学生管理
go
SELECT 学生.学号,姓名 ,课程号,成绩
FROM 学生 full JOIN 成绩
on 学生.学号=成绩.学号 ③完全外连接
5、复合连接条件查询
ON连接条件表达式只有一个条件,允许ON连接表达式有多个连接条件,称为复合条件连接,或多表连接。
例题:
use 学生管理
go
SELECT 学生.学号,姓名 ,课程号,成绩
FROM 学生 JOIN 成绩
on 学生.学号=成绩.学号 and 成绩>=90
等价于:
use 学生管理
go
SELECT 学生.学号,姓名 ,课程号,成绩
FROM 学生 JOIN 成绩
on 学生.学号=成绩.学号
where 成绩>=90