MySQL學習——查詢表裡的數據

来源:https://www.cnblogs.com/shamao/archive/2019/09/26/11594170.html
-Advertisement-
Play Games

MySQL學習——查詢表裡的數據 摘要:本文主要學習了使用DQL語句查詢表裡數據的方法。 數據查詢 語法 說明 查詢全部和指定列 查詢所有成績,通配符“*”查詢所有欄位: 查詢姓名、課程、成績: 去重查詢 查詢所有課程名稱: 使用別名查詢 查詢姓名、課程、成績並顯示表頭為中文,使用別名時,as可省略 ...


MySQL學習——查詢表裡的數據

摘要:本文主要學習了使用DQL語句查詢表裡數據的方法。

數據查詢

語法

1 select [distinct] 列1 [as '別名1'], ..., 列n [as '別名n'] from 表名
2 [where 表達式]
3 [group by 表達式]
4 [having 表達式]
5 [order by 表達式]
6 [limit 起始編號, 查詢條數]

說明

1 列1, ..., 列n:表示查詢的欄位,查詢多個欄位用“,”分隔,使用“*”號表示查詢全部欄位,使用“distinct”關鍵字去重,使用“as”設置別名。
2 表名:表示查詢數據的來源,可以是單個或多個,多個表名用,分隔。
3 where 表達式:可選,限定查詢滿足的條件。
4 group by 表達式:可選,按照指定的欄位分組。
5 having 表達式:可選,限定查詢滿足的條件,用於使用了聚合函數限定條件。
6 order by 表達式:可選,指明排序的方式,升序(asc)和降序(desc)。
7 limit 起始編號, 查詢條數:可選,設置每次顯示查詢出來的數據條數。

查詢全部和指定列

查詢所有成績,通配符“*”查詢所有欄位:

 1 mysql> select * from score;
 2 +----+---------+-----------+-------+
 3 | id | student | course    | grade |
 4 +----+---------+-----------+-------+
 5 |  1 | 張三    | 電腦    |    98 |
 6 |  2 | 張三    | 英語      |    53 |
 7 |  3 | 李四    | 電腦    |    48 |
 8 |  4 | 李四    | 中文      |    38 |
 9 |  5 | 王五    | 中文      |    95 |
10 |  6 | 趙六    | 電腦    |    70 |
11 |  7 | 趙六    | 英語      |    92 |
12 |  8 | 趙六    | 中文      |    73 |
13 |  9 | 孫七    | 英語      |    94 |
14 | 10 | 周八    | 電腦    |    90 |
15 | 11 | 周八    | 英語      |    85 |
16 | 12 | 吳九    | 電腦    |    90 |
17 | 13 | 吳九    | 中文      |    55 |
18 +----+---------+-----------+-------+
19 13 rows in set (0.00 sec)
20 
21 mysql> 

查詢姓名、課程、成績:

 1 mysql> select student, course, grade from score;
 2 +---------+-----------+-------+
 3 | student | course    | grade |
 4 +---------+-----------+-------+
 5 | 張三    | 英語      |    53 |
 6 | 李四    | 電腦    |    48 |
 7 | 李四    | 中文      |    38 |
 8 | 王五    | 中文      |    95 |
 9 | 趙六    | 電腦    |    70 |
10 | 趙六    | 英語      |    92 |
11 | 趙六    | 中文      |    73 |
12 | 孫七    | 英語      |    94 |
13 | 周八    | 電腦    |    90 |
14 | 周八    | 英語      |    85 |
15 | 吳九    | 電腦    |    90 |
16 | 吳九    | 中文      |    55 |
17 +---------+-----------+-------+
18 12 rows in set (0.00 sec)
19 
20 mysql> 

去重查詢

查詢所有課程名稱:

 1 mysql> select distinct course from score;
 2 +-----------+
 3 | course    |
 4 +-----------+
 5 | 英語      |
 6 | 電腦    |
 7 | 中文      |
 8 +-----------+
 9 3 rows in set (0.00 sec)
10 
11 mysql> 

使用別名查詢

