首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 查詢語句精華整理:基礎查詢、條件過濾、聚合分組與多表關聯實戰

     編輯:MySQL 資料庫相關知識

基礎查詢與別名

SELECT * FROM pet;
SELECT name, owner FROM pet;
SELECT SIN(1+2) AS sin_val;  -- 算術運算與別名

WHERE 條件過濾

-- 複合條件
SELECT * FROM pet WHERE (birth > '1980' AND species='dog') OR species='bird';

-- NULL 判斷
SELECT * FROM pet WHERE sex IS NOT NULL;

-- 模糊匹配(_ 單字符,% 任意長度)
SELECT * FROM pet WHERE owner LIKE '___n%';

-- 集合匹配
SELECT * FROM pet WHERE owner IN ('gwen', 'benny');

-- 範圍匹配
SELECT * FROM pet WHERE birth BETWEEN '1990' AND '1999';

排序與去重

SELECT * FROM pet ORDER BY owner, name DESC;
SELECT * FROM pet WHERE sex='m' ORDER BY birth DESC;
SELECT DISTINCT owner FROM pet WHERE species='dog';

字符串與日期函數

SELECT owner, LENGTH(owner), CHAR_LENGTH(owner) FROM pet;
-- 兩種方式提取年月
SELECT name, LEFT(birth,4) AS yr, MID(birth,6,2) AS mo FROM pet WHERE species IN ('dog','cat');
SELECT name, YEAR(birth) AS yr, MONTH(birth) AS mo FROM pet WHERE species IN ('dog','cat');

數值與日期運算

SELECT ROUND(2.345,2), TRUNCATE(2.345,2), MOD(323,5);
SELECT NOW(), CURDATE(), CURTIME();
SELECT ADDDATE('2007-02-02', INTERVAL 31 DAY);

計算寵物年齡(兩種寫法)

SELECT name, birth,
    TRUNCATE(DATEDIFF(NOW(), birth)/365, 0) AS age1,
    YEAR(NOW()) - YEAR(birth) - (DAYOFYEAR(birth) > DAYOFYEAR(NOW())) AS age2
FROM pet;

聚合函數與 GROUP BY

-- 全表聚合
SELECT MIN(birth), MAX(birth), AVG(birth), COUNT(*), COUNT(sex), SUM(birth) FROM pet;

-- 分組統計
SELECT species, COUNT(*) FROM pet GROUP BY species;
SELECT YEAR(birth), COUNT(*) FROM pet GROUP BY YEAR(birth);

-- 多欄位分組
SELECT species, sex, COUNT(*) FROM pet WHERE species IN ('cat','bird') GROUP BY species, sex;

-- 篩選分組
SELECT species, COUNT(*) AS c FROM pet GROUP BY species HAVING c >= 2;

多表關聯查詢

-- 內連接(隱式/顯式)
SELECT a.name, a.species, a.sex, b.date, b.type, b.remark
FROM pet a, event b WHERE a.name = b.name;

SELECT a.name, a.species, TRUNCATE(DATEDIFF(b.date, a.birth)/365, 0) AS age
FROM pet a INNER JOIN event b ON a.name = b.name
WHERE b.type = 'litter';

-- 90 年代出生狗的事件
SELECT a.name, a.birth, a.species, a.sex, b.date, b.type, b.remark
FROM pet a INNER JOIN event b ON a.name = b.name
WHERE a.birth BETWEEN '1990' AND '1999' AND a.species = 'dog';

-- 活著寵物的事件類型統計
SELECT b.type, COUNT(*)
FROM pet a INNER JOIN event b ON a.name = b.name
WHERE a.death IS NULL
GROUP BY b.type;

-- 事件超過 1 條的寵物
SELECT a.name, a.species, a.sex, COUNT(*)
FROM pet a INNER JOIN event b ON a.name = b.name
GROUP BY a.name HAVING COUNT(*) >= 2;

-- 子查詢:恰好 2 條事件的寵物詳細記錄
SELECT a.name, a.type, a.date, a.remark, b.species, b.sex, b.owner
FROM event a INNER JOIN pet b ON a.name = b.name
WHERE b.name IN (
    SELECT name FROM event GROUP BY name HAVING COUNT(*) = 2
);

DML 寫操作

-- 插入
INSERT INTO pet (name, species, birth) VALUES ('KKK', 'snake', '2007-01-01');
INSERT INTO pet VALUES ('KK', 'Diane', 'cat', 'f', NULL, NULL);
INSERT INTO pet SET name='k', owner='Benny';

-- 更新
UPDATE pet SET species='snake', sex='f', birth=NOW() WHERE name='k';

-- 子查詢更新:同步 event 表生日到 pet
UPDATE pet a
SET birth = (SELECT date FROM event b WHERE a.name=b.name AND b.type='birthday')
WHERE a.name IN (SELECT name FROM event WHERE type='birthday');

-- 刪除
DELETE FROM pet WHERE name LIKE 'k%';

通用查詢模板速查

SELECT * FROM `t` WHERE 1;
SELECT id, uid FROM `t` WHERE 1;
SELECT remark AS r FROM `t` WHERE 1;
SELECT * FROM `t` WHERE id IN (1,3);
SELECT * FROM `t` WHERE id NOT IN (2,3);
SELECT * FROM `t` WHERE uid LIKE '%王%';
SELECT * FROM `t` WHERE id BETWEEN 1 AND 3;
SELECT * FROM `t` WHERE id=1 AND remark='學生';
SELECT * FROM `t` GROUP BY remark;
SELECT * FROM `t` ORDER BY regdate ASC, id DESC;
SELECT * FROM `t` LIMIT 0, 3;
SELECT COUNT(*) FROM `t`;
SELECT MAX(id), MIN(id), AVG(score), SUM(score) FROM `t`;

基礎寫操作模板

INSERT INTO `t` (`id`,`uid`,`regdate`,`remark`) VALUES ('', 'PHP100', '2008-07-26', '工人');
UPDATE `t` SET uid='php200' WHERE id=6;
DELETE FROM `t` WHERE id=3;
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved