多表查詢
關聯(lián)關系
- 創(chuàng)建表格時,表與表之間是存在業(yè)務關系的。
有哪些
- 1對1 :有AB兩張表,A表中1條數(shù)據(jù)對應B表中1條,同時,B表中1條數(shù)據(jù)對應A表1條。
- 1對多:有AB兩張表,A表中1條數(shù)據(jù)對應B表中多條,同時,B表中1條數(shù)據(jù)對應A表1條
- 多對多:有AB兩張表,A表中1條數(shù)據(jù)對應B表中多條,同時,B表中1條數(shù)據(jù)對應A表多條
關聯(lián)查詢
- 同時查詢多張表的數(shù)據(jù),查詢方式稱為關聯(lián)查詢。
- 關聯(lián)查詢必須寫關聯(lián)關系
關聯(lián)查詢的方式
1.交叉連接
- 如果不寫關聯(lián)關系的話,則會得到兩張表數(shù)據(jù)量的乘積,這個乘積被稱為笛卡爾積,在工作中要避免出現(xiàn)。
- 關鍵字:cross join
- 書寫格式:
select * from 表1 cross join 表2;
- 案例分析:
select * from emp cross join dept;
2.等值查詢
- 書寫格式:
select 字段信息
from 表1,表2
where 關聯(lián)關系
and 其他條件;
關聯(lián)關系:查詢的數(shù)據(jù)需要滿足這個條件,如果不滿足的話將不會被查詢到
- 案例分析:
- 查詢每個員工的姓名和對應的部門名
select e.ename,e.deptno,d.deptno,d.dname
from emp e,dept d
where e.deptno = d.deptno;
- 查詢1號部門的員工姓名,工資,部門名,部門地址
select e.ename,e.sal,d.ename,d.loc
from emp e,dept d
where e.deptno = d.deptno
and e.deptno=1;
3.內連接(建議使用)
內連接所查詢到的數(shù)據(jù)時兩個表或多個表的交集,即符合查詢關聯(lián)關系的數(shù)據(jù)
關鍵字:inner join
書寫格式:
select 字段信息
from 表1 [inner] join 表2
on 關聯(lián)關系
where 條件 ;
- 案例分析:
- 查詢每個員工的姓名和對應部門的名稱
select e.ename,d.dname
from emp e join dept d
on e.deptno = d.deptno;
- 查詢1號部門的員工姓名,工資,部門名,部門地址
select e.ename,e.sal,d.dname,d.loc
from emp e join dept d
on e.deptno = d.deptno
where d.deptno =1;
4.外連接
左連接(建議使用)
- 返回的結果包括左表中的全部數(shù)據(jù)和右表中滿足連接條件(關聯(lián)關系)的數(shù)據(jù)
- 關鍵字:left join
- 書寫格式:
select 字段信息
from 表1 left join 表2
on 關聯(lián)關系
where 條件;
- 案例分析:
insert into emp(empno,ename) values(100,"滅霸");
查詢所有員工姓名和對應的部門信息
select e.ename,d.deptno,d.dname,d.loc
from emp e left join dept d
on e.deptno = d.deptno;
右連接
- 返回的結果包括右表中的全部數(shù)據(jù)和左表中滿足連接條件(關聯(lián)關系)的數(shù)據(jù)
- 關鍵字:right join
- 書寫格式:
select 字段信息
from 表1 right join 表2
on 關聯(lián)關系
where 條件;
- 案例分析:
查詢所有部門的名稱和對應的員工名
select d.dname,e.ename
from emp e right join dept d
on e.deptno = d.deptno;
注意事項:
- 等值查詢,內連接查詢,外連接查詢的功能是一樣,建議大家使用內連接,外連接;
- 等值查詢 關聯(lián)關系使用:where 關聯(lián)關系
- 內連接,外連接關聯(lián)關系使用:on 關聯(lián)關系
總結:
- 三種查詢方式:等值查詢,內連接,外連接
- 如果需要查詢兩張表的交集數(shù)據(jù)使用等值查詢和內連接(推薦)
- 如果查詢一張表的全部數(shù)據(jù)和另一張表的交集數(shù)據(jù)則使用外連接(推薦使用左連接)