python資料庫-MySQL單表查詢基本操作(50)

来源:https://www.cnblogs.com/Se7eN-HOU/archive/2019/07/10/11165262.html
-Advertisement-
Play Games

一、條件查詢 1、查詢的基本語法 from關鍵字後面寫表名,表示數據來源於是這張表 select後面寫表中的列名,如果是*表示在結果中顯示表中所有列 在select後面的列名部分,可以使用as為列起別名,這個別名出現在結果集中 如果要查詢多個列,之間使用逗號分隔 2、消除重覆行 在select後面列 ...


 

一、條件查詢

1、查詢的基本語法

select * from 表名;
  • from關鍵字後面寫表名,表示數據來源於是這張表
  • select後面寫表中的列名,如果是*表示在結果中顯示表中所有列
  • 在select後面的列名部分,可以使用as為列起別名,這個別名出現在結果集中
  • 如果要查詢多個列,之間使用逗號分隔

2、消除重覆行

  在select後面列前使用distinct可以消除重覆的行

elect distinct h_gender from hero;

 

3、使用where子句對錶中的數據篩選,結果為true的行會出現在結果集中  

select * from 表名 where 條件;

4、比較運算符

  • 等於=
  • 大於>
  • 大於等於>=
  • 小於<
  • 小於等於<=
  • 不等於!=或<>
4.1、查詢表中全部數據(這個表是我提前創建好的)
mysql> select *from hero;
+------+-----------+--------------+---------+----------+------------+----------+--------+
| h_id | h_name    | h_skill      | h_blood | h_attack | h_isdelete | h_gender | h_type |
+------+-----------+--------------+---------+----------+------------+----------+--------+
|    1 | 李白      | 青蓮劍歌     |    1000 |     1000 |            |        1 | 刺客   |
|    2 | 魯班      | 空中支援     |     950 |     1000 |            |        1 | 射手   |
|    3 | 王昭君    | 凜冬已至     |     950 |      950 |            |        0 | 法師   |
|    4 | 虞姬      | 樹神護佑     |     900 |      950 |            |        0 | 射手   |
|    5 | 甄姬      | 洛神降臨     |     900 |      900 |            |        0 | 法師   |
|    6 | 莊周      | 天人合一     |     850 |      900 |            |        1 | 輔助   |
|    7 | 韓信      | 國士無雙     |     850 |      850 |            |        1 | 刺客   |
|    8 | 孫尚香    | 窮極弩炮     |     800 |      850 |            |        0 | 射手   |
|    9 | 孫策      | 長帆破浪     |     800 |      800 |            |        1 | 戰士   |
|   10 | 公孫離    | 孤鶩斷霞     |     750 |      800 |            |        0 | 射手   |
+------+-----------+--------------+---------+----------+------------+----------+--------+
10 rows in set (0.00 sec)
4.2、查詢h_attack大於900的
mysql> select *from hero where h_attack>900;
+------+-----------+--------------+---------+----------+------------+----------+--------+
| h_id | h_name    | h_skill      | h_blood | h_attack | h_isdelete | h_gender | h_type |
+------+-----------+--------------+---------+----------+------------+----------+--------+
|    1 | 李白      | 青蓮劍歌     |    1000 |     1000 |            |        1 | 刺客   |
|    2 | 魯班      | 空中支援     |     950 |     1000 |            |        1 | 射手   |
|    3 | 王昭君    | 凜冬已至     |     950 |      950 |            |        0 | 法師   |
|    4 | 虞姬      | 樹神護佑     |     900 |      950 |            |        0 | 射手   |
+------+-----------+--------------+---------+----------+------------+----------+--------+

5、邏輯運算符

  • and
  • or
  • not

5.1、查詢h_attack大於950並且h_blood大於900的hero

mysql> select *from hero where h_attack>950 and h_blood>900;
+------+--------+--------------+---------+----------+------------+----------+--------+
| h_id | h_name | h_skill      | h_blood | h_attack | h_isdelete | h_gender | h_type |
+------+--------+--------------+---------+----------+------------+----------+--------+
|    1 | 李白   | 青蓮劍歌     |    1000 |     1000 |            |        1 | 刺客   |
|    2 | 魯班   | 空中支援     |     950 |     1000 |            |        1 | 射手   |
+------+--------+--------------+---------+----------+------------+----------+--------+

5.2、查詢h_attack大於950或者h_blood大於900的hero

