首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL WHERE 條件查詢完全指南:運算符、邏輯組合與模糊匹配實戰

     編輯:MySQL 綜合教學

比較運算符

運算符含義示例
=等於WHERE id = 1001
<>, !=不等於WHERE status <> 'deleted'
<, >, <=, >=大小比較WHERE age >= 18
BETWEEN ... AND ...閉區間範圍WHERE create_time BETWEEN '2023-01-01' AND '2023-12-31'

邏輯運算符與優先級

-- AND 優先級高於 OR,建議顯式加括號
SELECT * FROM student 
WHERE (major = 'CS' OR major = 'EE') AND gender = 'M';

-- IN 替換多個 OR,優化器可轉為範圍查詢
SELECT * FROM student WHERE stu_id IN (1001, 1002, 1003);

-- NOT 取反
SELECT * FROM student WHERE major NOT IN ('CS', 'EE');

模糊查詢:LIKE 與通配符

通配符匹配規則示例說明
%任意長度字符(含 0 個)WHERE major LIKE '%工程'以「工程」結尾
_單個字符WHERE name LIKE '王_'姓王、雙字名
ESCAPE轉義符WHERE code LIKE '%/_%' ESCAPE '/'查詢含底線的代碼

性能提示: 前導通配符 %xxx 無法利用索引,導致全表掃描。後綴 xxx% 可用索引範圍掃描。

聚合與分組查詢

-- 基礎聚合
SELECT COUNT(*), SUM(score), AVG(score), MAX(score), MIN(score) FROM exam;

-- 分組統計
SELECT class, COUNT(*) AS cnt, AVG(score) AS avg_score
FROM exam
GROUP BY class;

-- 分組後過濾(HAVING 用於聚合條件)
SELECT class, COUNT(*) AS cnt
FROM exam
GROUP BY class
HAVING COUNT(*) > 30;

約束定義速查

CREATE TABLE demo (
  id INT AUTO_INCREMENT PRIMARY KEY,     -- 主鍵:非空 + 唯一
  email VARCHAR(100) NOT NULL UNIQUE,    -- 非空 + 唯一
  status TINYINT NOT NULL DEFAULT 1,     -- 非空 + 默認值
  parent_id INT,
  CONSTRAINT fk_parent FOREIGN KEY (parent_id) REFERENCES demo(id)
    ON DELETE SET NULL ON UPDATE CASCADE
);

樣例表結構(附錄)

CREATE TABLE customers (
  cust_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
  cust_name CHAR(50) NOT NULL,
  cust_email VARCHAR(255)
);

CREATE TABLE orders (
  order_num INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
  order_date DATETIME NOT NULL,
  cust_id INT NOT NULL,
  FOREIGN KEY (cust_id) REFERENCES customers(cust_id)
);
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved