1. 程式人生 > >多表查詢

多表查詢

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);

多表查詢