最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MySQL WHERE子句實踐指南(精準過濾數(shù)據(jù)的藝術)

 更新時間:2026年02月02日 09:32:36   作者:怣50  
文章詳細介紹了SQL查詢中的WHERE子句及其多種用法,包括基礎語法、運算符優(yōu)先級、多值匹配、范圍查詢、模糊查詢、空值查詢、多條件查詢以及實戰(zhàn)案例,全面覆蓋了WHERE子句的實用性,感興趣的朋友跟隨小編一起看看吧

一、WHERE子句語法格式詳解

1.1 基礎語法結(jié)構(gòu)

WHERE子句是SELECT語句中的篩選條件部分,用于從表中提取滿足特定條件的記錄。

sql
SELECT 列名1, 列名2, ...
FROM 表名
WHERE 條件表達式;

1.2 完整的SELECT語句結(jié)構(gòu)

sql
SELECT 
    [ALL | DISTINCT | DISTINCTROW] 
    select_expr [, select_expr ...]
FROM 
    table_references
[WHERE where_condition]        -- WHERE子句位置
[GROUP BY {col_name | expr | position}]
[HAVING where_condition]
[ORDER BY {col_name | expr | position} [ASC | DESC]]
[LIMIT {[offset,] row_count | row_count OFFSET offset}];

1.3 運算符優(yōu)先級表

優(yōu)先級	運算符	描述
1	=, <>, !=, <, <=, >, >=	比較運算符
2	BETWEEN, LIKE, IN, IS NULL	特殊比較
3	NOT	邏輯非
4	AND	邏輯與
5	OR	邏輯或

二、帶IN關鍵字的查詢:多值匹配

2.1 基本語法格式

sql
SELECT 列名 FROM 表名 
WHERE 列名 IN (值1, 值2, 值3, ...);

2.2 實際應用示例

sql
-- 示例表:員工表(employees)
CREATE TABLE employees (
    id INT PRIMARY KEY,
    name VARCHAR(50),
    department VARCHAR(30),
    salary DECIMAL(10,2),
    hire_date DATE
);

-- 插入示例數(shù)據(jù)
INSERT INTO employees VALUES
(1, '張三', '技術部', 8500, '2022-03-15'),
(2, '李四', '銷售部', 7500, '2021-08-22'),
(3, '王五', '技術部', 9200, '2020-11-05'),
(4, '趙六', '市場部', 6800, '2023-01-30'),
(5, '孫七', '人事部', 6500, '2022-06-18'),
(6, '周八', '技術部', 8800, '2021-09-10');
示例1:查詢指定部門的員工
sql
-- 查詢屬于技術部或銷售部的員工
SELECT 
    id AS '員工編號',
    name AS '姓名',
    department AS '部門',
    salary AS '薪資'
FROM employees
WHERE department IN ('技術部', '銷售部');
查詢結(jié)果:

text
員工編號  姓名   部門    薪資
1        張三   技術部  8500.00
2        李四   銷售部  7500.00
3        王五   技術部  9200.00
6        周八   技術部  8800.00
示例2:IN子查詢的運用
sql
-- 查詢薪資高于平均薪資的員工
SELECT 
    name AS '姓名',
    salary AS '薪資'
FROM employees
WHERE salary IN (
    SELECT salary 
    FROM employees 
    WHERE salary > (SELECT AVG(salary) FROM employees)
);

2.3 NOT IN的用法

sql
-- 查詢不在某些部門的員工
SELECT 
    name AS '姓名',
    department AS '部門'
FROM employees
WHERE department NOT IN ('人事部', '市場部');

三、帶BETWEEN AND的范圍查詢

3.1 基礎語法格式

sql
SELECT 列名 FROM 表名 
WHERE 列名 BETWEEN 值1 AND 值2;
-- 等價于:WHERE 列名 >= 值1 AND 列名 <= 值2

3.2 實際應用示例

