多表查詢
阿新 • • 發佈:2017-07-18
outer 一個 where 同時 要求 pre bsp 但是 都是
外鍵是作為與主表的主鍵相關聯的鍵值,外鍵可以有多個,同時有外鍵的表稱作對應主鍵所在表的從表,那主鍵所在的表就作主表。圖中,tid是教師表中id的外鍵,也就學生表是教師表的從表,同理,教師表也就是院系表的從表。
外鍵的主要作用是保持數據一致性,完整性,主要目的是控制存儲在外鍵表中的數據。
思考題:要求查詢出每個雇員的編號,姓名,工資,部門名稱,工資所在公司的工資等級 --第一步確定所需要的表,以及表中字段 --emp,dept,salgrade --emp:雇員編號,姓名,工資 --dept: 部門名稱 --salgrade: 工資等級 --第二步確定表的關聯字段 --emp.deptno=dept.deptno--emp.sal between salgrade.losal and salgrade.hisal --第三步:查詢每個雇員的信息 select e.empno,e.ename,e.sal from emp e --第四步:為查詢引入部門信息,並添加消除笛卡爾積的條件 select e.empno,e.ename,e.sal,d.dname from emp e,dept d where e.deptno=d.deptno --第五步:為查詢引入工資等級信息,並添加消除笛卡爾積德條件 select e.empno,e.ename,e.sal,d.dname,s.grade from emp e,dept d,salgrade s where e.deptno=d.deptno and e.sal between s.losal and s.hisal
交叉連接(cross join):用於產生笛卡爾積(笛卡爾積本身並不是屬於無用的內容,在某些情況下還是需要使用的)
select * from emp cross join dept;
b、自然連接(natural join):自動找到匹配的關聯字段,消除掉笛卡爾積
select * from emp natural join detp
但是並不是所有的字段都是關聯字段,設置關聯字段需要通過約束指定;
c、join using子句:用戶自己指定一個消除笛卡爾積的關聯字段
select * from emp join dept using(deptno);
d、join ... on子句:用戶自己指定一個可以消除笛卡爾積德關聯條件
select * from emp join dept on(emp.deptno=dept.deptno);
e、連接方向的改變:
左(外)連接: left outer join ...on;
右(外)連接: right outer join ...on;
全(外)連接: full outer join ...on;
select * from emp right outer join dept on(emp.deptno=dept.deptno);
多表查詢