Mysql 單表查詢where初識

来源:https://www.cnblogs.com/chenjieyouge/archive/2019/10/07/11630620.html
-Advertisement-
Play Games

Mysql 單表查詢where初識 準備數據 數據基本測試 where 條件過濾 比較運算符 , 邏輯運算符, 範圍判斷, 空判斷, 模糊查詢 邏輯運算符: and, or, not Null 判斷 is null; is not null 範圍查詢 in; between...and in 用於離 ...


Mysql 單表查詢where初識

準備數據

-- 創建測試庫
-- drop database if exists student_db;
create database student_db charset=utf8;
use student_db;

-- 創建測試表-學生表
create table students(
    id int unsigned primary key auto_increment not null,
    name varchar(20) default "",
    age tinyint unsigned default 0,
    height decimal(5,2),
    gender enum ("男", "女", "未填寫")  default "未填寫",
    class_id int unsigned default 1,
    is_delete bit default 0
);

-- 班級表
create table classes(
    id int unsigned auto_increment primary key not null,
    name varchar(20) not null
);

-- 插入測試數據, 都是偶像, 沒有其他意思哈.
insert into students values
(0,'愛因斯坦',18,180.00,1,1,0),
(0,'居裡夫人',18,180.00,2,2,1),
(0,'小王子',14,185.00,1,1,0),
(0,'李銀河',59,175.00,1,2,1),
(0,'黃蓉',38,160.00,2,1,0),
(0,'冰心',28,150.00,2,2,1),
(0,'王祖賢',18,172.00,2,1,1),
(0,'周傑倫',36,NULL,1,1,0),
(0,'王小波',57,181.00,1,2,0),
(0,'林徽因',25,166.00,2,2,0),
(0,'小星',33,162.00,3,3,1),
(0,'張愛玲',12,180.00,2,4,0),
(0,'馮唐',12,170.00,1,4,0),
(0,'胡適',34,176.00,2,5,0);

insert into classes values
(0, "科學"),
(0, "藝術");

-- 偶像查詢-測試
mysql> select * from students;
+----+----------+-----+--------+--------+----------+-----------+
| id | name     | age | height | gender | class_id | is_delete |
+----+----------+-----+--------+--------+----------+-----------+
|  1 | 愛因斯坦 |  18 | 180.00 | 男     |        1 | 0         |
|  2 | 居裡夫人 |  18 | 180.00 | 女     |        2 | 1         |
|  3 | 小王子   |  14 | 185.00 | 男     |        1 | 0         |
|  4 | 李銀河   |  59 | 175.00 | 男     |        2 | 1         |
|  5 | 黃蓉     |  38 | 160.00 | 女     |        1 | 0         |
|  6 | 冰心     |  28 | 150.00 | 女     |        2 | 1         |
|  7 | 王祖賢   |  18 | 172.00 | 女     |        1 | 1         |
|  8 | 周傑倫   |  36 | NULL   | 男     |        1 | 0         |
|  9 | 王小波   |  57 | 181.00 | 男     |        2 | 0         |
| 10 | 林徽因   |  25 | 166.00 | 女     |        2 | 0         |
| 11 | 小星     |  33 | 162.00 | 未填寫 |        3 | 1         |
| 12 | 張愛玲   |  12 | 180.00 | 女     |        4 | 0         |
| 13 | 馮唐     |  12 | 170.00 | 男     |        4 | 0         |
| 14 | 胡適     |  34 | 176.00 | 女     |        5 | 0         |
+----+----------+-----+--------+--------+----------+-----------+
14 rows in set (0.08 sec)

mysql> select * from classes;
+----+------+
| id | name |
+----+------+
|  1 | 科學 |
|  2 | 藝術 |
+----+------+
2 rows in set (0.07 sec)

數據基本測試

-- 查詢所有欄位
select * from students limt 2;
+----+----------+-----+--------+--------+----------+-----------+
| id | name     | age | height | gender | class_id | is_delete |
+----+----------+-----+--------+--------+----------+-----------+
|  1 | 愛因斯坦 |  18 | 180.00 | 男     |        1 | 0         |
|  2 | 居裡夫人 |  18 | 180.00 | 女     |        2 | 1         |
+----+----------+-----+--------+--------+----------+-----------+
-- 查詢指定欄位
select name, age from students limit 2;
+----------+-----+
| name     | age |
+----------+-----+
| 愛因斯坦 |  18 |
| 居裡夫人 |  18 |
+----------+-----+
-- as 給查詢集欄位取別名
select name as "姓名", age as "年齡" 
from students
where id in (1,2);

+----------+------+
| 姓名     | 年齡 |
+----------+------+
| 愛因斯坦 |   18 |
| 居裡夫人 |   18 |
+----------+------+

-- as 給查詢集表取別名
select s.name, s.age
from students as s
where s.gender = "女";

+----------+-----+
| name     | age |
+----------+-----+
| 居裡夫人 |  18 |
| 黃蓉     |  38 |
| 冰心     |  28 |
| 王祖賢   |  18 |
| 林徽因   |  25 |
| 張愛玲   |  12 |
| 胡適     |  34 |  -- 故意寫錯的
+----------+-----+

-- 過濾重覆行
select distinct gender
from students
+--------+
| gender |
+--------+
| 男     |
| 女     |
| 未填寫 |
+--------+

where 條件過濾

比較運算符, 邏輯運算符, 範圍判斷, 空判斷, 模糊查詢

-- 比較運算符: <, <=, =, >, >=, !=

-- 年齡小於20的信息
-- 年齡小於或等於20歲
select * 
from students 
where age <= 20; 

-- 年齡大於或等於20
select * 
from students
where age >= 20;

-- 年齡等於20
select * from students where age = 20;
-- 年齡不等於20
select * 
from students
where age !=20;

邏輯運算符: and, or, not

-- 年齡在20-30間的學生信息
select *
from students
where (age >= 18) and (age <= 30);

-- 30歲以下的女生
select *
from students
where (age < 30) and (gender = "女");

-- or
-- 身高超過180 或者 年齡在25以上的 男生 姓名和班級
select name, class_id as "班級"
from students
where ((height > 180) or (age > 25)) 
    and (gender = "男");

+--------+------+
| name   | 班級 |
+--------+------+
| 小王子 |    1 |
| 李銀河 |    2 |
| 周傑倫 |    1 |
| 王小波 |    2 |

-- not
-- 不在 20歲以上的女生姓名和身高
select name, height
from students
where not (age >= 20 and gender = "女");

Null 判斷 is null; is not null

-- 身高為空值的人的姓名年齡和身高
select name, age, height
from students
where height is null;

+--------+-----+--------+
| name   | age | height |
+--------+-----+--------+
| 周傑倫 |  36 | NULL   |
+--------+-----+--------+

-- 非空 is not null
select name, age, height
from students
where height is not null;

範圍查詢 in; between...and

in 用於離散型, beween...and 用於連續型, 閉區間

-- in, 離散型: 年齡是18, 22, 24, 27 歲的女生姓名和身高
select s.name, s.height
from students s
where (age in (18, 22, 24, 27)) 
    and (gender = "女");

-- 不在, 即改為, not in 即可
+----------+-----+
| name     | age |
+----------+-----+
| 居裡夫人 |  18 |
| 王祖賢   |  18 |
+----------+-----+

-- between..and.連續型: 年齡在18到35歲之間的女生姓名及身高
select s.name, s.height
from students as s
where (age between 18 and 35)
    and gender = "女";
+----------+--------+
| name     | height |
+----------+--------+
| 居裡夫人 | 180.00 |
| 冰心     | 150.00 |
| 王祖賢   | 172.00 |
| 林徽因   | 166.00 |

-- 年齡不在在18到27之間的的女生姓名
select s.name
from students s
where (not (age between 18 and 27))
    and gender = "女";
    

模糊查詢 like, regexp

就通配符和正則表達式兩種形式, 關於正則表達式, 以後再寫吧.

-- like
-- % 替換任意個; _ 替換1個, _ _ 替換2個;

-- 姓名中,以"王"開頭的所有名字及其年齡
select s.name, s.age
from students s
where name like "王%";
+--------+-----+
| name   | age |
+--------+-----+
| 王祖賢 |  18 |
| 王小波 |  57 |
+--------+-----+
2 rows in set (0.06 sec)

-- 姓名中, 帶有"王"的所有名字
select s.name
from students s
where s.name like "%王%";
+--------+
| name   |
+--------+
| 小王子 |
| 王祖賢 |
| 王小波 |
+--------+