sql
-- 示例表:學生成績表(scores)
CREATE TABLE scores (
    student_id INT,
    student_name VARCHAR(50),
    subject VARCHAR(20),
    score INT,
    exam_date DATE
);

INSERT INTO scores VALUES
(101, '張三', '數(shù)學', 85, '2023-06-15'),
(102, '李四', '數(shù)學', 92, '2023-06-15'),
(103, '王五', '數(shù)學', 78, '2023-06-15'),
(104, '趙六', '數(shù)學', 65, '2023-06-15'),
(105, '孫七', '數(shù)學', 88, '2023-06-15');
示例1:查詢分數(shù)在某個區(qū)間的學生
sql
-- 查詢數(shù)學成績在80-90分之間的學生
SELECT 
    student_id AS '學號',
    student_name AS '姓名',
    score AS '數(shù)學成績'
FROM scores
WHERE subject = '數(shù)學' 
  AND score BETWEEN 80 AND 90;
查詢結(jié)果:

text
學號  姓名  數(shù)學成績
101   張三     85
105   孫七     88
示例2:日期范圍查詢
sql
-- 查詢2023年上半年入職的員工
SELECT 
    name AS '姓名',
    department AS '部門',
    hire_date AS '入職日期'
FROM employees
WHERE hire_date BETWEEN '2023-01-01' AND '2023-06-30';
示例3:NOT BETWEEN的用法
sql
-- 查詢薪資不在8000-9000范圍內(nèi)的員工
SELECT 
    name AS '姓名',
    salary AS '薪資'
FROM employees
WHERE salary NOT BETWEEN 8000 AND 9000;

3.3 注意事項

sql
-- BETWEEN包含邊界值
WHERE score BETWEEN 80 AND 90  -- 包含80和90

-- 對于日期,注意時間部分
WHERE date_column BETWEEN '2023-01-01' AND '2023-01-31'
-- 等價于:'2023-01-01 00:00:00' 到 '2023-01-31 23:59:59'

四、帶LIKE關鍵字的模糊查詢

4.1 通配符說明

通配符	描述	示例
%	匹配任意多個字符(0個或多個)	張% 匹配"張三"、"張"
_	匹配單個字符	_三 匹配"張三"、"李三"
[charlist]	匹配字符列表中的任意一個	[張李]三 匹配"張三"、"李三"
[^charlist]	匹配不在字符列表中的任意一個	[^張李]三 匹配"王三"、"趙三"

4.2 實際應用示例

sql
-- 示例表:圖書表(books)
CREATE TABLE books (
    book_id INT,
    book_name VARCHAR(100),
    author VARCHAR(50),
    price DECIMAL(8,2),
    publish_date DATE
);

INSERT INTO books VALUES
(1, 'MySQL數(shù)據(jù)庫實戰(zhàn)', '張三', 59.80, '2023-01-15'),
(2, 'Python編程從入門到精通', '李四', 79.90, '2022-11-20'),
(3, 'Java核心技術', '王五', 89.90, '2023-03-10'),
(4, 'Web前端開發(fā)實戰(zhàn)', '李四', 69.90, '2022-09-05'),
(5, 'MySQL優(yōu)化指南', '趙六', 49.90, '2023-05-20');
示例1:%通配符使用
sql
-- 查詢書名包含"MySQL"的圖書
SELECT 
    book_name AS '書名',
    author AS '作者',
    price AS '價格'
FROM books
WHERE book_name LIKE '%MySQL%';

-- 查詢以"實戰(zhàn)"結(jié)尾的圖書
SELECT book_name 
FROM books 
WHERE book_name LIKE '%實戰(zhàn)';

-- 查詢以"Python"開頭的圖書
SELECT book_name 
FROM books 
WHERE book_name LIKE 'Python%';
示例2:_通配符使用
sql
-- 查詢作者姓"李"且名字為兩個字的圖書
SELECT 
    book_name AS '書名',
    author AS '作者'
FROM books
WHERE author LIKE '李_';

