為什麼要表連接進行查詢? 查詢部門名稱為SALES的員工信息 如何進行表的連接查詢? 兩種方式:Sql 1992 和sql1999 sql1992sql分類 1.笛卡爾積 (表乘表) 2.等值連接 表的連接條件使用“=” 3.非等值連接 表的連接條件使用“>、>=、 <、<=、!=、any等” 4. ...
為什麼要表連接進行查詢?
查詢部門名稱為SALES的員工信息
如何進行表的連接查詢?
兩種方式:Sql 1992 和sql1999
sql1992
sql分類
1.笛卡爾積 (表乘表)
2.等值連接 表的連接條件使用“=”
3.非等值連接 表的連接條件使用“>、>=、 <、<=、!=、any等”
4.自連接 自己連接自己
5.外連接
1.左外連接,“(+)”在等號右邊
2.右外連接,“(+)”在等號左邊
3.“(+)”在哪一邊的列,該表就補充null
--1992
--語法
/*
SELECT table1.column, table2.column FROM table1, table2 WHERE table1.column1 = table2.column2;
where後跟表的連接條件
連接類型:
1.笛卡爾積 (表X表)
select * from emp,dept;
2.等值連接 (列=列)
--查詢員工的部門名稱
select e.ename,d.dname from emp e,dept d where e.deptno = d.deptno
3.非等值連接 (列!=列)
--查詢員工的薪水等級
select e.ename,s.grade from emp e,salgrade s where e.sal between s.losal and s.hisal
4.自連接 (表自己連接自己)
--查詢員工上司的姓名:以"xxx的上司是xxx"方式顯示
select e1.ename||'的上司是'|| e2.ename from emp e1,emp e2 where e1.mgr = e2.empno
5.外連接 (在滿足一張表的內容都顯示的基礎上,連接另外一張表,如果連接匹配則正常顯示,連接不匹配,另外一張表補null)
select e.ename,d.dname from emp e, dept d where e.deptno = d.deptno (+
“(+)” 在右邊,我們稱這次查詢為“左外連接查詢”
“(+)” 在左邊,我們成這次查詢為“右外連接查詢”
“(+)” 在等號哪一邊,哪張表就補null
--sql 1992 缺點一:表的連接條件和表的過濾放在了一起
--查詢員工工資大於2000的部門名稱
select e.ename,d.dname from emp e,dept d where e.deptno = d.deptno and e.sal >2000
--sql 1992 缺點:外連接不太容易識別
sql1999
sql分類
1.cross join 交叉連接 (笛卡爾積) ,不需要on關鍵字
2.natural join 自然連接 (找兩個表中相同的列,進行等值匹配),不需要on關鍵字
3.inner join 內連接
1)必須有on關鍵字,on表示連接條件
2)inner關鍵字可以省略
4.outer join 外連接,outer關鍵字可以省略
1) left outer join
2) right outer join
3) full outer join
--sql 1999
語法:
select a.column,b.column from 表A 連接類型 join 表B on 連接條件
連接類型:
1.CROSS JOIN 交叉連接,就是笛卡爾積
select * from emp cross join dept
2.NATURAL JOIN 自然連接,找到兩張表中具有相同名稱列,進行等值連接
select * from emp natural join dept
3.INNER JOIN 內連接 (inner關鍵字可以省略)
--等值連接
select e.ename,d.dname from emp e INNER JOIN dept d on e.deptno = d.deptno where e.sal > 2000
--非等值連接
select e.ename,s.grade from emp e INNER JOIN salgrade s on e.sal between s.losal and s.hisal
--自連接
select e1.ename || '的上司是' || e2.ename from emp e1 INNER JOIN emp e2 on e1.mgr = e2.empno
--外連接(outer關鍵字可以省略)
4.LEFT OUTER JOIN
select * from emp e LEFT OUTER JOIN dept d on e.deptno = d.deptno
5.RIGHT OUTER JOIN
select * from emp e RIGHT OUTER JOIN dept d on e.deptno = d.deptno
6.FULL OUTER JOIN
select * from emp e FULL OUTER JOIN dept d on e.deptno = d.deptno
--如何進行多表連接
--查詢員工的姓名、薪水、部門名稱及工資等級
select 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
select e.ename, e.sal, d.dname, s.grade from emp e join dept d on e.deptno = d.deptno join salgrade s on e.sal between s.losal and s.hisal