mysql> select *from hero where h_attack>950 or h_blood>900;
+------+-----------+--------------+---------+----------+------------+----------+--------+
| h_id | h_name    | h_skill      | h_blood | h_attack | h_isdelete | h_gender | h_type |
+------+-----------+--------------+---------+----------+------------+----------+--------+
|    1 | 李白      | 青蓮劍歌       |    1000 |     1000 |            |        1 | 刺客   |
|    2 | 魯班      | 空中支援       |     950 |     1000 |            |        1 | 射手   |
|    3 | 王昭君    | 凜冬已至       |     950 |      950 |            |        0 | 法師   |
+------+-----------+--------------+---------+----------+------------+----------+--------+

二、模糊查詢

  • like
  • %表示任意多個任意字元
  • _表示一個任意字元

1、查詢名字里姓‘孫’的

mysql> select *from hero where h_name like '孫%';
+------+-----------+--------------+---------+----------+------------+----------+--------+
| h_id | h_name    | h_skill      | h_blood | h_attack | h_isdelete | h_gender | h_type |
+------+-----------+--------------+---------+----------+------------+----------+--------+
|    8 | 孫尚香    | 窮極弩炮       |     800 |      850 |            |        0 | 射手   |
|    9 | 孫策      | 長帆破浪       |     800 |      800 |            |        1 | 戰士   |
+------+-----------+--------------+---------+----------+------------+----------+--------+

2、查詢名字裡面包含‘孫’的

mysql> select *from hero where h_name like '%孫%'
+------+-----------+--------------+---------+----------+------------+----------+--------+
| h_id | h_name    | h_skill      | h_blood | h_attack | h_isdelete | h_gender | h_type |
+------+-----------+--------------+---------+----------+------------+----------+--------+
|    8 | 孫尚香    | 窮極弩炮     |     800 |      850 |            |        0 | 射手   |
|    9 | 孫策      | 長帆破浪     |     800 |      800 |            |        1 | 戰士   |
|   10 | 公孫離    | 孤鶩斷霞     |     750 |      800 |            |        0 | 射手   |
+------+-----------+--------------+---------+----------+------------+----------+--------+

3、查詢性孫的並且名只有一個字

mysql> select *from hero where h_name like '孫_';
+------+--------+--------------+---------+----------+------------+----------+--------+
| h_id | h_name | h_skill      | h_blood | h_attack | h_isdelete | h_gender | h_type |
+------+--------+--------------+---------+----------+------------+----------+--------+
|    9 | 孫策   | 長帆破浪     |     800 |      800 |            |        1 | 戰士   |
+------+--------+--------------+---------+----------+------------+----------+--------+

 

三、範圍查詢

  • in表示在一個非連續的範圍內

例如:查找h_id為1、3、5的英雄

mysql> select *from hero where h_id in(1,3,5);
+------+-----------+--------------+---------+----------+------------+----------+--------+
| h_id | h_name    | h_skill      | h_blood | h_attack | h_isdelete | h_gender | h_type |
+------+-----------+--------------+---------+----------+------------+----------+--------+
|    1 | 李白      | 青蓮劍歌       |    1000 |     1000 |            |        1 | 刺客   |
|    3 | 王昭君    | 凜冬已至       |     950 |      950 |            |        0 | 法師   |
|    5 | 甄姬      | 洛神降臨       |     900 |      900 |            |        0 | 法師   |
+------+-----------+--------------+---------+----------+------------+----------+--------+
  • between ... and ...表示在一個連續的範圍內

例如:查詢血量在900-950之間的應用

mysql> select *from hero where h_blood between 900 and 950;
+------+-----------+--------------+---------+----------+------------+----------+--------+
| h_id | h_name    | h_skill      | h_blood | h_attack | h_isdelete | h_gender | h_type |
+------+-----------+--------------+---------+----------+------------+----------+--------+
|    2 | 魯班      | 空中支援       |     950 |     1000 |            |        1 | 射手   |
|    3 | 王昭君    | 凜冬已至       |     950 |      950 |            |        0 | 法師   |
|    4 | 虞姬      | 樹神護佑       |     900 |      950 |            |        0 | 射手   |
|    5 | 甄姬      | 洛神降臨       |     900 |      900 |            |        0 | 法師   |
+------+-----------+--------------+---------+----------+------------+----------+--------+

 

四、空查詢

  • 註意:null與''是不同的
  • 判空 is null

查詢isdelect沒有填寫的hero

select *from hero where h_isdelete is null;

 

五、聚合查詢

為了快速得到統計數據,提供了5個聚合函數

1、count(*)表示計算總行數,括弧中寫星與列名,結果是相同的

查詢hero的總數

mysql> select count(*) from hero;
+----------+
| count(*) |
+----------+
|       10 |
+----------+

