一、交叉联接(纯粹的联接查询)
只进行笛卡尔积操作 Customers表中的原始数据:
Employees表中的原始数据:
进行交叉联接:
1 use edisondb; 2 select C.custid as ' 顾客号 ' , E.empid as ' 售货员号 ' 3 from customers as C 4 CROSS JOIN employees as E 5 ; 查询结果如下:
重要习惯:在使用联接查询时,尽可能使用“表别名.列名”的形式,这样可有效区分不同表中列名相同的列
二、内联接=交叉联接+条件过滤
1.简单内联接
1 use edisondb; 2 select C.custid as ' 顾客号 ' , E.empid as ' 售货号 ' 3 from customers as C 4 JOIN employees as E 5 ON C.age = E.age 6 ; 查询结果如下:
执行步骤:a)进行交叉联接操作,得到如下“中间数据集”:
b)对以上“中间数据集”进行条件过滤,选出C.age=E.age的行,按适当形式输出
2.组合联接
实际上就是有多个行过滤条件
1 use edisondb; 2 select C.custid as ' 顾客号 ' , E.empid as ' 售货号 ' 3 from customers as C 4 JOIN employees as E 5 ON C.age = E.age and C.country = E.country 6 ; 查询结果如下:
执行步骤:a)进行交叉联接操作,得到如下“中间数据集”:
b)对以上“中间数据集”进行条件过滤,选出C.age=E.age 且 C.country=E.country 的行,按适当形式输出
3.多表联接
新增一张Region表中数据如下:
进行多表联接查询:
1 use edisondb; 2 select C.custid as ' 顾客号 ' , E.empid as ' 售货员号 ' ,R.country as ' 售货员号有效国家 ' 3 from customers as C 4 JOIN employees as E 5 ON C.age = E.age 6 JOIN region as R 7 ON E.country = R.country 8 ; 查询结果如下:
执行步骤:1)先对前面两张表进行简单内联接操作,得到数据集如下(省略一步“中间数据集”):
注:可以将其视作一张新的表,再与第三张表进行简单内联接操作
2)将上面得到的数据集与第Region表进行简单内联接操作
步骤:a)进行交叉联接操作,得到如下“中间数据集”:
b) 对以上“中间数据集”进行条件过滤,选出E.country=R.country的行,按适当形式输出
三、外联接=交叉联接+条件过滤+添加外部行
1.左联接(添加左边表中未出现在“中间数据集”中的行) 进行左联接查询:
1 use edisondb;2 select *3 from customers as C4 LEFT OUTER JOIN employees as E5 ON C.age=E.age and C.country=E.country6 ; 查询结果如下: 执行步骤:1)先进行简单内联接操作,得到数据集如下(省略一步“中间数据集”): 2)对照左边表Employee表,找到未出现在“中间数据集”中的行,添加进“中间数据集”,空列用NULL填充 : 2.右联接(添加右边表中未出现在“中间数据集”中的行) 略,和左联接相似