本文是個人學習的一些總結,非零基礎教程;
適用於Oracle中的SQL語法,其他資料庫可能稍有差異。
二、集合運算
1. 併集
併集:將兩個數據集合整合到一起,將其展現出來,列名以第一個集合為準
UNION UNION ALL
SELECT * FROM ...UNION [ALL]SELECT * FROM ...;2. 交集
交集:將兩個數據集合中重複的數據整合到一起,將其展現出來
SELECT * FROM ...INTERSECTSELECT * FROM ...;3. 差集
差集:從當前集合中去掉後面集合中存在的數據,將其展現出來
SELECT * FROM ...MINUSSELECT * FROM ...;集合操作,兩個集合的列名個數及數據類型需得一致,名稱可以不一樣
同列名的集合做運算時,列名永遠與第一個集合的列名相等
三、子查詢
1. 基本語法結構
-- 概念:在一個查詢語句中的某些位置,嵌套多個查詢語句
SELECT (<單行單列> 子查詢)FROM (<單行單列><多行單列><單行多列><多行多列> 子查詢)WHERE (<單行單列><多行單列><單行多列><多行多列> 子查詢) --注意條件的使用、列的匹配程度、數據類型GROUP BY (/) --此處不可嵌套子查詢HAVING (<單行單列><多行單列><單行多列><多行多列> 子查詢)ORDER BY (<單行單列> 子查詢)子查詢一般是一個完整的查詢語句
子查詢可以多層嵌套
可以在多個子句中加子查詢
經典面試題:
SELECT COUNT(1) FROM <table> GROUP BY <col> HAVING COUNT(col)>1;SELECT * FROM emp WHERE hiredate in (SELECT hiredate FROM emp GROUP BY hiredate HAVING COUNT(empno)>1);SELECT * FROM emp e1WHERE EXISTS (SELECT * FROM emp e2 WHERE e1.hiredate=e2.hiredate);2. 相關子查詢與非相關子查詢
(1)相關子查詢
相關子查詢就是把主查詢的值作為參數傳遞給子查詢
(2)不相關子查詢
子句與主句互不幹涉,子句能夠單獨運行。
非相關子查詢執行順序是先執行子查詢,再執行主查詢
3. IN/EXISTS
(1)IN + 子查詢
當子查詢中表的數據量不大時,用IN 比較合適
(2)EXISTS + 子查詢
當子查詢中表的數據量過大時,用EXISTS 比較合適
SELECT empno,ename,jobFROM emp eWHERE EXISTS (SELECT loc FROM dept d WHERE loc = 'NEW YORK' AND e.deptno = d.deptno);SELECT empno,ename,jobFROM empWHERE deptno IN (SELECT deptno FROM dept WHERE loc = 'NEW YORK');六、表連接
1. 笛卡爾積:
兩個表做笛卡爾積,得到的結果集的行數是兩個表的行數的乘積
SELECT Col_list FROM Table1, Table2;SELECT Col_list FROM Table1 CROSS JOIN Table2;兩表中含有相同的列名
2. 外連接
(1)左外連接
返回左表中的所有行,如果左表中的行在右表中沒有匹配行,則在右邊中相關欄位返回null值
SELECT Col_listFROM Table1 T1 LEFT [OUTER] JOIN Table2 T2 ON T1.Column = T2.ColumnFROM Table1,Table2 WHERE Table1.Column = Table2.Column(+)(2)右外連接
返回右表中所有的行,如果右表中的行在左表中沒有匹配行,則在左表中相關欄位返回null值
SELECT Col_listFROM Table1 T1 RIGHT [OUTER] JOIN Table2 T2 ON T1.Column = T2.ColumnFROM Table1,Table2 WHERE Table1.Column(+) = Table2.Column(3)全外連接
返回兩個表中所有的記錄數據,沒有匹配行的均顯示null值,是左外連接和右外連接的併集
SELECT Col_listFROM Table1 T1 FULL [OUTER] JOIN Table2 T2 ON T1.Column = T2.Column3. 內連接
SELECT Col_listFROM Table1 T1 [INNER] JOIN Table2 T2 ON T1.Column = T2.Column4. 自然連接
自動尋找相同的列做連接,去掉重複的列,形成的連接,並把比較列放在在前面
SELECT Col_listFROM Table1 T1 NATURAL JOIN Table2 T25. 自連接
如果在一個連接查詢中,涉及到的兩個表都是同一個表,這種查詢稱為自連接查詢
SELECT Col_listFROM Table1 T1 JOIN Table1 T2ON T1.Column = T2.Column
代替" ON + 條件 "按照括號內的列名進行關聯,並且把列名顯示在最前面SELECT Col_listFROM Table1 T1 JOIN Table2 T2 USING (Col_1, Col_2);6. 不等連接
連接條件是不等式
以上內容,均為個人學習總結,如有錯誤,歡迎留言指正!