DQL
DQL 英文全称是 Data Query Language(数据查询语言),数据查询语言,用来查询数据库中表的记 录。
查询关键字 :SELECT
INFO
在一个正常的业务系统中,查询操作的频次是要远高于增删改的,当我们去访问企业官网、电商网站, 在这些网站中我们所看到的数据,实际都是需要从数据库中查询并展示的。而且在查询的过程中,可能 还会涉及到条件、排序、分页等操作。
准备操作
bash
drop table if exists employee;
create table emp(
id int comment '编号',
workno varchar(10) comment '工号',
name varchar(10) comment '姓名',
gender char(1) comment '性别',
age tinyint unsigned comment '年龄',
idcard char(18) comment '身份证号',
workaddress varchar(50) comment '工作地址',
entrydate date comment '入职时间'
)comment '员工表';
INSERT INTO emp (id, workno, name, gender, age, idcard, workaddress, entrydate)VALUES (1, '00001', '柳岩666', '女', 20, '123456789012345678', '北京', '2000-01-01');
INSERT INTO emp (id, workno, name, gender, age, idcard, workaddress, entrydate)VALUES (2, '00002', '张无忌', '男', 18, '123456789012345670', '北京', '2005-09-01');
INSERT INTO emp (id, workno, name, gender, age, idcard, workaddress, entrydate)VALUES (3, '00003', '韦一笑', '男', 38, '123456789712345670', '上海', '2005-08-01');
INSERT INTO emp (id, workno, name, gender, age, idcard, workaddress, entrydate)VALUES (4, '00004', '赵敏', '女', 18, '123456757123845670', '北京', '2009-12-01');
INSERT INTO emp (id, workno, name, gender, age, idcard, workaddress, entrydate)VALUES (5, '00005', '小昭', '女', 16, '123456769012345678', '上海', '2007-07-01');
INSERT INTO emp (id, workno, name, gender, age, idcard, workaddress, entrydate)VALUES (6, '00006', '杨逍', '男', 28, '12345678931234567X', '北京', '2006-01-01');
INSERT INTO emp (id, workno, name, gender, age, idcard, workaddress, entrydate)VALUES (7, '00007', '范瑶', '男', 40, '123456789212345670', '北京', '2005-05-01');
INSERT INTO emp (id, workno, name, gender, age, idcard, workaddress, entrydate)VALUES (8, '00008', '黛绮丝', '女', 38, '123456157123645670', '天津', '2015-05-01');
INSERT INTO emp (id, workno, name, gender, age, idcard, workaddress, entrydate)VALUES (9, '00009', '范凉凉', '女', 45, '123156789012345678', '北京', '2010-04-01');
INSERT INTO emp (id, workno, name, gender, age, idcard, workaddress, entrydate)VALUES (10, '00010', '陈友谅', '男', 53, '123456789012345670', '上海', '2011-01-01');
INSERT INTO emp (id, workno, name, gender, age, idcard, workaddress, entrydate)VALUES (11, '00011', '张士诚', '男', 55, '123567897123465670', '江苏', '2015-05-01');
INSERT INTO emp (id, workno, name, gender, age, idcard, workaddress, entrydate)VALUES (12, '00012', '常遇春', '男', 32, '123446757152345670', '北京', '2004-02-01');
INSERT INTO emp (id, workno, name, gender, age, idcard, workaddress, entrydate)VALUES (13, '00013', '张三丰', '男', 88, '123656789012345678', '江苏', '2020-11-01');
INSERT INTO emp (id, workno, name, gender, age, idcard, workaddress, entrydate)VALUES (14, '00014', '灭绝', '女', 65, '123456719012345670', '西安', '2019-05-01');
INSERT INTO emp (id, workno, name, gender, age, idcard, workaddress, entrydate)VALUES (15, '00015', '胡青牛', '男', 70, '12345674971234567X', '西安', '2018-04-01');
INSERT INTO emp (id, workno, name, gender, age, idcard, workaddress, entrydate)VALUES (16, '00016', '周芷若', '女', 18, null, '北京', '2012-06-01');
准备完毕后,我们就可以看到 emp 表中准备的 16 条数据。接下来,我们再来完成 DQL 语法的学习
基本语法
DQL 查询语句,语法结构如下:
bash
SELECT
字段列表
FROM
表名列表
WHERE
条件列表
GROUP BY
分组字段列表
HAVING
分组后条件列表
ORDER BY
排序字段列表
LIMIT
分页参数
下面分成几部分来说明
基本查询(不带任何条件)
条件查询(WHERE)
聚合函数(count、max、min、avg、sum)
分组查询(group by)
排序查询(order by)
分页查询(limit)
基础查询
在基本的查询 DQL 语句中,不带任何的查询条件,查询的语法如下:
区分常量还是变量
- 简单来说 常量就是加单引号 ,变量就是字段名不加单引号
bash
SELECT 'admin'
这就是常量
- 变量
这就是变量(代表字段名)
bash
SELECT admin
查询多个字段
bash
SELECT 字段1,字段2,字段3... FROM 表名;
SELECT * FROM 表名;
INFO
注意: * 号代表查询所有字段,在实际开发中少用(不直观,影响效率)
字段设置为别名
bash
SELECT 字段1 [AS] 别名1,字段2 [AS] 别名2,... FROM 表名;
SELECT 字段1 [别名1],字段2 [别名2],... FROM 表名;
去除重复记录
- 语法
bash
SELECT DISTINCT 字段列表 FROM 表名;
- 单个
去除重复的JOB
bash
SELECT DISTINCT JOB FROM 表名;
- 多个
代表 记录上面的每个字段都相等,这样才会去重
下面这个就代表,job 和 deptno 都相等才会去重
bash
SELECT DISTINCT JOB,DEPTNO FROM 表名;
案例
- 查询指定字段 name , workno,age 返回
bash
SELECT name,workno,age FROM emp;
- 查询返回所有字段
bash
SELECT * FROM emp;
SELECT id,name,workno,gender,age,idcard,workaddress,entrydate FROM emp;
- 查询所有员工的工作地址,起别名
bash
SELECT workaddress AS '工作地址' FROM emp;
或者
SELECT workaddress '工作地址' FROM emp;
- 查询公司员工的上班地址有哪些(不要重复)
bash
SELECT DISTINCT workaddress as '工作地址' FROM emp;