数据库:DQL

DQL英文全称是DataQuery Language(数据查询语言,数据查询语言,用来查询数据库中表的记录。

查询关键字:SELECT

语法:

1.基本查询

  1. 查询多个字段

    SELECT 字段1,字段2,字段3 FROM 表名;

    SELECT * FROM 表名;(查询所有字段)

  2. 设置别名

    SELECT 字段1 [AS 别名1],字段2 [AS 别名2]...FROM 表名;(AS可省略)

  3. 去除重复记录

    SELECT DISTINCT 字段列表 FROM 表名;

示例:

sql 复制代码
-- 数据准备
create table emp(
    id      int             comment '编号',
    workno  varchar(10)     comment '工号',
    name    varchar(10)     comment '姓名',
    gender  char            comment '性别',
    age     tinyint unsigned comment '年龄',
    idcard  char(18)        comment '身份证号',
    entrydate   date        comment '入职时间'
)comment '员工表';

insert into emp (id, workno, name, gender, age, idcard, entrydate)
values (1,'101','赵一','男',18,'111111111111111111','2000-2-1'),
       (2,'102','吴二','女',21,'111111111111111112','2000-1-1'),
       (3,'103','张三','男',19,'111111111111111113','2000-1-10'),
       (4,'104','李四','女',22,'111111111111111114','2000-1-15'),
       (5,'105','王五','女',24,'111111111111111115','2000-3-1'),
       (6,'106','老六','男',29,'111111111111111116','2000-6-1');
sql 复制代码
-- 1.基本查询
-- 查询指定字段name,workno,age返回
select name,workno,age from emp;
sql 复制代码
-- 查询所有字段
select * from emp;

sql 复制代码
-- 查询所有员工的年龄,起别名
select age as '年龄' from emp;

2.条件查询(WHERE)

SELECT 字段列表 FROM 表名 WHERE 条件列表;

条件:

示例:

sql 复制代码
-- 2-- 条件查询
-- 查询年龄等于18的员工
select * from emp where age=18;
-- 查询年龄小于20的员工信息
select * from emp where age<20;
-- 查询年龄小于等于21的员工信息
select * from emp where age<=21;

-- 插入一个无身份证号的信息
insert into emp (id, workno, name, gender, age, idcard, entrydate)
values (7,'107','赵四','男',18,NULL,'2000-2-1');
-- 查询没有身份证号的员工信息
select * from emp where idcard is NULL;
-- 查询有身份证号的员工信息
select * from emp where idcard is not NULL;
-- 查询年龄不等于18的员工信息
select * from emp where age!=18;
-- 查询年龄在18岁(包含)到21岁(包含)之间的员工信息
select * from emp where age>=18 && age<=21;
select * from emp where age>=18 and age<=21;
select * from emp where age between 18 and 21;
-- 查询性别为女且年龄小于 21岁的员工信息
select * from emp where gender='女'&&age<=21;
-- 查询年龄等于18或21的员工信息
select * from emp where age=18||age=21;
select * from emp where age=18 or age=21;
-- 插入一个名字为3个字的信息
insert into emp (id, workno, name, gender, age, idcard, entrydate)
    values (8,'108','马云腾','男',18,NULL,'2000-5-1');
-- 查询名字为2个字的员工信息
select * from emp where name like '__';
-- 查询身份证最后一位为5的员工信息
select * from emp where idcard like '%5';
-- 查询姓赵的员工信息
select * from emp where name like '赵%';

3.聚合函数(count、max、min、avg、sum)

聚合函数:将一列数据作为一个整体进行纵向计算。

常见聚合函数:

作用于某一列(某一个属性)。

语法:SELECT 聚合函数(字段列表) FROM 表名;

示例:

sql 复制代码
-- 3.聚合函数
-- 统计员工数量
select count(*) as '员工数量' from emp;    -- 总数据量
select count(id)  as '员工数量' from emp;
-- 员工平均年龄
select  avg(age) as '平均年龄' from emp;
-- 最大年龄和最小年龄
select max(age) as '最大年龄' from emp;
select min(age) as '最小年龄' from emp;
-- 添加新属性工作地址
alter table emp add column workaddress varchar(200) comment '工作地址';
update emp set emp.workaddress='湖北' where id=1;
update emp set emp.workaddress='北京' where id=2;
update emp set emp.workaddress='湖北' where id=3;
update emp set emp.workaddress='湖南' where id=4;
update emp set emp.workaddress='山东' where id=5;
update emp set emp.workaddress='陕西' where id=6;
update emp set emp.workaddress='重庆' where id=7;
update emp set emp.workaddress='西藏' where id=8;
-- 统计湖北的员工的年龄之和
select sum(age) from emp where emp.workaddress='湖北';

4.分组查询(GROUPBY)

语法:SELECT 字段列表 FROM 表名[WHERE条件] GROUP BY 分组字段名 [HAVING分组后过滤条件];

where与having区别

  • 执时机不同:where是分组之前进过滤,不满足where条件,不参与分组;而having是分组之后对结果进行过滤。
  • 判断条件不同:where不能对聚合函数进行判断,而having可以。

示例:

sql 复制代码
-- 4.分组查询
-- 根据性别分组,统计男女员工数量
select gender as '性别',count(*) as '人数' from emp group by gender;
-- 根据性别分组,统计男女员工平均年龄
select gender as '性别',avg(age) as '平均年龄' from emp group by gender;
-- 查询年龄小于25的员工并按工作地址分组,获取员工数大于1的工作地址
select workaddress as '工作地址',count(*) as '人数' from emp where age<25 group by emp.workaddress having count(*)>1;

5.排序查询(ORDERBY)分页查询(LIMIT)

语法:SELECT 字段列表 FROM 表名 ORDER BY 字段1 排序方式1,字段2 排序方式2,...;

排序方式:ASC(升序),DESC(降序)

示例:

sql 复制代码
-- 5.排序查询
-- 根据年龄升序查询
select * from emp order by age asc;
-- 根据入职时间降序查询
select * from emp order by entrydate desc;
-- 根据年龄升序查询,年龄相同根据入职时间降序排序
select * from emp order by age asc ,entrydate desc;

6.分页查询

语法:SELECT 字段列表 FROM表名 LIMIT 起始索引,查询记录数;

  • 起始索引从0开始,起始索引=(查询页码-1)*每页显示记录数。
  • 分页查询是数据库的方言,不同的数据库有不同的实现,MySQL中是LIMIT。
  • 如果查询的是第一页数据,起始索引可以省略,直接简写为limit 10。

示例:

sql 复制代码
-- 6.分页查询
-- 查询第一页员工数据,每页展示4条记录
select * from emp limit 0,4;
-- 查询第二页员工数据,每页展示4条记录
select * from emp limit 4,4;

DQL语句执行和编写顺序

编写顺序

执行顺序:(标红)

相关推荐
Dontla40 分钟前
Python asyncpg库介绍(基于Python asyncio的PostgreSQL数据库驱动)连接池、SQLAlchemy
数据库·python·postgresql
zh1570231 小时前
如何编写动态SQL存储过程_使用sp_executesql执行灵活查询
jvm·数据库·python
2401_824222691 小时前
SQL报表统计数据量巨大_分批统计策略
jvm·数据库·python
俺不要写代码1 小时前
数据库:DCL
数据库
X56611 小时前
mysql如何处理连接数过多报错_调整max_connections参数
jvm·数据库·python
学习3人组1 小时前
OEE(设备综合效率)的标准定义、公式、损失分类、以及在工位触屏/MES里怎么采集和统计
大数据·网络·数据库
张~颜1 小时前
PostgreSQL数据压缩技术
数据库·postgresql
m0_609160491 小时前
MongoDB中什么是Hashed Shard Key的哈希冲突_哈希函数的分布均匀性分析
jvm·数据库·python
小碗羊肉2 小时前
【MySQL | 第十一篇】InnoDB引擎
java·数据库·mysql