sql多表查詢

交叉鏈接查詢函數

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

語法就是select * from a,b;對象

內鏈接查詢,能夠有效的去除笛卡爾集現象ci

內鏈接查詢分爲兩類:class

隱式內鏈接 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.xxselect

舉例:語法

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

外鏈接總結

外鏈接有兩種方式,一種是左外鏈接,一種是右外鏈接查詢

左外鏈接: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表中)

相關文章
相關標籤/搜索