2、max(列)表示求此列的最大值

查詢攻擊力最大的值

mysql> select max(h_attack) from hero;
+---------------+
| max(h_attack) |
+---------------+
|          1000 |
+---------------+

3、min(列)表示求此列的最小值

查詢攻擊力最小的值

mysql> select min(h_attack) from hero;
+---------------+
| min(h_attack) |
+---------------+
|           800 |
+---------------+

4、sum(列)表示求此列的和

查詢所有hero的攻擊力之和

mysql> select sum(h_attack) from hero;
+---------------+
| sum(h_attack) |
+---------------+
|          9000 |
+---------------+

5、avg(列)表示求此列的平均值

查詢所有hero的攻擊力平均值

mysql> select avg(h_attack) from hero;
+---------------+
| avg(h_attack) |
+---------------+
|      900.0000 |
+---------------+ 

 

六、分組查找

  • 按照欄位分組,表示此欄位相同的數據會被放到一個組中
  • 分組後,只能查詢出相同的數據列,對於有差異的數據列無法出現在結果集中
  • 可以對分組後的數據進行統計,做聚合運算
select 列1,列2,聚合... from 表名 group by 列1,列2,列3...

 1、查詢男hero和女hero的總數

mysql> select h_gender as 性別,count(*) from hero group by h_gender;
+--------+----------+
| 性別   | count(*) |
+--------+----------+
|      0 |        5 |
|      1 |        5 |
+--------+----------+

2、查詢按照英雄類型、性別分組統計

mysql> select h_type as 英雄類型,h_gender as 性別,count(*) as 個數 from hero group by h_type,h_gender;
+--------------+--------+--------+
| 英雄類型      | 性別    | 個數   |
+--------------+--------+--------+
| 刺客         |      1 |      2 |
| 射手         |      0 |      3 |
| 射手         |      1 |      1 |
| 戰士         |      1 |      1 |
| 法師         |      0 |      2 |
| 輔助         |      1 |      1 |
+--------------+--------+--------+

3、分組後的數據篩選

  having後面的條件運算符與where的相同

 例如:查詢男英雄的個數

方法一:

mysql> select count(*) from hero where h_gender = 1;
+----------+
| count(*) |
+----------+
|        5 |
+----------+

方法二:

mysql> select h_gender as 性別,count(*) from hero group by h_gender having h_gender=1;
+--------+----------+
| 性別    | count(*) |
+--------+----------+
|      1 |        5 |
+--------+----------+

對比where與having

  • where是對from後面指定的表進行數據篩選,屬於對原始數據的篩選
  • having是對group by的結果進行

 

七、排序

  為了方便查看數據,可以對數據進行排序

select * from 表名
order by 列1 asc|desc,列2 asc|desc,...
  • 將行數據按照列1進行排序,如果某些行列1的值相同時,則按照列2排序,以此類推
  • 預設按照列值從小到大排列
  • asc從小到大排列,即升序
  • desc從大到小排序,即降序
mysql> select *from hero where h_gender=1 order by h_attack asc;
+------+--------+--------------+---------+----------+------------+----------+--------+
| h_id | h_name | h_skill      | h_blood | h_attack | h_isdelete | h_gender | h_type |
+------+--------+--------------+---------+----------+------------+----------+--------+
|    9 | 孫策   | 長帆破浪       |     800 |      800 |            |        1 | 戰士   |
|    7 | 韓信   | 國士無雙       |     850 |      850 |            |        1 | 刺客   |
|    6 | 莊周   | 天人合一       |     850 |      900 |            |        1 | 輔助   |
|    1 | 李白   | 青蓮劍歌       |    1000 |     1000 |            |        1 | 刺客   |
|    2 | 魯班   | 空中支援       |     950 |     1000 |            |        1 | 射手   |
+------+--------+--------------+---------+----------+------------+----------+--------+

 

八、分頁查找

  當數據量過大時,在一頁中查看數據是一件非常麻煩的事情,而且現在很多瀏覽器也都是分頁顯示數據,例如:

語法:

select * from 表名 limit start,count
  • 從start開始,獲取count條數據
  • start索引從0開始
