叉集,即笛卡爾集
select e.*, d.*
from emp e cross join dept d
無連接條件
2滿外聯(lián)接
任一邊有值就會顯示。
select e.*, d.*
from emp e full outer join dept d
on e.deptno=d.deptno
也可以省略outer關(guān)鍵字
3內(nèi)連接
只返回滿足連接條件的數(shù)據(jù)(兩邊都有的才顯示)。 對應(yīng)等值連接
select e.*, d.*
from emp e inner join dept d
on e.deptno=d.deptno
也可以省略inner關(guān)鍵字。
對應(yīng)Oracle寫法:
select e.*, d.*
from emp e , dept d
where e.deptno=d.deptno
4左外連接
左邊有值才顯示。
select e.*, d.*
from emp e left outer join dept d
on e.deptno=d.deptno
也可以省略outer關(guān)鍵字
5右外連接
右邊邊有值才顯示。
select e.*, d.*
from emp e right outer join dept d
on e.deptno=d.deptno
也可以省略outer關(guān)鍵字
【注意】SQL99中,外鏈接取值與關(guān)系表達式=號左右位置無關(guān)。取值跟from后表的書寫順序有關(guān)。
“xxx left outer join yyy” 則為取出xxx的內(nèi)容。 “xxx right outer join yyy”則為取出yyy的內(nèi)容
6對比練習
題目1:
查詢員工信息,員工號,姓名,月薪,部門名稱
select...from emp e, dept d
where e.deptno = d.deptno;
Oracle實現(xiàn):
select e.deptno, e.ename, e.sal, d.dname
from emp e, dept d
where e.deptno = d.deptno
SQL99實現(xiàn):
select e.deptno, e.ename, e.sal, d.dname
from emp e innerjoin dept d
on e.deptno = d.deptno
對比記憶規(guī)律:
“,” → [inner]joinwhere → on
對比結(jié)論:mysql能識別Oracle中使用 = 連接的書寫方法。
select e.ename, b.ename
from emp e, emp b
where e.mgr = b.empno
完善顯示格式concat
select concat( e.ename,' 的老板是 ', b.ename )from emp e, emp b
where e.mgr = b.empno
顯示king的老板
select concat( e.ename,' 的老板是 ', b.ename )from emp e, emp b
where e.mgr = b.empno (+)
改用MySQL支持的SQL99語法
select concat( e.ename,' 的老板是 ', b.ename )from emp e leftouterjoin emp b
on e.mgr = b.empno ;
濾空修正nvl
select concat( e.ename,' 的老板是 ', nvl(b.ename,'他自己'))from emp e leftouterjoin emp b
on e.mgr = b.empno ;
結(jié)論 nvl 在mysql下不能使用: ERROR 1305 (42000): FUNCTION mydb61.nvl does not exist 6. 濾空修正 ifnull
select concat( e.ename, ' 的老板是 ', ifnull(b.ename, '他自己'))
from emp e left outer join emp b
on e.mgr = b.empno ;
注意:
Oracle中有一個通用函數(shù),與MYSQL中的ifnull函數(shù)名字相近: nullif:如nullif(a, b) 當 a = b 時返回null, 不相等的時候返回a值。nullif('L9,999.99’, 'L9,999.99’) mysql中nullif()函數(shù)也存在。