MySQL基础:DQL语言总结

数据库的核心语言就是SQL语言,SQL语言有四大组成部分:DDL(数据定义语言)、DML(数据操纵语言)、DQL(数据查询语言)和DCL(数据控制语言)。

DQL(Data Query Language)数据查询语言:主要用来查询数据库中表的记录。关键字:select

本文总结了DQL语句并附上DataGrip代码。

  • 基本查询
  • 条件查询(WHERE)
  • 聚合函数(count、max、min、avg、sum)
  • 分组查询(GROUP BY)
  • 排序查询(ORDER BY)
  • 分页查询(LIMIT)

一、基本查询

delete from emp;   #删除表所有信息
insert into emp(id, workno, name, gender, age, idcard, workaddress, entrydate)
values(1, '1', '张一', '女', 24, '123456789012345678', '北京', '2021-01-01'),
      (2, '2', '李二', '男', 18, '123456789012345670', '北京', '2022-01-01'),
      (3, '3', '王三', '男', 28, '123456789712345670', '上海', '2015-06-01'),
      (4, '4', '赵四', '女', 20, '213456789012345600', '北京', '2020-09-01'),
      (5, '5', '李五二', '男', 40, '123456789012345000', '天津', '2008-01-01'),
      (6, '6', '郑六', '男', 18, '123456789012340000', '江苏', '2023-09-01'),
      (7, '7', '王七一', '女', 38, '123456780012345670', '北京', '2005-07-01'),
      (8, '8', '李八', '女', 56, null, '北京', '2003-09-01');
      
-- 1.查询指定字段
select name,workno,age from emp;

-- 2.查询所有字段
select id, workno, name, gender, age, idcard, workaddress, entrydate from emp;

-- 3.查询所有员工的工作地址,起别名(as可省略)
select workaddress as '工作地址' from emp;
select workaddress '工作地址' from emp;

-- 4.查询公司员工上班地址(去除重复)
select distinct workaddress '工作地址' from emp;

二、条件查询

-- 1.查询年龄等于28的员工
select * from emp where age = 28;
-- 2.查询年龄小于25的员工
select * from emp where age < 25;
-- 3.查询年龄不等于28的员工(<>或!=)
select * from emp where age != 28;
select * from emp where age <> 28;

-- 4.查询没有身份证号的员工(is null)
select * from emp where idcard is null;
-- 5.查询有身份证号的员工(is not null)
select * from emp where idcard is not null;

-- 6.查询年龄在15岁到20岁之间的员工(&&或and或between..and..)
select * from emp where age >= 15 && age <= 20;
select * from emp where age >= 15 and age <= 20;
select * from emp where age between 15 and 20;  #between 最小 and 最大

-- 7.查询性别为女且年龄小于30岁的员工
select * from emp where gender='女' and age < 30;

-- 8.查询年龄等于18或20或40的员工(or或in(...))
select * from emp where age = 18 or age = 20 or age = 40;
select * from emp where age in(18,20,40);

-- 9.查询姓名为三个字的员工(like '_')
select * from emp where name like '___';

-- 10.查询身份证号最后一位是8的员工(like '%')
select * from emp where idcard like '%8';
select * from emp where idcard like '_________________8';

三、聚合函数

-- 1.统计该企业员工数量
select count(*) from emp;   #结果是8,首选用*
select count(idcard) from emp;   #结果是7,null不计入,易错

-- 2.统计所有员工的平均年龄
select avg(age) from emp;

-- 3.统计所有员工的最大年龄
select max(age) from emp;

-- 4.统计所有员工的最小年龄
select min(age) from emp;

-- 5.统计北京地区的员工年龄之和
select sum(age) from emp where workaddress = '北京';

#null不计入所有聚合函数的计算

四、分组查询

-- where是分组之前过滤,不满足where不参与分组;而having是分组之后过滤。
-- where不能判断聚合函数;而having可以判断聚合函数。

-- 1.根据员工性别分组,统计男性员工和女性员工的数量
select gender, count(*) from emp group by gender;

-- 2.根据性别分组,统计男性员工和女性员工的平均年龄
select gender, avg(age) from emp group by gender;

-- 3.查询年龄小于45的员工,并根据工作地址分组,获取员工数量大于等于3的工作地址
select workaddress, count(*) from emp where age < 45 group by workaddress having count(*)>=3;

#执行顺序:where > 聚合函数 > having
#一般展示分组后的字段和聚合函数,其他字段无意义

五、排序查询

-- 1.根据年龄对公司员工进行升序、降序排序
select * from emp order by age;   #升序(默认)
select * from emp order by age asc;   #升序
select * from emp order by age desc;  #降序

-- 2.根据年龄对公司员工升序排序,年龄相同,再按照入职时间降序排序
select * from emp order by age asc, entrydate desc;

六、分页查询

SELECT 字段列表 FROM 表名 LIMIT 起始索引,查询记录数; 
#分页查询在不同的数据库有不同的实现,MySQL中是LIMIT
-- 1.查询第1页员工数据,每页5条记录 --> 起始索引从0开始
select * from emp limit 0,5;
select * from emp limit 5;     #如果查询的是第一页数据,起始索引0可以省略

-- 2.查询第2页员工数据,每页5条记录 --> 起始索引=(页码-1)*每页记录数
select * from emp limit 5,5;

练习:查询性别为女且年龄在20-40岁的前2个员工信息,按年龄升序排序,年龄相同的按入职时间降序排序。

select * from emp where gender = '女' and age between 20 and 40 order by age asc, entrydate asc limit 2;
#前2个用limit 2实现,要放在order by后面
  • 12
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值