mysql> select *from hero limit 0,5;
+------+-----------+--------------+---------+----------+------------+----------+--------+
| h_id | h_name    | h_skill      | h_blood | h_attack | h_isdelete | h_gender | h_type |
+------+-----------+--------------+---------+----------+------------+----------+--------+
|    1 | 李白      | 青蓮劍歌     |    1000 |     1000 |            |        1 | 刺客   |
|    2 | 魯班      | 空中支援     |     950 |     1000 |            |        1 | 射手   |
|    3 | 王昭君    | 凜冬已至     |     950 |      950 |            |        0 | 法師   |
|    4 | 虞姬      | 樹神護佑     |     900 |      950 |            |        0 | 射手   |
|    5 | 甄姬      | 洛神降臨     |     900 |      900 |            |        0 | 法師   |
+------+-----------+--------------+---------+----------+------------+----------+--------+
5 rows in set (0.00 sec)

mysql> select *from hero limit 5,5;
+------+-----------+--------------+---------+----------+------------+----------+--------+
| h_id | h_name    | h_skill      | h_blood | h_attack | h_isdelete | h_gender | h_type |
+------+-----------+--------------+---------+----------+------------+----------+--------+
|    6 | 莊周      | 天人合一     |     850 |      900 |            |        1 | 輔助   |
|    7 | 韓信      | 國士無雙     |     850 |      850 |            |        1 | 刺客   |
|    8 | 孫尚香    | 窮極弩炮     |     800 |      850 |            |        0 | 射手   |
|    9 | 孫策      | 長帆破浪     |     800 |      800 |            |        1 | 戰士   |
|   10 | 公孫離    | 孤鶩斷霞     |     750 |      800 |            |        0 | 射手   |
+------+-----------+--------------+---------+----------+------------+----------+--------+
5 rows in set (0.00 sec)

例子二:

  • 已知:每頁顯示m條數據,當前顯示第n頁,求第n頁的數據
select * from hero limit (n-1)*m,m

 


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

-Advertisement-
Play Games
更多相關文章
  • scp命令用於Linux 之間複製文件和目錄。如果想在windows 環境中使用需要安裝 linux 命令環境,比如 cmder scp是 secure copy的縮寫, scp是linux系統下基於ssh登陸進行安全的遠程文件拷貝命令。 語法: 簡易寫法 參數說明 如果遠程伺服器防火牆有為scp命 ...
  • 一、NVIDIA顯卡驅動 打開終端,輸入: 在新打開的文件夾中,進入以下路徑(不要用命令行): 這時會有幾個文件夾,對每個文件夾都進行以下操作(不要用命令行): 打開終端,輸入: 把下載的顯卡驅動改為簡單的名字,比如2080.run,放到home目錄下 按 Ctrl + Alt + F1,登錄 輸入 ...
  • Linux LVM邏輯捲配置過程詳解(創建、增加、減少、刪除、卸載) 許多Linux使用者安裝操作系統時都會遇到這樣的困境:如何精確評估和分配各個硬碟分區的容量,如果當初評估不准確,一旦系統分區不夠用時可能不得不備份、刪除相關數據,甚至被迫重新規劃分區並重裝操作系統,以滿足應用系統的需要。 LVM是 ...
  • yum( Yellow dog Updater, Modified)是一個在Fedora和RedHat以及SUSE中的Shell前端軟體包管理器。 基於RPM包管理,能夠從指定的伺服器自動下載RPM包並且安裝,可以自動處理依賴性關係,並且一次安裝所有依賴的軟體包,無須繁瑣地一次次下載、安裝。 yum ...
  • Linux目錄和文件——操作目錄和文件 摘要:本文主要學習了Linux系統中關於目錄和文件的操作。 cd命令 cd命令用來切換工作目錄,是Change Directory的縮寫。 基本語法 特殊符號 使用舉例 pwd命令 pwd命令的功能是顯示用戶當前所處的工作目錄,是Print Working D ...
  • CentOS7 SSH 密碼正確,但仍提示“Permission denied” ...
  • 本篇內容比較簡單,但卻很繁瑣,篇幅也很長,畢竟是囊括了整個操作系統的生命周期。這篇文章的目的是作為後續設計多任務開發的鋪墊,後續會單獨再抽出一篇分析任務的相關知識。另外本篇文章以單核MCU為背景,並且以最新的3.1.xLTS版本源碼進行分析。主要內容目錄如下: 基於bsp/stm32/stm32f1 ...
  • 前言 開心一刻 兒子有道題不會做,喊我過去教他。我推了推一旁的老公:我頭疼,你去吧。老公不動,我:零花錢漲一千。話音剛落,老公就屁顛屁顛跑去兒子房間。進去不到幾分鐘,一聲怒吼伴隨著兒子的哭聲傳來的瞬間,老公從兒子房間出來,邊走邊說:“朽木不可雕也。”兒子從房間探出半個身子,一臉委屈:“爸爸也不會做, ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...