100條常用SQL語句
一、基本查詢語句
查詢所有數(shù)據(jù):
SELECT * FROM 表名;
查詢特定列:
SELECT 列名1, 列名2 FROM 表名;
條件查詢:
SELECT * FROM 表名 WHERE 條件;
模糊查詢:
SELECT * FROM 表名 WHERE 列名 LIKE '模式%';
排序查詢:
SELECT * FROM 表名 ORDER BY 列名 ASC|DESC;
限制返回行數(shù):
SELECT * FROM 表名 LIMIT 10;
去重查詢:
SELECT DISTINCT 列名 FROM 表名;
二、聚合與分組
聚合函數(shù) - 計(jì)數(shù):
SELECT COUNT(*) FROM 表名;
分組查詢:
SELECT 列名, COUNT(*) FROM 表名 GROUP BY 列名;
條件分組:
SELECT 列名, COUNT(*) FROM 表名 GROUP BY 列名 HAVING COUNT(*) > 1;
計(jì)算總和:
SELECT SUM(列名) FROM 表名;
計(jì)算平均值:
SELECT AVG(列名) FROM 表名;
計(jì)算最大值:
SELECT MAX(列名) FROM 表名;
計(jì)算最小值:
SELECT MIN(列名) FROM 表名;
三、數(shù)據(jù)操作
插入數(shù)據(jù):
INSERT INTO 表名 (列名1, 列名2) VALUES (值1, 值2);
批量插入數(shù)據(jù):
INSERT INTO 表名 (列名1, 列名2) VALUES (值1, 值2), (值3, 值4);
更新數(shù)據(jù):
UPDATE 表名 SET 列名 = 新值 WHERE 條件;
刪除數(shù)據(jù):
DELETE FROM 表名 WHERE 條件;
四、表操作
創(chuàng)建表:
CREATE TABLE 表名 (列名1 數(shù)據(jù)類型, 列名2 數(shù)據(jù)類型);
刪除表:
DROP TABLE 表名;
修改表結(jié)構(gòu):
ALTER TABLE 表名 ADD 列名 數(shù)據(jù)類型;
刪除表中的列:
ALTER TABLE 表名 DROP COLUMN 列名;
重命名表:
ALTER TABLE 舊表名 RENAME TO 新表名;
五、索引與視圖
創(chuàng)建索引:
CREATE INDEX 索引名 ON 表名 (列名);
刪除索引:
DROP INDEX 索引名;
創(chuàng)建視圖:
CREATE VIEW 視圖名 AS SELECT * FROM 表名;
刪除視圖:
DROP VIEW 視圖名;
六、連接查詢
內(nèi)連接:
SELECT * FROM 表1 INNER JOIN 表2 ON 表1.列名 = 表2.列名;
左連接:
SELECT * FROM 表1 LEFT JOIN 表2 ON 表1.列名 = 表2.列名;
右連接:
SELECT * FROM 表1 RIGHT JOIN 表2 ON 表1.列名 = 表2.列名;
全連接:
SELECT * FROM 表1 FULL OUTER JOIN 表2 ON 表1.列名 = 表2.列名;
七、子查詢與集合
子查詢:
SELECT * FROM 表名 WHERE 列名 IN (SELECT 列名 FROM 其他表名);
存在查詢:
SELECT * FROM 表名 WHERE EXISTS (SELECT 1 FROM 其他表名 WHERE 條件);
聯(lián)合查詢:
SELECT 列名 FROM 表1 UNION SELECT 列名 FROM 表2;
八、日期與時(shí)間
獲取當(dāng)前時(shí)間:
SELECT NOW();
獲取當(dāng)前日期:
SELECT CURDATE();
日期加法:
SELECT DATE_ADD(日期, INTERVAL 1 DAY);
日期減法:
SELECT DATE_SUB(日期, INTERVAL 1 DAY);
格式化日期:
SELECT DATE_FORMAT(日期, '%Y-%m-%d');
九、字符串處理
字符串連接:
SELECT CONCAT(列名1, 列名2) FROM 表名;
字符串長度:
SELECT LENGTH(列名) FROM 表名;
字符串截取:
SELECT SUBSTRING(列名, 1, 5) FROM 表名;
查找字符串位置:
SELECT LOCATE('子串', 列名) FROM 表名;
大寫轉(zhuǎn)換:
SELECT UPPER(列名) FROM 表名;
小寫轉(zhuǎn)換:
SELECT LOWER(列名) FROM 表名;
去除空格:
SELECT TRIM(列名) FROM 表名;
十、其他高級(jí)功能
使用CASE語句:
SELECT 列名, CASE WHEN 條件 THEN '值1' ELSE '值2' END FROM 表名;
使用IF語句:
SELECT 列名, IF(條件, '值1', '值2') FROM 表名;
使用COALESCE函數(shù):
SELECT COALESCE(列名, '默認(rèn)值') FROM 表名;
使用NULLIF函數(shù):
SELECT NULLIF(列名1, 列名2) FROM 表名;
獲取唯一值的數(shù)量:
SELECT COUNT(DISTINCT 列名) FROM 表名;
使用GROUP_CONCAT:
SELECT GROUP_CONCAT(列名) FROM 表名 GROUP BY 其他列名;
十一、事務(wù)管理
事務(wù)開始:
BEGIN;
提交事務(wù):
COMMIT;
回滾事務(wù):
ROLLBACK;
十二、游標(biāo)與存儲(chǔ)過程
創(chuàng)建游標(biāo):
DECLARE 游標(biāo)名 CURSOR FOR SELECT 列名 FROM 表名;
打開游標(biāo):
OPEN 游標(biāo)名;
獲取游標(biāo)數(shù)據(jù):
FETCH 游標(biāo)名 INTO 變量名;
關(guān)閉游標(biāo):
CLOSE 游標(biāo)名;
創(chuàng)建存儲(chǔ)過程:
CREATE PROCEDURE 存儲(chǔ)過程名 AS BEGIN ... END;
調(diào)用存儲(chǔ)過程:
CALL 存儲(chǔ)過程名();
十三、函數(shù)與觸發(fā)器
創(chuàng)建函數(shù):
CREATE FUNCTION 函數(shù)名() RETURNS 數(shù)據(jù)類型 AS BEGIN ... END;
調(diào)用函數(shù):
SELECT 函數(shù)名();
創(chuàng)建觸發(fā)器:
CREATE TRIGGER 觸發(fā)器名 BEFORE INSERT ON 表名 FOR EACH ROW SET 新列 = '值';
刪除觸發(fā)器:
DROP TRIGGER 觸發(fā)器名;
十四、系統(tǒng)信息查詢
查詢當(dāng)前用戶:
SELECT CURRENT_USER();
查詢當(dāng)前數(shù)據(jù)庫:
SELECT DATABASE();
查詢表的行數(shù)和大小:
SELECT TABLE_NAME, TABLE_ROWS, DATA_LENGTH FROM information_schema.TABLES WHERE TABLE_SCHEMA = '數(shù)據(jù)庫名';
獲取表的創(chuàng)建時(shí)間:
SELECT CREATE_TIME FROM information_schema.TABLES WHERE TABLE_NAME = '表名';
獲取表的修改時(shí)間:
SELECT UPDATE_TIME FROM information_schema.TABLES WHERE TABLE_NAME = '表名';
十五、其他實(shí)用查詢
使用LIMIT與ORDER BY結(jié)合:
SELECT * FROM 表名 ORDER BY 列名 LIMIT 10;
查詢表的外鍵約束:
SELECT CONSTRAINT_NAME, TABLE_NAME FROM information_schema.KEY_COLUMN_USAGE WHERE TABLE_SCHEMA = '數(shù)據(jù)庫名';
查詢表的主鍵約束:
SELECT CONSTRAINT_NAME, TABLE_NAME FROM information_schema.TABLE_CONSTRAINTS WHERE TABLE_SCHEMA = '數(shù)據(jù)庫名' AND CONSTRAINT_TYPE = 'PRIMARY KEY';
使用ROLLUP進(jìn)行分組匯總:
SELECT 列名, SUM(列名2) FROM 表名 GROUP BY 列名 WITH ROLLUP;
獲取前N條記錄:
SELECT * FROM 表名 LIMIT N;
獲取最后N條記錄:
SELECT * FROM 表名 ORDER BY 列名 DESC LIMIT N;
使用NOT EXISTS進(jìn)行條件判斷:
SELECT * FROM 表名 WHERE NOT EXISTS (SELECT 1 FROM 其他表名 WHERE 條件);
使用IN進(jìn)行條件判斷:
SELECT * FROM 表名 WHERE 列名 IN (值1, 值2);
使用NOT IN進(jìn)行條件判斷:
SELECT * FROM 表名 WHERE 列名 NOT IN (值1, 值2);
使用UNION ALL:
SELECT 列名 FROM 表1 UNION ALL SELECT 列名 FROM 表2;
十六、性能優(yōu)化
使用EXPLAIN分析查詢:
EXPLAIN SELECT * FROM 表名 WHERE 條件;
優(yōu)化索引:
CREATE INDEX 索引名 ON 表名 (列名);
使用臨時(shí)表:
CREATE TEMPORARY TABLE 臨時(shí)表名 AS SELECT * FROM 表名;
查詢表的索引:
SHOW INDEX FROM 表名;
查詢數(shù)據(jù)庫版本:
SELECT VERSION();
十七、常見錯(cuò)誤處理
捕獲錯(cuò)誤:
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION BEGIN ... END;
輸出錯(cuò)誤信息:
SELECT ERROR_MESSAGE();
使用事務(wù)處理錯(cuò)誤:
BEGIN; -- 開始事務(wù)
-- 執(zhí)行SQL語句
-- 如果有錯(cuò)誤,ROLLBACK
十八、數(shù)據(jù)備份與恢復(fù)
備份數(shù)據(jù)庫:
mysqldump -u 用戶名 -p 數(shù)據(jù)庫名 > 備份文件.sql
恢復(fù)數(shù)據(jù)庫:
mysql -u 用戶名 -p 數(shù)據(jù)庫名 < 備份文件.sql
十九、數(shù)據(jù)導(dǎo)入與導(dǎo)出
導(dǎo)入數(shù)據(jù):
LOAD DATA INFILE '文件路徑' INTO TABLE 表名;
導(dǎo)出數(shù)據(jù):
SELECT * INTO OUTFILE '文件路徑' FROM 表名;
二十、常用工具與命令
顯示當(dāng)前數(shù)據(jù)庫:
SELECT DATABASE();
顯示所有數(shù)據(jù)庫:
SHOW DATABASES;
顯示所有表:
SHOW TABLES;
顯示表結(jié)構(gòu):
DESCRIBE 表名;
顯示當(dāng)前連接信息:
SHOW PROCESSLIST;
顯示數(shù)據(jù)庫使用情況:
SELECT table_schema AS '數(shù)據(jù)庫', SUM(data_length + index_length) / 1024 / 1024 AS '大小(MB)' FROM information_schema.TABLES GROUP BY table_schema;
顯示表的行數(shù):
SELECT COUNT(*) FROM 表名;
顯示用戶權(quán)限:
SHOW GRANTS FOR '用戶名'@'主機(jī)名';
以上就是本期全部內(nèi)容
我是曉凡,再小的帆也能遠(yuǎn)航
希望對(duì)你有所幫助
我們下期再見 ヾ(?ω?`)o (●'?'●)
本文來自博客園,作者:程序員曉凡,轉(zhuǎn)載請(qǐng)注明原文鏈接:http://www.rzrgm.cn/xiezhr/p/18960805
浙公網(wǎng)安備 33010602011771號(hào)