查詢姓名、課程、成績並顯示表頭為中文,使用別名時,as可省略:

 1 mysql> select student '姓名', course '課程', grade '成績' from score;
 2 +--------+-----------+--------+
 3 | 姓名   | 課程      | 成績   |
 4 +--------+-----------+--------+
 5 | 張三   | 英語      |     53 |
 6 | 李四   | 電腦    |     48 |
 7 | 李四   | 中文      |     38 |
 8 | 王五   | 中文      |     95 |
 9 | 趙六   | 電腦    |     70 |
10 | 趙六   | 英語      |     92 |
11 | 趙六   | 中文      |     73 |
12 | 孫七   | 英語      |     94 |
13 | 周八   | 電腦    |     90 |
14 | 周八   | 英語      |     85 |
15 | 吳九   | 電腦    |     90 |
16 | 吳九   | 中文      |     55 |
17 +--------+-----------+--------+
18 12 rows in set (0.00 sec)
19 
20 mysql> 

限制查詢條數

查詢五條成績數據:

 1 mysql> select * from score limit 5;
 2 +----+---------+-----------+-------+
 3 | id | student | course    | grade |
 4 +----+---------+-----------+-------+
 5 |  2 | 張三    | 英語      |    53 |
 6 |  3 | 李四    | 電腦    |    48 |
 7 |  4 | 李四    | 中文      |    38 |
 8 |  5 | 王五    | 中文      |    95 |
 9 |  6 | 趙六    | 電腦    |    70 |
10 +----+---------+-----------+-------+
11 5 rows in set (0.00 sec)
12 
13 mysql> 

對查詢結果進行排序

查詢中文課程的成績並從高到低排序:

 1 mysql> select * from score where course = '中文' order by grade desc;
 2 +----+---------+--------+-------+
 3 | id | student | course | grade |
 4 +----+---------+--------+-------+
 5 |  5 | 王五    | 中文   |    95 |
 6 |  8 | 趙六    | 中文   |    73 |
 7 | 13 | 吳九    | 中文   |    55 |
 8 |  4 | 李四    | 中文   |    38 |
 9 +----+---------+--------+-------+
10 4 rows in set (0.00 sec)
11 
12 mysql> 

對查詢結果進行分組

將成績按課程分組並查詢每個課程的平均分:

 1 mysql> select course, avg(grade) from score group by course;
 2 +-----------+------------+
 3 | course    | avg(grade) |
 4 +-----------+------------+
 5 | 電腦    |    74.5000 |
 6 | 英語      |    81.0000 |
 7 | 中文      |    65.2500 |
 8 +-----------+------------+
 9 3 rows in set (0.00 sec)
10 
11 mysql> 

將成績按課程分組並查詢每個課程的平均分,只顯示平均分大於70的結果:

 1 mysql> select course, avg(grade) from score group by course having avg(grade) > 70;
 2 +-----------+------------+
 3 | course    | avg(grade) |
 4 +-----------+------------+
 5 | 電腦    |    74.5000 |
 6 | 英語      |    81.0000 |
 7 +-----------+------------+
 8 2 rows in set (0.01 sec)
 9 
10 mysql> 

使用條件查詢

查詢電腦的成績:

 1 mysql> select * from score where course = '電腦';
 2 +----+---------+-----------+-------+
 3 | id | student | course    | grade |
 4 +----+---------+-----------+-------+
 5 |  1 | 張三    | 電腦    |    98 |
 6 |  3 | 李四    | 電腦    |    48 |
 7 |  6 | 趙六    | 電腦    |    70 |
 8 | 10 | 周八    | 電腦    |    90 |
 9 | 12 | 吳九    | 電腦    |    90 |
10 +----+---------+-----------+-------+
11 5 rows in set (0.00 sec)
12 
13 mysql> 

內連接查詢

內連接查詢返回的是同時滿足兩個結果集的記錄。

使用inner join查詢所有學生的電腦課程的成績,inner可省略:

 1 mysql> select stu.*, sco.course, sco.grade
 2     -> from student stu
 3     -> join score sco on stu.name = sco.student and sco.course = '電腦';
 4 +-----+--------+------+-------+------------+--------------------+-----------+-------+
 5 | id  | name   | sex  | birth | department | address            | course    | grade |
 6 +-----+--------+------+-------+------------+--------------------+-----------+-------+
 7 | 904 | 李四   ||  1990 | 英語系     | 遼寧省阜新市       | 電腦    |    48 |
 8 | 908 | 周八   ||  1986 | 中文系     | 北京市昌平區       | 電腦    |    90 |
 9 | 909 | 吳九   ||  1996 | 中文系     | 湖北省武漢市       | 電腦    |    90 |
