sql查詢語句學習,多表查詢和子查詢以及連接查詢


一、交叉連接查詢

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

  語法就是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 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表中)

五、總結

  內連接就是兩個表的交集

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

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

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM