補:SQL99是一個SQL的標bai準,SQL是結(jié)構(gòu)化查du詢語言的簡稱,只是一種查詢操作語言,zhiSQL99是其中一個標準,之前有daoSQL92,95等。主流的數(shù)據(jù)庫SQL Server2000/2005,Oracle等都支持SQL95以后的了,SQL99和95的分別不是很大,和92分別就大,我只知道剩Access用SQL92了。
叉集,即笛卡爾集
select e.*, d.*
from emp e cross join dept d
無連接條件
任一邊有值就會顯示。
select e.*, d.*
from emp e full outer join dept d
on e.deptno=d.deptno
也可以省略outer關(guān)鍵字
只返回滿足連接條件的數(shù)據(jù)(兩邊都有的才顯示)。 對應等值連接
select e.*, d.*
from emp e inner join dept d
on e.deptno=d.deptno
也可以省略inner關(guān)鍵字。
對應Oracle寫法:
select e.*, d.*
from emp e , dept d
where e.deptno=d.deptno
左邊有值才顯示。
select e.*, d.*
from emp e left outer join dept d
on e.deptno=d.deptno
也可以省略outer關(guān)鍵字
右邊邊有值才顯示。
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)容
查詢員工信息,員工號,姓名,月薪,部門名稱
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 inner join dept d
on e.deptno = d.deptno
對比記憶規(guī)律:
“,” → [inner] join
where → on
對比結(jié)論:mysql能識別Oracle中使用 = 連接的書寫方法。
查詢員工、老板信息,顯示: xxx的老板是xxx
分析:將一張emp表當成兩張表看待:員工表、老板表(員工表的老板 是 老板表的員工)
select e.ename, b.ename
from emp e, emp b
where e.mgr = b.empno
select concat( e.ename, ' 的老板是 ', b.ename )
from emp e, emp b
where e.mgr = b.empno
select concat( e.ename, ' 的老板是 ', b.ename )
from emp e, emp b
where e.mgr = b.empno (+)
select concat( e.ename, ' 的老板是 ', b.ename )
from emp e left outer join emp b
on e.mgr = b.empno ;
select concat( e.ename, ' 的老板是 ', nvl(b.ename, '他自己' ) )
from emp e left outer join 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ù)也存在。