进阶SQL语句整理(mysql5.7下通过运行)

-- 注释可以用#、-- 、/**/
-- 选择要操作的数据库
USE db1;
-- 主键PRIMARY KEY、唯一约束UNIQUE、非空约束NOT NULL、自增AUTO_INCREMENT、备注
-- CONSTRAINT student_pk可以不写,它表示给约束起了一个名,方便日后删除约束
CREATE TABLE student (
  snum INT AUTO_INCREMENT COMMENT '学号',
  sname VARCHAR (20) NOT NULL COMMENT '姓名',
  sage INT NOT NULL COMMENT '年龄',
  ssex CHAR(1) UNIQUE NOT NULL COMMENT '性别',
  sdate DATE COMMENT '生日',
  CONSTRAINT student_pk PRIMARY KEY(snum,sname),UNIQUE(sname)
) ENGINE = INNODB DEFAULT CHARSET = utf8;
-- 查看表
SELECT * FROM student;
-- 分页查询
-- select 列 from 表 limit 开始的索引,每页显示的信息条数
-- select 列 from 表 limit (pageNow - 1) * pageSize,pageSize
SELECT * FROM student LIMIT 0,3;
-- 聚合函数
-- 统计信息条数(带别名的,可以省略)
SELECT COUNT(sage) FROM student;
-- 统计该列最大值
SELECT MAX(sage) AS 年龄最大 FROM student;
-- 统计该列最小值
SELECT MIN(sage) AS 年龄最小 FROM student;
-- 统计该列总和
SELECT SUM(sage) AS 年龄总和 FROM student;
-- 统计该列平均值
SELECT AVG(sage) AS 年龄平均值 FROM student;
-- 去重复DISTINCT
SELECT DISTINCT sname FROM student;
-- 分组查询,带条件WHERE带条件HAVING带排序
SELECT sage,COUNT(*) FROM student WHERE snum>3 GROUP BY sname HAVING COUNT(*)>=2 ORDER BY sage;
SELECT sage,COUNT(*) AS 别名 FROM student WHERE snum>3 GROUP BY sname HAVING 别名>=2 ORDER BY sage;
-- GROUP_CONCAT()
SELECT sdate,GROUP_CONCAT(sname) AS 姓名集 FROM student GROUP BY sdate;
-- 子查询(嵌套查询)
-- 第一步:求最小年龄
SELECT MIN(sage) FROM student;
-- 第二步:根据最小年龄查询(假如上面一步查的结果是20岁)
SELECT * FROM student WHERE sage=20;
-- 第三步:把前两步组合到一起
SELECT * FROM student WHERE sage=(SELECT MIN(sage) FROM student);

你可能感兴趣的:(JavaEE企业级开发技术,sql,数据库,mysql)