1、表内容操作—条件选择
SELECT * FROM 表 WHERE id BETWEEN 5 AND 16; # 也支持多个并列
SELECT * FROM 表 WHERE id IN(11,22,33)
SELECT * FROM 表 WHERE id NOT IN(11,22,33)
SELECT * FROM 表 WHERE id IN(select nid from 表)
2、表内容操作—通配符模糊匹配
SELECT * FROM 表 WHERE name LIKE 'ale%' # - ale开头的所有(多个字符串) where ... like ''
SELECT * FROM 表 WHERE name LIKE 'ale_' # - ale开头的所有(1个字符)
SELECT * FROM 表 WHERE name LIKE '_le%'
3、表内容操作—限制/分页
SELECT * FROM 表 LIMIT 5; # 前5行
SELECT * FROM 表 LIMIT 4,5; # 从第4行下一行开始的5行
SELECT * FROM 表 LIMIT 5 OFFSET 4 # 从第4行开始的5行,与上一条功能一样
4、表内容操作—排序
SELECT * FROM 表 ORDER BY 列 ASC # 根据 “列” 从小到大排列
SELECT * FROM 表 ORDER BY 列 DESC # 根据 “列” 从大到小排列
SELECT * FROM 表 ORDER BY 列1 DESC,列2 ASC # 根据 “列1” 从大到小排列,如果相同则按列2从小到大排序,否则一列相同时其他列默认升序排序
5、表内容操作—分组+聚合
# group by获取各组第一行作为标识,其余行丢弃
SELECT num FROM 表 GROUP BY num
# 分组的原理默认是升序排序,也可以降序
SELECT num FROM 表 GROUP BY num DESC
SELECT count(1) FROM 表 GROUP BY num # 也可使用
SELECT count(name) FROM students GROUP BY classid
# count(1) 和 count(name)区别
# 如果name中有null则count(name)不记录,其余时候二者完全一样
SELECT count(distinct name) FROM students GROUP BY classid # 去重
6、表内容操作—组合
# 纵向组合,并以第一个表字段为准
# 组合,自动处理重合
SELECT nickname FROM A UNION SELECT name FROM B;
# 组合,不处理重合
SELECT nickname FROM A UNION ALL SELECT name FROM B;
7、表内容操作—连表
# 根据对应关系连表,实际等同于inner join
SELECT * FROM students,disc_info WHERE students.discipline = disc_info.nid;
SELECT students.name,disc_info.discipline FROM students,disc_info WHERE students.discipline = disc_info.nid;
# join 左右连接如果无对应关系显示NULL,join效率高
# 取交集,inner join,也可以理解成过滤掉含NULL数据行的左右连接
SELECT A.num, A.name, B.name FROM
A INNER JOIN B
ON A.nid = B.nid;
# 右连接,right join
SELECT A.num, A.name, B.name FROM
A RIGHT JOIN B
ON A.nid = B.nid
# 左连接,right join
SELECT A.num, A.name, B.name FROM
A LEFT JOIN B
ON A.nid = B.nid
8、表内容操作—CASE WHEN 判断
CASE WHEN 表达式
THEN 输出
WHEN 表达式 # 多少个WHEN都可以
THEN 输出
ELSE
输出
END
9、表内容操作—半连接
SELECT
id,NAME,classid
FROM
student tf
WHERE
id = (
SELECT
max(id)
FROM
student ts
WHERE
ts.classid = tf.classid
);
10、表内容操作—索引
# 创建索引
CREATE INDEX name_index ON student(name);
11、表内容操作—视图
CREATE VIEW V1 AS # 反复利用某个临时表则可以创建视图
SELECT * FROM stu WHERE id > 10;
# 视图是一个动态表,会从物理表动态读出来。但无法直接对虚拟表即视图修改
# 修改视图
ALTER VIEW V1 AS SELECT * FROM stu WHERE id > 20;
# 删除视图
DROP VIEW V1;
12、表内容操作—触发器
DELIMITER // # 修改终止符
CREATE TRIGGER tri_before_insert_tb1 BEFORE INSERT INTO tb1 FOR EACH ROW
BEGIN
INSERT INTO tb2(name) VALUES('chenx');
INSERT INTO tb2(name) VALUES(NEW.sname); # 指代新插入的一行,OLD可以用在DELETE和UPDATE
END //
DELIMITER ; # 修改回原终止符
# BEFORE可以换成AFTER,INSERT可以换成DELETE或者UPDATE
# 删除触发器
DROP TRIGGER tri_before_insert_tb1;
13、表内容操作—函数
# 内置函数
SELECT CURDATE(); # 执行函数的用法
SELECT DATE_FORMAT(ctime, "%Y-%m") FROM stu GROUP BY DATE_FORMAT(ctime, "%Y-%m") # 时间格式化