-- 姓名只有2個字的名字
select s.name
from  students as s
where s.name like "__";
+------+
| name |
+------+
| 黃蓉 |
| 冰心 |
| 小星 |
| 馮唐 |
| 胡適 |
+------+
5 rows in set (0.05 sec)

-- 姓名最至少有2個字的名字
select s.name
from students s
where s.name like "__%";

-- 靈活: 正則表達式
-- 名字的第二個字是 "王"
select s.name
from students as s
where s.name regexp ".王.*";

+--------+
| name   |
+--------+
| 小王子 |
+--------+
1 row in set (0.11 sec)

正則表達式還有更加豐富而靈活的用法, 後面有空整吧, 後面再弄一波select的排序呀, group by ..聚合這些常用.

小結

  • 熟悉庫表操作及維護更新數據這些基本操作是必備的
  • 查詢欄位: select 欄位1, 欄位2 .. from 表名
  • where 常用過濾, 常用在**比較運算符, 邏輯運算符, NULL判斷, 模糊查詢, 範圍查詢
  • 比較運算符
    • <, <=, =, >, >=, <> , !=
  • 邏輯運算符
    • and
    • or
    • not
    • 優先順序是 ( ) < not < 比較運算符 < and < or
  • Null判斷
    • is null
    • is not null
  • 範圍查詢
    • in 表示離散型
    • between .. and ... ; not (欄位 between...and....)
  • 模糊查詢 like
    • % 通配符
    • _, __,
    • %__%
    • regexp 正則非常強大和靈活,而且各語言是通用的, 必須掌握

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

-Advertisement-
Play Games
更多相關文章
  • 原理:兩台web伺服器,通過心跳線進行通信,當主節點出現服務異常,備用節點通過探測判斷主節點是否存活,若是不存活,就把服務接管過來。 Web1和Web2中間有一根心跳線,檢查對方的存活狀態。流動IP:也叫vip是對外提供服務的ip,正常情況下是配置在Web1上的,當Web1宕機後,Web2會自動配置 ...
  • Linux 三劍客是(grep,sed,awk)三者的簡稱,熟練使用這三個工具可以提升運維效率。Linux 三劍客以正則表達式作為基礎,而在Linux系統中,支持兩種正則表達式,分別為“標準正則表達式”和“擴展正則表達式”。在掌握好正則表達式後,將具體講解三劍客的用法。 一、正則表達式 可以看到標準 ...
  • 大家好,我是痞子衡,是正經搞技術的痞子。今天痞子衡給大家介紹的是i.MX RT學習資源。 ...
  • 前面已經分析了linux記憶體管理演算法(伙伴管理演算法)的準備工作。 具體的演算法初始化則回到start_kernel()函數接著往下走,下一個函數是mm_init(): 乍看僅僅是幾個函數的調用,實際上這裡的事情遠遠沒這麼簡單。其中page_cgroup_init_flatmem()與cgroup相關, ...
  • 前面分析了memblock演算法、內核頁表的建立、記憶體管理框架的構建,這些都是x86處理的setup_arch()函數裡面初始化的,因地制宜,具有明顯處理器的特征。而start_kernel()接下來的初始化則是linux通用的記憶體管理演算法框架了。 build_all_zonelists()用來初始化 ...
  • 存儲類 存儲類(storage class)是kubernetes資源類型,它是由管理員為管理PV之便而按需創建的類別 存儲類好處是支持 PV 的動態創建,系統按PVC的需求標準動態創建適配的PV會為存儲管理帶來極大的靈活性。 PV的動態供給,其重點是在存儲類的定義,其分類大概是對存儲的性能進行分類 ...
  • 關係型資料庫-關係操作集合 1、 基本的關係操作 關係模型中常用的關係操作包括查詢(Query)操作和插入(Insert)、刪除 (Delete)、修改(Update)操作兩大部分。 查詢操作分為:選擇、投影、連接、除、並、差、交、笛卡爾積等; 五種基本操作:選擇、投影、並、差、笛卡爾積; 關係操作 ...
  • 本篇博文通過對ES中不同類型的欄位的建模方案進行說明, 並結合實際案例, 演示了index、stored、dynamic等參數的使用, 並歸納了ES處理關聯關係、避免太多的欄位、避免正則查詢、避免空值引起聚合結果失真等最佳實踐. 如有疑問, 留言區見
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...