日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

MySQL多表查詢操作

 流楚丶格念 2022-01-14

文章目錄

多表查詢

SQL99是一個SQL的標bai準,SQL是結構化查du詢語言的簡稱,只是一種查詢操作語言,zhiSQL99是其中一個標準,之前有daoSQL92,95等。主流的數據庫SQL Server2000/2005,Oracle等都支持SQL95以后的了,SQL99和95的分別不是很大,和92分別就大,我只知道剩Access用SQL92了。

1交叉連接:

叉集,即笛卡爾集
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關鍵字

3內連接

只返回滿足連接條件的數據(兩邊都有的才顯示)。 對應等值連接
select e.*, d.*
from emp e inner join dept d
on e.deptno=d.deptno
也可以省略inner關鍵字。
對應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關鍵字

5右外連接

右邊邊有值才顯示。
select e.*, d.*
from emp e right outer join dept d
on e.deptno=d.deptno
也可以省略outer關鍵字
【注意】SQL99中,外鏈接取值與關系表達式=號左右位置無關。取值跟from后表的書寫順序有關。 

“xxx left outer join yyy” 則為取出xxx的內容。
“xxx right outer join yyy”則為取出yyy的內容

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 inner join dept d
on e.deptno = d.deptno

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

7自連接

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

  1. 先按照oracle語法寫
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語法
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 ;

結論 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中有一個通用函數,與MYSQL中的ifnull函數名字相近:
nullif:如nullif(a, b) 當 a = b 時返回null, 不相等的時候返回a值。nullif('L9,999.99’, 'L9,999.99’)
mysql中nullif()函數也存在。

    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多