-- 查詢書名第三個字是"編"的圖書
SELECT book_name 
FROM books 
WHERE book_name LIKE '__編%';
示例3:組合使用通配符
sql
-- 查詢書名以"實戰(zhàn)"結(jié)尾且長度至少為4個字的圖書
SELECT book_name 
FROM books 
WHERE book_name LIKE '%實戰(zhàn)' 
  AND LENGTH(book_name) >= 4;

-- 查詢作者不是"張"、"李"、"王"開頭的圖書
SELECT book_name, author
FROM books
WHERE author NOT LIKE '[張李王]%';
示例4:ESCAPE轉(zhuǎn)義字符
sql
-- 當需要查詢包含%或_本身時
SELECT column_name 
FROM table_name 
WHERE column_name LIKE '%\%%' ESCAPE '\';  -- 查找包含%的內(nèi)容

SELECT column_name 
FROM table_name 
WHERE column_name LIKE '%\_%' ESCAPE '\';  -- 查找包含_的內(nèi)容

五、用IS NULL關鍵字查詢空值

5.1 NULL值特性說明

NULL表示"未知"或"不存在"

NULL與任何值比較都返回NULL(包括NULL本身)

不能使用 = NULL 判斷,必須使用 IS NULL

5.2 實際應用示例

sql
-- 示例表:客戶表(customers)
CREATE TABLE customers (
    customer_id INT,
    customer_name VARCHAR(50),
    phone VARCHAR(20),
    email VARCHAR(100),
    address VARCHAR(200),
    register_date DATE
);

INSERT INTO customers VALUES
(1, '張三', '13800138001', 'zhangsan@email.com', '北京市朝陽區(qū)', '2023-01-15'),
(2, '李四', NULL, 'lisi@email.com', NULL, '2023-02-20'),
(3, '王五', '13900139002', NULL, '上海市浦東新區(qū)', '2023-03-10'),
(4, '趙六', NULL, NULL, NULL, '2023-04-05'),
(5, '孫七', '13700137003', 'sunqi@email.com', '廣州市天河區(qū)', '2023-05-12');
示例1:查詢空值
sql
-- 查詢沒有電話號碼的客戶
SELECT 
    customer_name AS '客戶姓名',
    phone AS '聯(lián)系電話',
    email AS '電子郵箱'
FROM customers
WHERE phone IS NULL;
查詢結(jié)果:

text
客戶姓名  聯(lián)系電話  電子郵箱
李四      NULL     lisi@email.com
趙六      NULL     NULL
示例2:查詢非空值
sql
-- 查詢有電子郵箱的客戶
SELECT 
    customer_name AS '客戶姓名',
    email AS '電子郵箱'
FROM customers
WHERE email IS NOT NULL;
示例3:多列空值判斷
sql
-- 查詢既沒有電話也沒有地址的客戶
SELECT 
    customer_name AS '客戶姓名',
    register_date AS '注冊日期'
FROM customers
WHERE phone IS NULL 
  AND address IS NULL;

5.3 空值處理函數(shù)

sql
-- 使用IFNULL處理空值顯示
SELECT 
    customer_name AS '姓名',
    IFNULL(phone, '未登記') AS '聯(lián)系電話',
    IFNULL(address, '地址不詳') AS '聯(lián)系地址'
FROM customers;

-- 使用COALESCE返回第一個非空值
SELECT 
    customer_name,
    COALESCE(email, phone, address, '無聯(lián)系方式') AS '主要聯(lián)系方式'
FROM customers;

六、帶AND的多條件查詢

6.1 基礎語法格式

sql
SELECT 列名 FROM 表名 
WHERE 條件1 AND 條件2 AND 條件3 ...;

6.2 實際應用示例

sql
-- 示例表:訂單表(orders)
CREATE TABLE orders (
    order_id INT,
    customer_id INT,
    product_name VARCHAR(100),
    quantity INT,
    unit_price DECIMAL(10,2),
    order_date DATE,
    status VARCHAR(20)
);

INSERT INTO orders VALUES
(1001, 1, '筆記本電腦', 1, 6999.00, '2023-10-15', '已完成'),
(1002, 2, '智能手機', 2, 2999.00, '2023-10-16', '待發(fā)貨'),
(1003, 1, '平板電腦', 1, 3999.00, '2023-10-17', '已取消'),
(1004, 3, '無線耳機', 3, 399.00, '2023-10-18', '已完成'),
(1005, 2, '智能手表', 1, 1299.00, '2023-10-19', '待付款'),
(1006, 4, '顯示器', 2, 1599.00, '2023-10-20', '待發(fā)貨');
示例1:多條件組合查詢
sql
-- 查詢2023年10月訂單金額超過5000元且狀態(tài)為"已完成"的訂單
SELECT 
    order_id AS '訂單編號',
    product_name AS '產(chǎn)品名稱',
    quantity AS '數(shù)量',
    unit_price AS '單價',
    (quantity * unit_price) AS '總金額',
    order_date AS '訂單日期',
    status AS '訂單狀態(tài)'
FROM orders
WHERE order_date BETWEEN '2023-10-01' AND '2023-10-31'
  AND (quantity * unit_price) > 5000
  AND status = '已完成';
查詢結(jié)果:

text
訂單編號  產(chǎn)品名稱    數(shù)量  單價      總金額    訂單日期    訂單狀態(tài)
1001      筆記本電腦   1    6999.00   6999.00   2023-10-15  已完成
示例2:復雜條件組合
sql
-- 查詢數(shù)量大于1且單價在1000-5000元之間的訂單
SELECT 
    order_id,
    product_name,
    quantity,
    unit_price,
    status
FROM orders
WHERE quantity > 1 
  AND unit_price BETWEEN 1000 AND 5000
  AND status IN ('待發(fā)貨', '已完成');
示例3:結(jié)合LIKE和AND
sql
-- 查詢產(chǎn)品名稱包含"電腦"且狀態(tài)不是"已取消"的訂單
SELECT 
    order_id AS '訂單號',
    product_name AS '產(chǎn)品',
    status AS '狀態(tài)'
FROM orders
WHERE product_name LIKE '%電腦%'
  AND status != '已取消';

6.3 注意事項

sql
-- 條件執(zhí)行的優(yōu)先級
WHERE 條件1 OR 條件2 AND 條件3
-- 等價于:WHERE 條件1 OR (條件2 AND 條件3)

-- 建議使用括號明確優(yōu)先級
WHERE (條件1 OR 條件2) AND 條件3

七、帶OR的多條件查詢

7.1 基礎語法格式

sql
SELECT 列名 FROM 表名 
WHERE 條件1 OR 條件2 OR 條件3 ...;

7.2 實際應用示例

sql
-- 示例表:員工考勤表(attendance)
CREATE TABLE attendance (
    record_id INT,
    employee_id INT,
    employee_name VARCHAR(50),
    department VARCHAR(30),
    attendance_date DATE,
    status VARCHAR(20)
);

INSERT INTO attendance VALUES
(1, 101, '張三', '技術部', '2023-10-23', '正常'),
(2, 102, '李四', '銷售部', '2023-10-23', '遲到'),
(3, 103, '王五', '技術部', '2023-10-23', '請假'),
(4, 104, '趙六', '市場部', '2023-10-23', '正常'),
(5, 105, '孫七', '人事部', '2023-10-23', '早退'),
(6, 101, '張三', '技術部', '2023-10-24', '請假'),
(7, 102, '李四', '銷售部', '2023-10-24', '正常');
示例1:簡單OR條件查詢
sql
-- 查詢狀態(tài)為"請假"或"遲到"的員工
SELECT 
    attendance_date AS '考勤日期',
    employee_name AS '員工姓名',
    department AS '部門',
    status AS '考勤狀態(tài)'
FROM attendance
WHERE status = '請假' OR status = '遲到';
查詢結(jié)果:

text
考勤日期   員工姓名  部門    考勤狀態(tài)
2023-10-23  李四    銷售部    遲到
2023-10-23  王五    技術部    請假
2023-10-24  張三    技術部    請假
示例2:OR與IN的等價轉(zhuǎn)換
sql
-- 以下兩種寫法等價:
SELECT * FROM attendance 
WHERE status = '請假' OR status = '遲到' OR status = '早退';

SELECT * FROM attendance 
WHERE status IN ('請假', '遲到', '早退');
示例3:多列OR條件查詢
sql
-- 查詢部門為"技術部"或狀態(tài)為"正常"的記錄
SELECT 
    attendance_date AS '日期',
    employee_name AS '姓名',
    department AS '部門',
    status AS '狀態(tài)'
FROM attendance
WHERE department = '技術部' OR status = '正常';

7.3 AND與OR的組合使用

示例1:復雜條件組合
sql
-- 查詢(技術部且請假)或(銷售部且遲到)的員工
SELECT 
    employee_name AS '姓名',
    department AS '部門',
    status AS '狀態(tài)',
    attendance_date AS '日期'
FROM attendance
WHERE (department = '技術部' AND status = '請假')
   OR (department = '銷售部' AND status = '遲到');
示例2:多層條件嵌套
sql
-- 查詢(狀態(tài)為正常)或(部門為技術部且狀態(tài)不為早退)的記錄
SELECT *
FROM attendance
WHERE status = '正常'
   OR (department = '技術部' AND status != '早退');

7.4 性能優(yōu)化建議

sql
-- 不推薦的寫法(OR導致索引失效)
SELECT * FROM orders 
WHERE customer_id = 1 OR product_name LIKE '%電腦%';

-- 推薦的改寫方式(使用UNION)
SELECT * FROM orders WHERE customer_id = 1
UNION
SELECT * FROM orders WHERE product_name LIKE '%電腦%';

八、綜合實戰(zhàn)案例

8.1 復雜查詢綜合應用

sql
-- 創(chuàng)建一個綜合示例表
CREATE TABLE sales (
    sale_id INT PRIMARY KEY,
    product_id INT,
    product_name VARCHAR(100),
    category VARCHAR(50),
    sale_date DATE,
    quantity INT,
    unit_price DECIMAL(10,2),
    salesperson VARCHAR(50),
    region VARCHAR(50)
);

-- 綜合查詢示例
SELECT 
    product_name AS '產(chǎn)品名稱',
    category AS '產(chǎn)品類別',
    SUM(quantity) AS '總銷量',
    SUM(quantity * unit_price) AS '總銷售額',
    AVG(unit_price) AS '平均單價'
FROM sales
WHERE sale_date BETWEEN '2023-01-01' AND '2023-12-31'
  AND category IN ('電子產(chǎn)品', '辦公用品')
  AND (region = '華東' OR region = '華南')
  AND quantity > 0
  AND salesperson IS NOT NULL
GROUP BY product_name, category
HAVING SUM(quantity * unit_price) > 10000
ORDER BY SUM(quantity * unit_price) DESC;

8.2 查詢優(yōu)化技巧總結(jié)

