1. 程式人生 > >常用SQL命令彙總(二)-多表查詢

常用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,不會去除掉系統的記錄;