小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

MySQL多表查詢(xún)操作

 流楚丶格念 2022-01-14

文章目錄

多表查詢(xún)

補(bǔ)SQL99是一個(gè)SQL的標(biāo)bai準(zhǔn),SQL是結(jié)構(gòu)化查du詢(xún)語(yǔ)言的簡(jiǎn)稱(chēng),只是一種查詢(xún)操作語(yǔ)言,zhiSQL99是其中一個(gè)標(biāo)準(zhǔn),之前有daoSQL92,95等。主流的數(shù)據(jù)庫(kù)SQL Server2000/2005,Oracle等都支持SQL95以后的了,SQL99和95的分別不是很大,和92分別就大,我只知道剩Access用SQL92了。

1交叉連接:

叉集,即笛卡爾集
select e.*, d.*
from emp e cross join dept d
無(wú)連接條件

2滿(mǎn)外聯(lián)接

任一邊有值就會(huì)顯示。
select e.*, d.*
from emp e full outer join dept d
on e.deptno=d.deptno
也可以省略outer關(guān)鍵字

3內(nèi)連接

只返回滿(mǎn)足連接條件的數(shù)據(jù)(兩邊都有的才顯示)。 對(duì)應(yīng)等值連接
select e.*, d.*
from emp e inner join dept d
on e.deptno=d.deptno
也可以省略inner關(guān)鍵字。
對(duì)應(yīng)Oracle寫(xiě)法:
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)系表達(dá)式=號(hào)左右位置無(wú)關(guān)。取值跟from后表的書(shū)寫(xiě)順序有關(guān)。 

“xxx left outer join yyy” 則為取出xxx的內(nèi)容。
“xxx right outer join yyy”則為取出yyy的內(nèi)容

6對(duì)比練習(xí)

題目1:

查詢(xún)員工信息,員工號(hào),姓名,月薪,部門(mén)名稱(chēng)

select ...
from emp e, dept d
where e.deptno = d.deptno;

Oracle實(shí)現(xiàn):
select e.deptno, e.ename, e.sal, d.dname
from emp e, dept d
where e.deptno = d.deptno

SQL99實(shí)現(xiàn):
select e.deptno, e.ename, e.sal, d.dname
from emp e inner join dept d
on e.deptno = d.deptno

對(duì)比記憶規(guī)律:
“,” → [inner] join 
whereon
對(duì)比結(jié)論:mysql能識(shí)別Oracle中使用 = 連接的書(shū)寫(xiě)方法。

7自連接

查詢(xún)員工、老板信息,顯示: xxx的老板是xxx
分析:將一張emp表當(dāng)成兩張表看待:員工表、老板表(員工表的老板 是 老板表的員工)

  1. 先按照oracle語(yǔ)法寫(xiě)
select e.ename, b.ename
from emp e, emp b
where e.mgr = b.empno
  1. 完善顯示格式concat
select concat( e.ename, ' 的老板是 ',  b.ename )
from emp e, emp b
where e.mgr = b.empno
  1. 顯示king的老板
select concat( e.ename, ' 的老板是 ',  b.ename )
from emp e, emp b
where e.mgr = b.empno (+)
  1. 改用MySQL支持的SQL99語(yǔ)法
select concat( e.ename, ' 的老板是 ',  b.ename )
from emp e left outer join emp b
on e.mgr = b.empno ;
  1. 濾空修正nvl
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中有一個(gè)通用函數(shù),與MYSQL中的ifnull函數(shù)名字相近:
nullif:如nullif(a, b) 當(dāng) a = b 時(shí)返回null, 不相等的時(shí)候返回a值。nullif('L9,999.99’, 'L9,999.99’)
mysql中nullif()函數(shù)也存在。

    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶(hù) 評(píng)論公約

    類(lèi)似文章 更多