到此這篇關于MySQL WHERE子句實踐指南(精準過濾數(shù)據(jù)的藝術)的文章就介紹到這了,更多相關mysql where字句內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 淺談SQLite時間函數(shù)的使用說明與總結(jié)分析

    淺談SQLite時間函數(shù)的使用說明與總結(jié)分析

    本篇文章是對SQLite時間函數(shù)的使用進行了詳細的分析介紹,需要的朋友參考下
    2013-05-05
  • Mysql數(shù)據(jù)庫delete操作沒報錯卻刪除不了數(shù)據(jù)的解決

    Mysql數(shù)據(jù)庫delete操作沒報錯卻刪除不了數(shù)據(jù)的解決

    本文主要介紹了Mysql數(shù)據(jù)庫delete操作沒報錯卻刪除不了數(shù)據(jù)的解決,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-01-01
  • mysql性能優(yōu)化腳本mysqltuner.pl使用介紹

    mysql性能優(yōu)化腳本mysqltuner.pl使用介紹

    無意中發(fā)現(xiàn)了,major哥們開發(fā)的一個性能分析腳本,很有意思,可以通過這個腳本學學他的思想
    2013-02-02
  • MySQL注入點寫入WebShell的幾種方式

    MySQL注入點寫入WebShell的幾種方式

    本文主要介紹了MySQL注入點寫入WebShell的幾種方式,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2025-12-12
  • MySQL頻繁更新熱點數(shù)據(jù)高并發(fā)場景下的具體解決方案

    MySQL頻繁更新熱點數(shù)據(jù)高并發(fā)場景下的具體解決方案

    本文詳細介紹了MySQL高頻更新熱點數(shù)據(jù)在高并發(fā)場景下的解決方案,包括應用層緩存、數(shù)據(jù)分片、隊列削峰、數(shù)據(jù)庫層面優(yōu)化(如CAS、調(diào)整事務隔離級別)、讀寫分離、請求合并、參數(shù)調(diào)優(yōu)、分布式計數(shù)器等方法,需要的朋友可以參考下
    2025-10-10
  • MySQL的核心查詢語句詳解

    MySQL的核心查詢語句詳解

    這篇文章主要介紹了MySQL的核心查詢語句詳解,MySQL是一個流行的關系型數(shù)據(jù)庫管理系統(tǒng),可用于存儲、管理和檢索數(shù)據(jù)。它是一個獨立的數(shù)據(jù)庫服務器軟件,可安裝在計算機或服務器上,需要的朋友可以參考下
    2023-07-07
  • 修改MySQL時區(qū)和最大連接數(shù)的兩種方式

    修改MySQL時區(qū)和最大連接數(shù)的兩種方式

    文章介紹了如何修改MySQL的時區(qū)和最大連接數(shù),提供了臨時和永久兩種修改方法,時區(qū)修改需在配置文件中添加相應設置,并在不同系統(tǒng)下的不同路徑進行修改,最大連接數(shù)的修改同樣需要在配置文件中設置,并注意連接數(shù)不宜過大,本文給大家介紹的非常詳細,感興趣的朋友一起看看吧
    2025-10-10
  • MySQL中隔離級別的4種小結(jié)

    MySQL中隔離級別的4種小結(jié)

    事務隔離級別決定了事務之間如何相互隔離,以防止數(shù)據(jù)不一致和其他并發(fā)問題,本文主要介紹了MySQL中隔離級別的4種,具有一定的參考價值,感興趣的可以了解一下
    2025-07-07
  • MySQL通透詳解架構(gòu)設計

    MySQL通透詳解架構(gòu)設計

    這篇文章主要介紹了MySQL架構(gòu)設計相關基礎與原則,幫助大家更好的理解和使用MySQL,感興趣的朋友可以了解下
    2022-02-02
  • mysql部分字符存儲報錯 Incorrect string value問題解決

    mysql部分字符存儲報錯 Incorrect string value問題解決

    MySQL中的utf-8字符集并不完全支持utf-8,本文這要介紹了mysql部分字符存儲報錯 Incorrect string value問題解決,具有一定的參考價值,感興趣的可以了解一下
    2023-07-07

最新評論

大英县| 南川市| 浙江省| 北票市| 醴陵市| 怀安县| 饶河县| 工布江达县| 巴彦县| 通州区| 郴州市| 三门峡市| 呼和浩特市| 区。| 安岳县| 宜昌市| 沁水县| 郸城县| 泊头市| 鲁甸县| 三门峡市| 鄢陵县| 类乌齐县| 公安县| 沅陵县| 平武县| 和硕县| 大英县| 安西县| 巨野县| 茶陵县| 台东县| 邢台市| 如皋市| 南开区| 衡南县| 长汀县| 武邑县| 太白县| 亳州市| 通辽市|