1. 程式人生 > >SQL中的子查詢的使用

SQL中的子查詢的使用

這篇文章講述了SQL中的子查詢,如有錯誤或者不妥之處,還請各位大佬批評指正。

什麼是子查詢?

把一個查詢的結果在另一個查詢中使用就叫做子查詢

初始資料

有五個表:學生表,老師表,課程表,學院表,課程成績表。

表結構

這裡寫圖片描述

初始資料

  1. 學生表
    這裡寫圖片描述
  2. 老師表
    這裡寫圖片描述
  3. 課程表
    這裡寫圖片描述
  4. 學院表
    這裡寫圖片描述
  5. 課程成績表
    這裡寫圖片描述

單行子查詢

返回的結果集為單個的子查詢,叫做單行子查詢。單行比較符有 >、>=、<、<=、!=。

  • 查詢平均成績比‘王五’大的學生id,姓名,平均成績
select s.s_id , s.s_name , avg(score)
from
t_student s join t_grade g on s.s_id = g.s_id group by s.s_id , s.s_name having avg(score) > (select avg(score) from t_student s join t_grade g on s.s_id = g.s_id where s.s_name = '王五' group by s.s_id)

查詢結果:
這裡寫圖片描述

注:子查詢中可以巢狀函式,多行子查詢不能使用單行比較符。

多行子查詢

返回的結果集為多個的子查詢,為多行子查詢,多行子比較符有 IN(等於列中任意一個)、ANY(和子查詢返回的某個值比較),ALL(和子查詢返回的所有值比較)。

  • 查詢其他課程中比課程id為‘400004’課程的任一分數低的學生的學號、姓名、課程號、課程名、分數(ANY)
select s.s_id , s_name , c.c_id , c_name , score
from t_grade g join t_student s on g.s_id = s.s_id
               join t_course c on g.c_id = c.c_id
having
c.c_id != 400004 and avg (score) < any ( select avg(score) from t_grade where c_id = 400004 group by (c_id) ) group by c.c_id , s.s_id , s.s_name , c_name ,score

查詢結果:
這裡寫圖片描述

  • 查詢其他課程中比課程id為‘400004’課程的所有分數高的學生的學號、姓名、課程號、課程名、分數(ALL)
select s.s_id , s_name , c.c_id , c_name , score
from t_grade g join t_student s on g.s_id = s.s_id
               join t_course c on g.c_id = c.c_id
having c.c_id != 400004 and score > all (
                                        select score
                                        from t_grade 
                                        where c_id = 400004
                                        )
group by c.c_id , s.s_id , s.s_name , c_name ,score

查詢結果:
這裡寫圖片描述

總結:ANY相當於和結果集中的任一一個作比較、若滿足則返回,ALL相當於和結果集中的所有結果作比較,若滿足則返回。

相關推薦

關於postgres一條sql語句中子查詢的返回值不止一個,且拼接成相關規則的字串

這個問題之前好像碰到過,後來分成兩次查詢,最後把相關資料有拼接了一下,當時算是矇混過關了。 但是古語有云:自己挖的坑,含著淚也要給填了。 這次有碰到這個問題,但是不想還查兩遍了,就查閱相關資料把它解決了~! 資料庫postgreSQL select array_to_str

MySQL 抓取SQL查詢語句

mysql 索引 數據表 sql慢查詢 逗哥自動化 當MySQL服務器出現異常(慢),首先要考慮是否因,SQL語句引起數據庫慢,如果情況比較緊急,我們就要立刻 SHOW FULL PROCESSLIST; 去查看,但我建議大家使用-e參數,采用非交互的方式,因為這樣可以使用grep

tp3.2原生sql拼接查詢

tp3.2原生sql拼接查詢//獲取搜索結果 $sql = "SELECT * FROM `br_esf_village_price` p,(SELECT villageId,MAX(updateTime) max_time FROM br_esf_village_price GROUP B

SQL Server 查詢性能優化——創建索引原則(二)

技術分享 dex ble 銷售 得到 with 9.png ron 條件 三:索引的建立原則   一般來說,建立索引要看數據使用的場景,換句話來說哪些訪問數據的SQL語句是常用的,而這些語句是否因為缺少索引(也有可能是索引過多)變的效率低下。但絕不是所有的SQL語句都要建

SQL 模糊查詢

配對 address string 引號 add table cell code 過程 SQL 模糊查詢 在進行數據庫查詢時,有完整查詢和模糊查詢之分。一般模糊查詢語句如下: SELECT 字段 FROM 表 WHERE 某字段 Like 條件 其中關於

SQL Server查詢中特殊字符的處理方法

