七 SQL 子查詢 列子查詢

2021-10-13 13:07:08 字數 2623 閱讀 2657

與標量子查詢不同,列值子查詢可以返回乙個多行多列的結果集。這樣的子查詢又被稱為錶子查詢,錶子查詢可以看作乙個臨時的表,錶子查詢可以用在select 語句的from子句中、insert語句、連線、in 子句等很多場合。

首先來看乙個在from子句中使用的最簡單的錶子查詢。sql語句如下:

select t_reader.fname,t2.fyearpublished,t2.fname from t_reader,

(select * from t_book where fyearpublished < 1800) t2

這裡將t_reader表和錶子查詢做交叉連線,並且將「select * from t_book where fyearpublished < 1800」做為錶子查詢,還可以為表子查詢執行表別名,在select的列表中也可以使用和表一樣的列名應用方式,這與使用乙個普通的資料表沒有什麼區別。

執行結果:

fname fyearpublished fname

tom 1700 history of america

sam 1700 history of america

jerry 1700 history of america

lily 1700 history of america

marry 1700 history of america

kelly 1700 history of america

tim 1700 history of america

king 1700 history of america

john 1700 history of america

lucy 1700 history of america

july 1700 history of america

fige 1700 history of america

tom 1771 how to singing

sam 1771 how to singing

jerry 1771 how to singing

lily 1771 how to singing

marry 1771 how to singing

kelly 1771 how to singing

tim 1771 how to singing

king 1771 how to singing

john 1771 how to singing

lucy 1771 how to singing

july 1771 how to singing

錶子查詢可以看作一張臨時的表,所以引用子查詢中列的時候必須使用子查詢中定義的列名,也就是如果子查詢中為列定義了別名,那麼在引用的時候也要使用別名。比如下面的sql語句:

select t_reader.fname,t2.fyear,t2.fname ,

t2.f3 from t_reader,(select fyearpublished as fyear,

fname,1+2 as f3 from t_book where fyearpublished < 1800) t2

這裡的錶子查詢為fyearpublished列取了乙個別名fyear,這樣在引用它的時候就必須使用fyear而不能繼續使用fyearpublished這個名字,這裡子查詢中還增加了乙個新列f3,同樣可以在select列表中引用它。

執行結果:

fname fyear fname f3

tom 1700 history of america 3

sam 1700 history of america 3

jerry 1700 history of america 3

lily 1700 history of america 3

marry 1700 history of america 3

kelly 1700 history of america 3

tim 1700 history of america 3

king 1700 history of america 3

john 1700 history of america 3

lucy 1700 history of america 3

july 1700 history of america 3

fige 1700 history of america 3

tom 1771 how to singing 3

sam 1771 how to singing 3

jerry 1771 how to singing 3

lily 1771 how to singing 3

marry 1771 how to singing 3

kelly 1771 how to singing 3

tim 1771 how to singing 3

king 1771 how to singing 3

john 1771 how to singing 3

lucy 1771 how to singing 3

july 1771 how to singing 3

列子查詢(多行子查詢)

多行子查詢 返回多行。使用多行比較操作符。操作符 含義 in not in 等於列表中的任意乙個 any some 和子查詢返回的某乙個值比較 all 和子查詢返回的所有值比較 案例1 返回location id是1400或1700的部門中的所有員工姓名 1.查詢location id是1400或1...

MySQL中的標量子查詢,列子查詢,行子查詢

標量子查詢,列子查詢,行子查詢都屬於where子查詢,也就是說都寫在where之後 標量子查詢 概念 子查詢得到的結果是乙個資料 一行一列 語法 select from 資料來源 where 條件判斷 select 欄位名 from 資料來源 where 條件判斷 查詢到的結果就只有乙個結果 案例 ...

SQL多條件查詢子查詢SQL多條件查詢子查詢

多條件搜尋時where 1 1並不高效,如果使用這種方法,在資料庫中會做全表查詢 對每行資料都進行掃瞄比對 會無法使用索引等優化查詢的策略,建立的索引會暫時失效。case函式 case必須和end一起使用,下接when then select 數學成績 case when math 100 then...