SQL常用查询语句
该贴是为了掌握几种SQL常用的查询语句,以及对应的关键字排列顺序(末尾那个例子中体现SQL关键字的优先级顺序)。
建数据表
新建-测试数据表
# 这贴不研究表结构,直接拿去用,这是学生表(stu)
CREATE TABLE `stu` (
`id` INT NOT NULL AUTO_INCREMENT COMMENT '学生编号',
`nama` VARCHAR ( 255 ) NOT NULL COMMENT '姓名',
`age` INT ( 2 ) UNSIGNED ZEROFILL DEFAULT NULL COMMENT '年龄',
`sex` VARCHAR ( 1 ) CHARACTER DEFAULT NULL COMMENT '性别',
`address` VARCHAR ( 255 ) DEFAULT NULL COMMENT '住址',
`classid` INT ( 1 ) UNSIGNED ZEROFILL DEFAULT NULL COMMENT '班级编号',
PRIMARY KEY ( `id` )
) ENGINE = INNODB AUTO_INCREMENT = 1 DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci;
# 这是班级表(class)
CREATE TABLE `class` (
`id` INT NOT NULL COMMENT '班级编号',
`class` VARCHAR ( 255 ) DEFAULT NULL COMMENT '班级',
`teacher` VARCHAR ( 255 ) DEFAULT NULL COMMENT '老师',
PRIMARY KEY ( `id` )
) ENGINE = INNODB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci;
数据
新增-测试数据
# 新增 学生表 信息
INSERT INTO `testdb2`.`stu` (`id`, `nama`, `age`, `sex`, `address`, `classid`) VALUES (1, '张三', 24, '男', '南宁良庆区玉洞', 1);
INSERT INTO `testdb2`.`stu` (`id`, `nama`, `age`, `sex`, `address`, `classid`) VALUES (2, '小二', 22, '男', '南宁青秀区大街小巷', 2);
INSERT INTO `testdb2`.`stu` (`id`, `nama`, `age`, `sex`, `address`, `classid`) VALUES (3, '李四', 33, '男', NULL, 1);
INSERT INTO `testdb2`.`stu` (`id`, `nama`, `age`, `sex`, `address`, `classid`) VALUES (4, '赵五', 24, '男', '南宁兴宁区邕武路', 3);
INSERT INTO `testdb2`.`stu` (`id`, `nama`, `age`, `sex`, `address`, `classid`) VALUES (5, '顺六', 18, '男', '南宁良庆区玉洞', 3);
INSERT INTO `testdb2`.`stu` (`id`, `nama`, `age`, `sex`, `address`, `classid`) VALUES (6, '小七', 35, '男', '南宁西乡塘区科园大道', 2);
INSERT INTO `testdb2`.`stu` (`id`, `nama`, `age`, `sex`, `address`, `classid`) VALUES (7, '小八', 18, '男', '南宁西乡塘区动物园', NULL);
# 新增 班级表 信息
INSERT INTO `testdb2`.`class` (`id`, `class`, `teacher`) VALUES (1, '一班', '王老师');
INSERT INTO `testdb2`.`class` (`id`, `class`, `teacher`) VALUES (2, '二班', '赵老师');
INSERT INTO `testdb2`.`class` (`id`, `class`, `teacher`) VALUES (3, '三班', '李老师');
INSERT INTO `testdb2`.`class` (`id`, `class`, `teacher`) VALUES (4, '四班', '邓老师');
文档
关于一条蛮复杂的查询语句-解析
# stu : 学生表 class :班级表
SELECT # 查询
*, # 所有字段
count( stu.age ) # 以及统计(学生表的年龄)这个字段有多少条记录满足查询条件
FROM # 你需要查哪个表?
stu # 查(学生表)表
LEFT JOIN class ON stu.classid = class.id # 以及(LEFT JOIN)左外连接 (班级表),满足连接表的前提条件(on)是: (学生表的班级id = 班级表的id)
WHERE # 查询条件
stu.age > 20 # 学生表的年龄大于20
GROUP BY # 分组
stu.age # 根据学生表的年龄分组
ORDER BY # 排序
stu.age DESC # 根据学生表的年龄排倒序
执行效果