常用SQL命令彙總(二)-多表查詢
一、多表查詢
1.連線查詢:
連線查詢是將兩個或兩個以上的表按照某個條件連線起來,從中選取需要的資料;
t_book表: t_bookType表:
如:SELECT * from t_book,t_booktype; 返回結果將兩個表的所有組合結果返回
1、內連線查詢:
內連線查詢是一種最常用的連線查詢。內連線查詢可以查詢兩個或者兩個以上的表;
SELECT * from t_book b,t_booktype t where t.id=b.id;
或SELECT * from t_book,t_booktype where t_book.id=t_booktype.id;
查詢結果:
也可這麼寫來查詢需要的欄位:SELECT bookName,author,bookTypeName from t_book,t_booktype where t_book.id=t_booktype.id;
注意:如果查詢的欄位(如id)中兩個表都有時這種寫法會出錯,因為無法得知id是哪個表的欄位,所以平時多表查詢時要寫別名
修改為:SELECT tb.bookName,tb.author,tby.id from t_book tb ,t_booktype tby where tb.id=tby.id;
2、外連線查詢
外連線可以查出某一張表的所有資訊;
SELECT 屬性名列表 FROM 表名 1 LEFT|RIGHT JOIN 表名 2 ON 表名 1.屬性名 1=表名 2.屬性名 2;
- 左連線查詢:
可以查詢出“表名 1”的所有記錄,而“表名 2”中,只能查詢出匹配的記錄;如:
select * from t_book tb left JOIN t_booktype tby on tb.bookTypeId=tby.id; 查詢結果:
- 右連線查詢:
可以查詢出“表名 2”的所有記錄,而“表名 1”中,只能查詢出匹配的記錄;如:
select * from t_book tb right JOIN t_booktype tby on tb.bookTypeId=tby.id; 查詢結果:
- 多條件連線查詢
即where後面有多個條件and連線查詢
2.子查詢
1 、帶 In 關鍵字的子查詢
一個查詢語句的條件可能落在另一個 SELECT 語句的查詢結果中。
2 、帶比較運算子的子查詢
子查詢可以使用比較運算子。
3 、帶 (not)Exists 關鍵字的子查詢
假如子查詢查詢到記錄,則進行外層查詢,否則,不執行外層查詢;not exists表示內層沒有內容時才查詢外層
如:SELECT * from t_book where EXISTS(select * from t_booktype);//表示t_booktype中返回的有內容時才執行外層t_book的查詢
4 、帶 Any 關鍵字的子查詢
ANY 關鍵字表示滿足其中任一條件;如:SELECT * FROM t_book WHERE price>= ANY (SELECT price FROM t_pricelevel);//表示篩選價格大於任意t_pricelevel表中選出的價格的結果,即比最小的大的價格就滿足條件
5 、帶 All 關鍵字的子查詢
ALL 關鍵字表示滿足所有條件;如:SELECT * FROM t_book WHERE price>= ALL (SELECT price FROM t_pricelevel);//表示篩選價格大於所有t_pricelevel表中選出的價格的結果,即比最大的價格大的才滿足條件
3.合併查詢
- UNION
使用 UNION 關鍵字是,資料庫系統會將所有的查詢結果合併到一起,然後去除掉相同的記錄;
- UNION ALL
使用 UNION ALL,不會去除掉系統的記錄;