下劃線 包括 舉例 art 劃線 一個 表達 com ase SQL Server查詢中,經常會遇到一些特殊字符,比如單引號“‘”等,這些字符的處理方法,是SQL Server用戶都應該需要知道的。 我們都知道SQL Server查詢過程中,單引號“‘”是特殊字符,所以在S

sql面試-查詢選修課程的學生

名單 模式 面試 至少 含義 select cname base .html 首先: 1 。 EXISTS 子查詢找到的提交 NOT EXISTS 子查詢中 找不到的提交 說明:不要去翻譯為存在和不存在,把腦袋搞暈。 2

SQL 限制查詢結果

顯示 sql 限制行 SQL查詢結果只顯示指定的行項目。舉例:只顯示查詢結果的前5行。SQL SERVER:select top 5 ‘列名‘ from ‘表名‘;ORACLE:select ‘列名‘ from ‘表名‘ where rownum <=5 ;本文出自 “白楊” 博客,請務必保

sql查詢

編寫 min style side lower any 編號 示例 操作 子查詢就是指的在一個完整的查詢語句之中,嵌套若幹個不同功能的小查詢,從而一起完成復雜查詢的一種編寫形式,為了讓讀者更加清楚子查詢的概念。子查詢返回結果子查詢可以返回的數據類型一共分為四種:單行單列:返

SQL Server 查詢處理中的各個階段(SQL執行順序)

派生 步驟 sel 合成 emp lec 限制 對象 沒有 SQL 不同於與其他編程語言的最明顯特征是處理代碼的順序。在大數編程語言中,代碼按編碼順序被處理,但是在SQL語言中,第一個被處理的子句是FROM子句,盡管SELECT語句第一個出現,但是幾乎總是最後被處

SQL查詢結果裏查詢

create csdn www. ++ .text 我卻 number 問題 for 有orders表: 我想要從從表中查出每天電動車和手機各自的銷售總額。這個需求還是蠻簡單的,僅僅須要依據createtime和product group by即可

【轉】SQL模糊查詢

使用 模式 正則表達 bcd 一個 長度 排除 lsp [] 在進行數據庫查詢時,有完整查詢和模糊查詢之分。一般模糊查詢語句如下: SELECT 字段 FROM 表 WHERE 某字段 Like 條件 其中關於條件,SQL提供了四種匹

數據庫SQL語句查詢指定時間段內的數據

between 數據 spa and -m 指定 timestamp mes font 【摘要】有的時候,我們需要查詢數據庫某段時間之間的數據,比如2016年5月1號到到5月3號之間用戶註冊數量(特殊節假日期間)等。那麽用SQL語句如何實現呢? 首先,數據表中的存時間的字段

45、SQL邏輯查詢語句執行順序

mysq 一定的 gif 行數據 查詢語句 客戶 prim 記錄 測試表 一 SELECT語句關鍵字的定義順序 SELECT DISTINCT <select_list> FROM <left_table> <join_type> J

SQL Server 查詢數據大小

spa space different dbcc sys 數據庫服務 gsp blog mas SELECT DB_NAME(database_id) AS [Database Name],[Name] AS [Logical Name],[Physical_Name]

深入淺出的 SQL Server 查詢優化

import 抽象 one 圖書 不同的 創建 vertical border server 目前網絡數據庫的應用已經成為最為廣泛的應用之一了,並且關於數據庫的安全性,性能都是企業最為關心的事情。數據庫漸漸成為企業的命脈,優化查詢就解決了每個關於數據庫應用的性能問題,在這裏

python 3 mysql sql邏輯查詢語句執行順序

shanghai 不能 結果 utf8 才會 right 完成 並且 分享 python 3 mysql sql邏輯查詢語句執行順序 一 、SELECT語句關鍵字的定義順序 SELECT DISTINCT <select_list> FROM <left

SQL查詢函數LOCATE、POSITION、INSTR、FIND_IN_SET、IN、LIKE

set 查詢函數 log oca pos str locate ins images SQL之查詢函數LOCATE、POSITION、INSTR、FIND_IN_SET、IN、LIKE

sql分組查詢和連接查詢

avi rop select 連接 where子句 統計 表連接 聚合 where 分組查詢select 查詢信息 from 表名where 條件group by 按照列分組(可多個 ,隔開)order by 排序方式(查詢信息如果列名和聚合函數同時出現,要麽在聚合函數中出

sql server 查詢某個時間段共有多少周及每周的日期段

images first mage 語句 .html cas src exce 時間 sql 語句 select number+1 as wknum,dateadd(wk,number,‘2017-01-01‘) as firstday, (case when year(