10 +-----+--------+------+-------+------------+--------------------+-----------+-------+
11 3 rows in set (0.00 sec)
12 
13 mysql> 

結果僅顯示有電腦成績的記錄,沒有成績的不顯示。

外連接查詢

外連接分為左外連接和右外連接,分別以左表和右表作為主表匹配,保留主表中存在但另一張表中不存在的的數據。

使用left join查詢所有學生的電腦課程的成績:

 1 mysql> select stu.*, sco.course, sco.grade
 2     -> from student stu
 3     -> left join score sco on stu.name = sco.student and sco.course = '電腦';
 4 +-----+--------+------+-------+--------------+--------------------+-----------+-------+
 5 | id  | name   | sex  | birth | department   | address            | course    | grade |
 6 +-----+--------+------+-------+--------------+--------------------+-----------+-------+
 7 | 904 | 李四   ||  1990 | 英語系       | 遼寧省阜新市       | 電腦    |    48 |
 8 | 908 | 周八   ||  1986 | 中文系       | 北京市昌平區       | 電腦    |    90 |
 9 | 909 | 吳九   ||  1996 | 中文系       | 湖北省武漢市       | 電腦    |    90 |
10 | 903 | 張三   ||  1990 | 中文系       | 湖南省永州市       | NULL      |  NULL |
11 | 905 | 王五   ||  1991 | 英語系       | 福建省廈門市       | NULL      |  NULL |
12 | 906 | 王六   ||  1988 | 電腦系     | 湖南省衡陽市       | NULL      |  NULL |
13 | 907 | 孫七   ||  1985 | 電腦系     | 北京市海澱區       | NULL      |  NULL |
14 +-----+--------+------+-------+--------------+--------------------+-----------+-------+
15 7 rows in set (0.00 sec)
16 
17 mysql> 

結果也顯示了沒有電腦成績的記錄,沒有匹配到的數據使用Null表示。

子查詢

子查詢指一個查詢語句嵌套在另一個查詢語句內部的查詢,子查詢結果作為外層另一個查詢的過濾條件,查詢可以基於一個表或者多個表。

子查詢中常用的關鍵字有in和exists,也可以使用比較運算符。

in子查詢

in子查詢主要用於判斷指定欄位的值是否存在於子查詢的結果集中。

如果子查詢的記錄較少,主查詢的記錄較多時使用in,因為這時用到了主表上的索引。

查詢所有英語系的學生成績:

 1 mysql> select * from score where student in (select name from student where department = '英語系');
 2 +----+---------+-----------+-------+
 3 | id | student | course    | grade |
 4 +----+---------+-----------+-------+
 5 |  3 | 李四    | 電腦    |    48 |
 6 |  4 | 李四    | 中文      |    38 |
 7 |  5 | 王五    | 中文      |    95 |
 8 +----+---------+-----------+-------+
 9 3 rows in set (0.00 sec)
10 
11 mysql> 

exists子查詢

exists子查詢主要用於判斷子查詢的結果集是否為空。

如果子查詢的記錄較多,主查詢的記錄較少時使用exists,因為這時用到了子表上的索引。

查詢是否存在數學系的學生成績:

1 mysql> select * from score where exists (select id from student where department = '數學系');
2 Empty set (0.00 sec)
3 
4 mysql> 

查詢是否存在英語系的學生成績:

 1 mysql> select * from score sco where exists (select stu.id from student stu where stu.department = '英語系');
 2 +----+---------+-----------+-------+
 3 | id | student | course    | grade |
 4 +----+---------+-----------+-------+
 5 |  2 | 張三    | 英語      |    53 |
 6 |  3 | 李四    | 電腦    |    48 |
 7 |  4 | 李四    | 中文      |    38 |
 8 |  5 | 王五    | 中文      |    95 |
 9 |  6 | 趙六    | 電腦    |    70 |
