问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

SQL语法——DQL (附操作讲解)

创作时间:
作者:
@小白创作中心

SQL语法——DQL (附操作讲解)

引用
CSDN
1.
https://blog.csdn.net/Estrella_1/article/details/136782298

本文是一篇详细的SQL DQL(数据查询语言)教程,从基本查询到复杂查询,通过大量实例代码帮助读者掌握SQL查询的核心技巧。无论是SQL初学者还是希望提升查询能力的开发者,都能从本文中获得实用的知识和经验。

一、SQL通用语法

  • SQL语句可以单行或多行书写,以分号结尾。
  • 若语句过长,可以使用空格或缩进来增强可读性,且空格和缩进的个数没有限制。
  • SQL语句不区分大小写,关键字建议大写。
  • 注释:
  1. -- 单行注释
  2. 单行注释

  3. /* */ 多行注释

二、SQL语句的分类

  • DDL(Data Definition Language):数据定义语言,用来定义数据库对象(数据库,表,字段)
  • DML(Data Manipulation Language):数据操作语言,用来对数据库表中的数据进行增删改
  • DQL(Data Query Language):数据查询语言,用来查询数据库中表的记录
  • DCL(Data Control Language):数据控制语言,用来创建数据库用户、控制数据库的访问权限、控制对数据的增删改查操作

三、DQL语句

1、基本查询

(1)查询多个字段:SELECT 字段1,字段2,字段3...... FROM 表名;
(2)查询所有字段:SELECT * FROM 表名;
(3)设置别名:SELECT 字段1 [AS 别名1],字段2 [AS 别名2]......FROM 表名;
(4)去除重复记录:SELECT DISTINCT 字段列表 FROM 表名;

示例:先创建一张员工表:
再插入数据:
查询一下这张表看看数据插入没有:

做好以上准备,接下来演示基本查询的语法,查询指定字段 name,workno,age:

查询所有字段数据:

有没有发现这样子写很繁琐,一点也不方便?其实我们可以用 SELECT * FROM 表名; 语句来查询全部字段,会发现效果一样

查询所有员工的工作地址,起别名

起别名为工作地址:(这条语句中as是可以省略的)

查询员工的上班地址(不要重复)

因为前面插入的数据全部是北京,所有这里只返回北京一个地点。

2、条件查询(WHERE)

(1)SELECT 字段列表 FROM 表名 WHERE 条件列表;

示例:查询年龄等于 18 的员工

查询年龄小于 20的员工信息

查询没有身份证号的员工信息:select * from emp where idcard is null;

查询有身份证号的员工信息:select * from emp where idcard is not null;

查询年龄在15岁(包含)到20岁(包含)之间的员工信息:(3种)

查询性别为女且年龄小于25岁的员工信息:

查询年龄等于18或20或40的员工信息:

查询姓名为两个字的员工信息:select * from emp where name like '__';

查询身份证号最后位为X的员工信息:select * from emp where idcard like '%X';

select * from emp where idcard like '_________________X'; (前面一共17个下划线)

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

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

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

注意:null值不参与所有聚合函数运算

常见的聚合函数:

  • count——统计数量
  • max——最大值
  • min——最小值
  • avg——平均值
  • sum——求和

示例:

统计该企业员工数量

select count(*) from emp; //统计表的总数量

select count(id) from emp; //统计id字段的总数量

统计该企业员工的平均年龄 select avg(age) from emp;

统计该企业员工的最大年龄 select max(age) from emp;

统计该企业员工的最小年龄 select min(age) from emp;

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

4、分组查询(GROUP BY)

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

where 和 having 的区别:

  • 执行时机不同:where是在分组前对数据进行筛选,不符合条件的数据不进行后续的分组,而having是对筛选过后,已经符合条件的数据进行过滤。
  • 判断条件不同:where不能对聚合函数进行判断,而having可以。

执行顺序:where > 聚合函数 > having

分组后查询的字段一般为聚合函数和分组字段,查询其他字段无意义。

示例:根据性别分组,统计男性和女性的数量

根据性别分组,统计男性和女性发平均年龄

查询年龄小于20的员工,并根据工作地址分组,获取员工数量大于等于3的工作地址

5、排序查询(ORDER BY)

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

  • ASC 升序(默认值)
  • DESC 降序

示例:根据年龄对公司的员工进行升序排序

根据id序号对员工进行降序排序

根据年龄对员工进行升序排序,年龄相同,再按照id序号进行降序排序

6、分页查询(LIMIT)

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

(limit n,m ——可以理解为从第n条数据后面开始算起,展示m条数据)

注意:

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

示例:查询第一页数据,每页展示5条记录:

查询第二页员工数据,每页展示3条记录

四、总结

1、编写顺序

2、执行顺序

五、案例演示

要求:

1.查询年龄为20,21,22,23岁的女性员工信息。

2.查询性别为 男 ,并且年龄在 20-40 岁(含)以内的姓名为三个字的员工。

3.统计员工表中,年龄小于60岁的,男性员工和女性员工的人数。

4.查询所有年龄小于35岁员工的姓名和年龄,并对查询结果按年龄升序排序,如果年龄相同按入职时间降序排序。

5.查询性别为男,且年龄在20-40 岁(含)以内的前2个员工信息,对查询的结果按年龄升序排序,年龄相同按入职时间升序排序。

先查询一下表格信息

1.查询年龄为20,21,22,23岁的女性员工信息:select * from emp where gender='女' and age in(20,21,22,23);

2.查询性别为男 ,并且年龄在 20-40 岁(含)以内的姓名为三个字的员工:

这里查询结构为空,因为员工名字都只占用俩个字,我们可以试试姓名为俩个字的员工:

3.统计员工表中,年龄小于60岁的,男性员工和女性员工的人数:

4.查询所有年龄小于35岁员工的姓名和年龄,并对查询结果按年龄升序排序,如果年龄相同按入职时间降序排序:

5.查询性别为男,且年龄在20-40 岁(含)以内的前2个员工信息,对查询的结果按年龄升序排序,年龄相同按入职时间升序排序:

这里查询前2个员工的信息,其实可以看成分页查询,查询第一页信息,查询记录数为2。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号