數據庫查詢,內連接,外連接,子查詢,交叉連接查詢

交叉連接查詢

這種查詢方式基本不會使用,原因就是這種查詢方式得到的是兩個表的乘積(笛卡兒集)

語法就是select * from a,b;

數據庫查詢,內連接,外連接,子查詢,交叉連接查詢

內連接查詢,可以有效的去除笛卡爾集現象

內連接查詢分為兩類:

隱式內連接 select * from A,B where 條件

隱式連接使用別名:select * from A 別名1,B 別名2 where 別名1.xx=別名2.xx;

顯示內連接 select * from A inner join B on 條件 (inner可以省略)

顯示連接使用別名: select * from A 別名1 inner join B 別名2 on 別名1.xx=別名2.xx

舉例:

SELECT * FROM category c,product p WHERE c.cid=p.category_id;

數據庫查詢,內連接,外連接,子查詢,交叉連接查詢

外連接

外連接有兩種方式,一種是左外連接,一種是右外連接

左外連接:select * from A left outer join B on條件

右外連接:select * from A right out join B on 條件

左外連接就是左邊的表的內容全部顯示,然後匹配右邊的表,如果右邊的表匹配不到,則空

右外連接就是右邊的表的內容全部顯示,然後匹配左邊的表,如果左邊的表匹配不到,則空

總結:

內連接就是兩個表的交集

左外連接就是左邊表加兩表交集

右外連接就是右邊表加兩表交集

數據庫查詢,內連接,外連接,子查詢,交叉連接查詢

子查詢

子查詢就是查詢中還有查詢,就是一條select語句結果作為另外一條select語法的一部分(查詢結果,查詢條件,表等)

子查詢的用處很多比如:查詢本公司工資最高的員工的詳細信息

select * from emp where sal=max(sal)這個是錯誤的,原因是聚合函數不可以用在條件中,要想解決這個問題,只能用子查詢

select* from emp where sal=(select max(sal)from emp)

exists關鍵字

select * from emp where exists(select max(sal) from emp)

這句話的意思是隻要(select max(sal) from emp)有結果則執行select * from emp,否則不執行

子查詢出現在where後是作為條件出現的

子查詢出現在from之後是作為表存在的

作為表舉例 select e.emono,e.ename from(select * from where deptno=30) e

還給表起了一個別名e

作為條件有以下幾種情況

單行單列:可以使用=,>,=,<=,!=

多行單列(集合)可以用All ANY IN not IN

單行多列(對象),就是一行,像一個對象一樣什麼屬性都有

多行多列:多行多列一直用在from後面作為表

單行單列舉例:select * from emp where sal >(select avg(sal) from emp)

多行多列舉例:select * from emp where sal> All(select sal from emp where deptno=10)

單行多列舉例:select * from emp where(job,deptno,sal)IN(select job,deptno,sal from emp where ename='殷天正');(查詢和殷天正一樣工作,工號,工資的人的工作,工號,工資從emp表中)


分享到:


相關文章: