【数据库】DQL操作

DQL—— 查询 表中的数据:

语法

SELECT
selection_list /* 要查询的列名称* /
FROM
table_list /* 要查询的表名称* /
WHERE
condition /* 行条件 * /
GROUP BY
grouping_columns /* 对结果分组* /
HAVING
condition /* 分组后的行条件* /
ORDER BY
sorting_columns /* 对结果排序* /
LIMIT
offset_start, row_count /* 控制查询结果数量* /

条件查询:where 子句

=、!=、<>(不等于)、<、<=、>、>=;
BETWEEN…AND; 在什么范围之间
IN(set);
IS NULL;为空
IS NOT NULL 不为空
AND; 并且
OR; 或者
NOT;非


模糊查询:like

通配符:

'_':匹配单个任意字符
'%':匹配任意数量(包括0个)任意字符

例如:查询第二个字符是m的

select * from student where sanme like '_m%';

字段控制:

  • 修改字段的别名:AS (可以省略)

例如:

  1. 给字段起别名:
select sname as 姓名, sage 年龄 from student;
  1. 给运算字段起别名:
select sname as 姓名, (工资+奖金) as 总收入 from student;
  1. 给表起别名:给每一张表起一个别名。简化书写
select stu.sname, stu.sage from student as stu;

字段运算:

  • null参与的运算,结果都为null

例如:
工资 是100 奖金是null 我们让这两个字段运算 那结果就为null

  • ifnull(字段名称,如果是null的替换值)
    (注意:ifnull 是mysql的方言)

例如:
所有如果奖金字段为null 一般我们把奖金替换为0

select sname,(工资+ifnull(奖金,0)) as 总收入from student;

去除重复记录:

语法

  • DISTINCT

例如:
我查询工资是3000的 出现了多条工资为3000 的记录
那我只想展示一条3000的记录 所以可以用 distinct 去除重复记录:

select distinct 工资  from student;

排序:

语法

order by 排列方式

排列方式 取值

  1. ASC 默认值
  2. DESC 降序排列

例如:

  1. 按工资从小到大排
select * from student order by 工资 asc;
  1. 按工资从大到小排
select * from student order by 工资 desc 
  1. 如果出现多条工资一样的 那我们可以指定第二排序条件
select * from student order by 工资 desc,奖金desc;

聚合函数:

定义

聚合函数是用来做纵向运算的函数

相关函数

  • COUNT():统计指定列不为NULL的记录行数;

例如:
统计个数的 比如我统计有多少个学生

select count(sid) from student;  
# 或者传个 星号(*)
select count(*) from student;
  • MAX():计算指定列的最大值,如果指定列是字符串类型,那么使用字符串排序运算;

例如:
查询工资最大值

select max(工资) as 最高工资 from student;
  • MIN():计算指定列的最小值,如果指定列是字符串类型,那么使用字符串排序运算;

例如:
查询 最少工资

select min(工资) as 最小工资 from student;
  • SUM():计算指定列的数值和,如果指 定列类型不是数值类型,那么计算结果为0;

例如:
计算总工资

select sun(工资) as 总支出 from student;
  • AVG():计算指定列的平均值,如果指定列类型不是数值类型,那么计算结果为0;

例如:
计算平均 工资

select avg(工资) as 平均工资 from student;

分组查询:

语法

group by:一般配合聚合函数使用,查出的数据才有意义

查询的字段

  1. 分组字段本身
  2. 聚合函数

例如:

  1. 我按部分编号分组 比如有三个部门 然后我求每个部门的平均工资
select 部门编号,AVG(工资) from student group by 部门编号;
  1. 每个部门的部门编号 已经每个部门工资大于1500的人数
select 部门编号, count(*) from student where 工资>1500 group by 部门编号;

在这里,本人讲解下 where和having的区别
where和having的区别

  • where:
    分组之前对条件进行限定
    不满足条件,就不会参与分组
  • having:
    分组之后,对结果集的筛选

例如;

  1. 查询 各个部门平均工资 大于2000 的部门
select 部门编号,avg(工资) from student group by 部门编号 having avg(工资)>2000;
  1. 查询 各个部门 员工工资大于1500 的平均工资 并且平均工资 大于2000的部门

上面这句话怎么理解呢?
首先查询各个部门,那肯定要按部门编号分组
分组前的条件限定是: 员工工资大于1500的才参与分组
计算出平均工资,然后对结果再进行筛选
筛选出 平均工资 大于2000的部门

select 部门编号,avg(工资) from student group by 部门编号 where 工资>1500 having  avg(工资)>2000;

分页查询:

语法

limit 开始的记录索引, 每一页显示的条数
(开始的记录索引 = (页码-1)*每一页显示的条数)

例如:
15条记录,分3页查询:
select * from student limit 0,5 ; 这是第一页 5 条记录
select * from student limit 5,5 ; 这是第二页 5条记录
select * from student limit 10,5 这是第三页 5条记录


那么,本篇博文的知识点在这里就讲解完毕了。
(请观看本人博文 —— 《【数据库】SQL语句》)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容