SELECT中的多表联接

2020-11-11 15:35 jianzhan
联接(join):将一张表格中的行依照某一标准(联接标准)和另外一张表格中的行联接起來产生一个新行的全过程。

依据联接查寻回到的結果,分3类:

内联接(inner join)

外联接(outer join)

交叉式联接(cross join)

依据联接标准所应用的实际操作符,分2类:

相同联接(应用百分号实际操作符)

不一联接(不应用百分号实际操作符) 

规范的联接英语的语法:

留意:

在联接查寻中,一个列将会出現在多个表格中,以便防止造成歧义,一般在列名前边再加表名或表别称做为作为前缀(例:s.sid、x.sid)---应用表别称做为作为前缀,可使得SQL编码较短,应用的运行内存越来越少(例:stu s,xuanke as x)。

 

构建自然环境:仿真模拟选课


只回到二张表格中全部考虑联接标准的行,即便用较为计算符依据每一个表格中现有的列的值配对2个表格中的行。(inner重要字是可省去的)

①传统式的联接书写:

在FROM子句中列举全部要联接的表的姓名(开展表别称),以分号隔开;

联接标准写在WHERE子句中;

留意:一旦给表界定了别称,那麼初始的表名也不能在出現在该句子的其他子句中


- from stu s,tea t,course c,xuanke x - where s.sid=x.sid and t.tid=x.tid and c.cid=x.cid; +--------+--------+-----------+--------+ | sname | cname | tname | xuefen | +--------+--------+-----------+--------+ | 张三 | linux | 冯教师 | 4 | | 李四 | linux | 冯教师 | 2 | | 张三 | mysql | 相教师 | 2 | | 李四 | mysql | 相教师 | 2 | | 张三 | hadoop | 相教师 | 6 | | 李四 | hadoop | 相教师 | 2 | +--------+--------+-----------+--------+ 6 rows in set (0.08 sec) 复制代码  

②应用on子句(常见):小编较为喜爱的方式,由于感觉构造清楚一目了然。


表中间的关联以join特定,using(联接列)开展联接配对,相近于on。(相对性用的会较为少) 

 

 

2、外联接outer join

应用外联接不仅回到合乎联接和查寻标准的数据信息行,还回到不符合合标准的一些行。

在MySQL数据信息库文件外联接分两大类(不兼容全外联接):

左外联接、右外联接。(outer重要字可省去)。

相互点:都回到合乎联接标准和查寻标准(即:内联接)的数据信息行

不一样点:

①左外联接还回到左表格中不符合合联接标准,但合乎查寻标准的数据信息行。(说白了左表,便是写在left join重要字左侧的表)

②右外联接还回到右表格中不符合合联接标准,但合乎查寻标准的数据信息行。(说白了右表,便是写在right join重要字右侧的表)


分析:stu表是左表,xuanke表是右表:left join是左联接,stu表格中 王五 沒有选课,在xueke表格中沒有数据信息行,不符合合联接标准,回到合乎查寻标准的数据信息行,因此xuefen为null。


+------+--------+---------+------+-----------+---------+ | sid | sname | sphonum | tid | tname | tphonum | +------+--------+---------+------+-----------+---------+ | 1 | 张三 | 110 | 1113 | 相教师 | 1111 | | 1 | 张三 | 110 | 1114 | 冯教师 | 1112 | | 2 | 李四 | 120 | 1113 | 相教师 | 1111 | | 2 | 李四 | 120 | 1114 | 冯教师 | 1112 | | 3 | 王五 | 130 | 1113 | 相教师 | 1111 | | 3 | 王五 | 130 | 1114 | 冯教师 | 1112 | +------+--------+---------+------+-----------+---------+ 6 rows in set (0.00 sec)