10 |  7 | 趙六    | 英語      |    92 |
11 |  8 | 趙六    | 中文      |    73 |
12 |  9 | 孫七    | 英語      |    94 |
13 | 10 | 周八    | 電腦    |    90 |
14 | 11 | 周八    | 英語      |    85 |
15 | 12 | 吳九    | 電腦    |    90 |
16 | 13 | 吳九    | 中文      |    55 |
17 +----+---------+-----------+-------+
18 12 rows in set (0.00 sec)
19 
20 mysql> 

查詢所有英語系的學生成績:

 1 mysql> select * from score sco where exists (select stu.id from student stu where sco.student = stu.name and stu.department = '英語系');
 2 +----+---------+-----------+-------+
 3 | id | student | course    | grade |
 4 +----+---------+-----------+-------+
 5 |  3 | 李四    | 電腦    |    48 |
 6 |  4 | 李四    | 中文      |    38 |
 7 |  5 | 王五    | 中文      |    95 |
 8 +----+---------+-----------+-------+
 9 3 rows in set (0.00 sec)
10 
11 mysql> 

比較運算符子查詢

使用大於、小於、等於、不等於等其他比較運算符判斷子查詢是否滿足。

1 mysql> select * from score sco where sco.student = (select stu.name from student stu where stu.id = 903);
2 +----+---------+--------+-------+
3 | id | student | course | grade |


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 自己製作一個簡單的操作系統一[環境搭建] 環境搭建好了? 直接上手 自己製作一個簡單的操作系統二[CherryOS] 一. 軟硬體需求 1. 硬體 一臺電腦, 我使用的是win10(本來想用linux可是沒找到linux版的扇區讀寫工具) 2. 軟體 彙編編譯器:NASM 點擊下載 軟盤絕對扇區讀寫 ...
  • CV:Constant Voltage恆壓 SMMB charger:Switch ModeBattery Charger and Boost peripheral開關模式電池充電器和升壓外圍設備 OCV:Open circuitvoltage EOC:End OfCharge充電結束 UUC:Un ...
  • Rsync 簡介 rsync 是一款開源的、快速的、多功能的、可實現全量及增量的本地或遠程數據同步備份的優秀工具。Rsync軟體適用於unix/linux/windows等多種操作系統平臺。 傳統的 scp 和 cp 工具拷貝每次均為完整拷貝,而rsync除了可以完整拷貝外,還具備增量拷貝功能。因此 ...
  • Linux文件系統原理在所有的操作系統中文件都有文件名與數據,在Linux系統上文件系統分成兩個部分:用戶數據 (user data) 與元數據 (metadata)。用戶數據,即文件數據塊 (data block),數據塊是記錄文件真實內容的地方;而元數據則是文件的附加屬性,如文件大小、創建時間、 ...
  • 對於磁碟等各類存儲設備中所有的數據都以0和1的概念,但對於用戶來說,0和1是沒有任何意義的,這時候就需要一種類似於“翻譯”的機制存在於用戶和磁碟之間,Linux中採用的是文件系統+虛擬文件系統(Virtual File System,VFS)的解決方案 一、文件系統: 就是操作系統用於明確磁碟或分區 ...
  • [TOC] max_connections 允許最大連接數,預設100,最大16384。這個根據性能調節,如果3000連接就會導致mysql的資源不夠,那就給3000.因為再給多了,就會導致其它連接的資源被搶占。 建議: 根據需求來看,一般2核4G機器填寫1000,16核64G填寫5000。 測試運 ...
  • 物理設計:具體任務主要是確定資料庫在存儲設備上的存儲結構及存取方法, 因DBMS的不同還可能包括建立索引和聚集,以及物理塊大小、緩衝區個 數和大小、數據壓縮的選擇等。 ...
  • 一、String1.1 概述1.2 相關命令列表1.3 命令示例二、List2.1 概述:2.2 相關命令列表:2.3 命令示例:2.4 鏈表結構的小技巧:三、HashSet3.1 概述3.2 相關命令列表3.3 命令示例四、Set4.1 概述:4.2 相關命令列表:4.3 命令示例:4.4 應用範... ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...