MYSQL必知必會:分組查詢和子查詢
除了一些彙總函式之外,還可以根據欄位進行分組,分組之後再進行資料的彙總或過濾等其他查詢操作.
下面有張表t5,分別有id,name,subject,score四個欄位.
1.分組過濾.
分組過濾是把一張表內的剩餘的記錄通過某個欄位進行分組,關鍵詞是group by.剩餘的指的是:再分組過濾之前,我們可以先通過where過濾一部分記錄.然後在進行分組操作.
先看下第一個例子.
example1:要求列出每個學生的名字和考試的門數.在這裡我們對name欄位進行分組,然後通過呼叫count(*)函式來獲得每個組的記錄數量.
example2:要求列出考試門數大於2門的學生的名字和考試的門數.這裡就需要先通過name進行分組,然後再分組的基礎上,再進行過濾.當然這裡的關鍵詞不是where,而是having.where和having很像,但是他們最大的區別在於:
where用於對記錄的過濾.having用於對組的過濾.也就是說where用於分組前過濾資料,having再分組後進行過濾.
example3:要求列出分數>80分的科目數量>=2門的學生的姓名和科目數量.這裡就需要先對所有的記錄進行過濾,然後再進行分組,再對組進行過濾.
example4:要求列出每個科目得最高分的學生的姓名和分數.(假設最高分沒有重疊.)
這裡就根據subject欄位進行分組,然後對每個組呼叫了max()函式找出分數最高的學生的姓名和分數.注意order by排序是在之前的所有操作完成後才執行的..
2.子查詢
子查詢指的是:把一個查詢語句查詢到的結果,作為篩選過濾的條件來進行條件過濾.見下例.
example5:根據表t5,列出所有分數中得到最高分的一名學生的所有考試科目以及成績.(如果最高分相同,則按照名字字典序排列.)
根據題目,很清楚:
第一步:只需要先找到得到分數最高的學生名字.返回的是一個值.(在這個例子是一個值.)
第二步:去查詢這個學生名字的所有考試記錄即可.
我們把兩個步驟的語句寫到一個語句中去,第一步的步驟就作為第二步的子查詢.子查詢可以巢狀多層.但是由於效能的限制,最好不要巢狀太多的子查詢,你必須要知道,並不是說在mysql資料中查詢語句不用花費太多的時間.
之前的例子一直都是單表查詢,下面再多加一張學生資訊表.分別有學號,名字,性別3個欄位.
example6:*要求列出考試門數大於2門的學生的學號,名字和性別.
這裡就可以通過in操作符來過濾資料.
相關推薦
MYSQL必知必會:分組查詢和子查詢
除了一些彙總函式之外,還可以根據欄位進行分組,分組之後再進行資料的彙總或過濾等其他查詢操作. 下面有張表t5,分別有id,name,subject,score四個欄位. 1.分組過濾. 分組過濾是把一張表內的剩餘的記錄通過某個欄位進行分組,關鍵詞是gr
MySQL練習題:多表查詢和子查詢
1. 列出至少有4個員工的部門名稱 2. 列出薪金比"SMITH"多的所有員工 3. 列出所有員工的姓名以及其直接上級的姓名 4. 列出受僱日期早於其直接上級的所有員工的編號、姓名、部門名稱 5. 列出部門名稱和這些部門的員工資訊,同時列出那些沒有員工的部門 6. 列出所有從事"CLERK"工作
Java 11---SELECT分組查詢和子查詢
導讀 1.GROUP BY子句 2.HAVING子句 3.巢狀子查詢 GROUP BY子句 語法: SELECT FROM WHERE GROUP BY 列1,列2... ORDER BY; 注意: 1.執行流程 FROM->WHERE,行的篩選-
MySQL中的多表查詢和子查詢
多表查詢 合併查詢 合併查詢 UNION 關鍵字 SELECT 欄位名 FROM 表1名 UNION SELECT 欄位名 FROM 表2名; 返
mysql 子查詢(六)之主查詢和子查詢的執行順序
那麼,什麼是相關子查詢呢?舉個例子,查詢員工表中薪水大於本部門平均薪水的員工。首先構建思路,說到底還是查詢員工,所以主查詢是查詢員工,然後在where後面增加子查詢,查詢薪水大於本部門平均薪水。開始寫sql,如下:問題來了,查詢某個部門的薪水,公司有很多個部門,所以引數不能寫
mysql (dml) 連結串列查詢 和 子查詢
連表查詢,分為內連線和外連線,外連線又分為左連線和右連線。 1.內連線:select 列名.... from 表1 inner join 表2 on 表1.外來鍵=表2.主鍵 【where /order by] 示例:select user.nam
mysql8學習手冊第三部分查詢和子查詢
Selecting data into a file and table To save the output into a file, you need the FILE privilege. FILE is a global privilege, which means you
OCP-1Z0-051 補充題庫 第5題 主查詢和子查詢的注意事項
Which three statements are true regarding sub queries? (Choose three.)A. Multiple columns or expressions can be compared between the main query and sub que
面試題:連線查詢和子查詢
今天碰到個有意思的面試題,主要是被第2小題難住了(和同事靈感碰撞才把問題解決),所以做個demo記錄一下。1、首先我們分別建立 tab_user_info 和 tab_dict_sex 資料表:CREATE TABLE `tab_user_info` ( `fld_id`
【MySQL必知必會】第十三章 分組數據
num mysql 統計 where子句 rom 過濾 group by 大於 映射 1、創建分組 輸入: SELECT vend_id , COUNT(*) AS num_prods FROM products GROUP BY vend_id; 輸出
《MySQL必知必會學習筆記》:子查詢
簡單的 後繼 復雜 pos clas tty append 靈活 values 子查詢 在開始了解子查詢之前,首先做下準備工作,建立3個表, 一個是customers表,當中包含:客戶名字、客戶ID、客戶Tel等。 一個是orders
mysql-必知必會-簡單查詢-3
基礎查詢 用萬用字元進行過濾 like操作符 萬用字元 用來匹配值得一部分的特殊字元 搜尋模式 由字表面值、萬用字元或者兩者組合構成的搜尋條件 萬用字元本身實際是SQL的where子句中有特殊含義的字元,SQL支援幾種萬用字元 未在搜尋子句中使用萬用字元,必
mysql必知必會-簡單查詢-2
簡單查詢 過濾資料 使用where子句 資料庫一般很少需要檢索表中所有的行,通常只會根據特定的需求提取表資料的子集,而檢索表中所需的特定資料則需要指定搜尋條件(也稱為過濾條件)。 在select語句中,資料根據where子句中指定的搜尋條件進行過濾,where子
mysql必知必會-簡單查詢-1
簡單查詢 檢索資料 檢索語句select的基本結構: select 欄位名 from 表名 檢索就是需要從指定的表中檢索出指定的欄位名,以此獲取到你想要的資訊 檢索單列資訊 select id from customers;
讀書筆記《MySQL必知必會》之第十七章組合查詢
文章目錄 什麼是組合查詢 建立組合查詢 使用union 使用union的規則 union all的使用 組合查詢的結果的排序 總結 什麼是組合查詢 把
MySQL必知必會:組合查詢(Union)
本篇文章主要介紹使用Union操作符將多個SELECT查詢組合成一個結果集。本文參考《Mysql必知必會》+工作實踐融合組合查詢定義在大多數開發中,使用一條SELECT查詢就會返回一個結果集。如果,我們想一次性查詢多條SQL語句,並將每一條SELECT查詢的結果合併成一個結果
MySQL必知必會-5去重,擷取和排序
去重 使用DISTINCT,DISTINCT告訴MySQL只返回不同(唯一)的列的行。 如果使用DISTINCT關鍵字,它必須放在列的前面。 不能部分使用DISTINCT,DISTINCT關鍵字應用於所有列而不僅是前置它的列,如果給出兩個列,除非指定的兩個列都不同,否則所
mysql必知必會--學習筆記(8)--子查詢 where巢狀查詢語句,作為計算欄位使用子查詢
1、子查詢的查詢過程一般是通過where中的in操作符來完成,in後面跟上一個子查詢,通常in之前的列名和子查詢查詢出來的列名是一致的。例如select name from book where id in (select book_id from store where s
【MySQL必知必會】第6章 過濾數據
sea 錯誤 arch order by ice where 大量數據 子句 否則 1、使用WHERE子句 數據庫一般包含大量數據,所以一般不會檢索所有行。只檢索所需數據需要指定搜索條件(search criteria),搜索條件也稱為過濾條件(filter condi
【MySQL比知必會】第八章 用通配符進行過濾
通配符 操作符 範圍 name 使用 技巧 商品 -- rom 1、LIKE操作符 之前使用的操作符都是針對已知的數據,而使用通配符可以對未知數據也進行搜索。 通配符(wildcard):用來匹配值得一部分的特殊字符。 搜索模式(search pattern):