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
  • 前言 本文介紹一款使用 C# 與 WPF 開發的音頻播放器,其界面簡潔大方,操作體驗流暢。該播放器支持多種音頻格式(如 MP4、WMA、OGG、FLAC 等),並具備標記、實時歌詞顯示等功能。 另外,還支持換膚及多語言(中英文)切換。核心音頻處理採用 FFmpeg 組件,獲得了廣泛認可,目前 Git ...
  • OAuth2.0授權驗證-gitee授權碼模式 本文主要介紹如何筆者自己是如何使用gitee提供的OAuth2.0協議完成授權驗證並登錄到自己的系統,完整模式如圖 1、創建應用 打開gitee個人中心->第三方應用->創建應用 創建應用後在我的應用界面,查看已創建應用的Client ID和Clien ...
  • 解決了這個問題:《winForm下,fastReport.net 從.net framework 升級到.net5遇到的錯誤“Operation is not supported on this platform.”》 本文內容轉載自:https://www.fcnsoft.com/Home/Sho ...
  • 國內文章 WPF 從裸 Win 32 的 WM_Pointer 消息獲取觸摸點繪製筆跡 https://www.cnblogs.com/lindexi/p/18390983 本文將告訴大家如何在 WPF 裡面,接收裸 Win 32 的 WM_Pointer 消息,從消息裡面獲取觸摸點信息,使用觸摸點 ...
  • 前言 給大家推薦一個專為新零售快消行業打造了一套高效的進銷存管理系統。 系統不僅具備強大的庫存管理功能,還集成了高性能的輕量級 POS 解決方案,確保頁面載入速度極快,提供良好的用戶體驗。 項目介紹 Dorisoy.POS 是一款基於 .NET 7 和 Angular 4 開發的新零售快消進銷存管理 ...
  • ABP CLI常用的代碼分享 一、確保環境配置正確 安裝.NET CLI: ABP CLI是基於.NET Core或.NET 5/6/7等更高版本構建的,因此首先需要在你的開發環境中安裝.NET CLI。這可以通過訪問Microsoft官網下載並安裝相應版本的.NET SDK來實現。 安裝ABP ...
  • 問題 問題是這樣的:第三方的webapi,需要先調用登陸介面獲取Cookie,訪問其它介面時攜帶Cookie信息。 但使用HttpClient類調用登陸介面,返回的Headers中沒有找到Cookie信息。 分析 首先,使用Postman測試該登陸介面,正常返回Cookie信息,說明是HttpCli ...
  • 國內文章 關於.NET在中國為什麼工資低的分析 https://www.cnblogs.com/thinkingmore/p/18406244 .NET在中國開發者的薪資偏低,主要因市場需求、技術棧選擇和企業文化等因素所致。歷史上,.NET曾因微軟的閉源策略發展受限,儘管後來推出了跨平臺的.NET ...
  • 在WPF開發應用中,動畫不僅可以引起用戶的註意與興趣,而且還使軟體更加便於使用。前面幾篇文章講解了畫筆(Brush),形狀(Shape),幾何圖形(Geometry),變換(Transform)等相關內容,今天繼續講解動畫相關內容和知識點,僅供學習分享使用,如有不足之處,還請指正。 ...
  • 什麼是委托? 委托可以說是把一個方法代入另一個方法執行,相當於指向函數的指針;事件就相當於保存委托的數組; 1.實例化委托的方式: 方式1:通過new創建實例: public delegate void ShowDelegate(); 或者 public delegate string ShowDe ...