交叉鏈接查詢函數
這種查詢方式基本不會使用,緣由就是這種查詢方式獲得的是兩個表的乘積(笛卡兒集)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表中)