最全的SQL入门基础知识总结(3: dql操作单表)

本文主要总结了SQL中DQL操作单表的排序知识,包括基本的SELECT语句结构,通过WHERE子句筛选条件,以及使用ORDER BY进行升序或降序排序。
摘要由CSDN通过智能技术生成
1.  创建数据库 , 复制表
1) 创建一个新的数据库 db2
CREATE DATABASE db2 CHARACTER SET utf8;
2) db1 数据库中的 emp 表 复制到当前 db2 数据库

 2 排序

语法结构:SELECT 字段名 FROM 表名 [WHERE 字段 = ] ORDER BY 字段名 [ASC / DESC]

ASC 表示升序排序 ( 默认 )
DESC 表示降序排序
1) 单列排序
需求 1:
使用 salary 字段 , emp 表数据进行排序 ( 升序 / 降序 )
-- 默认升序排序 ASC
SELECT * FROM emp ORDER BY salary;
-- 降序排序
SELECT * FROM emp ORDER BY salary DESC ;
2) 组合排序
需求 2:
在薪水排序的基础上 , 再使用 id 进行排序 , 如果薪水相同就以 id 做降序排序
-- 组合排序
SELECT * FROM emp ORDER BY salary DESC , eid DESC ;
3 聚合函数
之前我们做的查询都是横向查询,它们都是根据条件一行一行的进行判断,而使用聚合函数查询是纵向查询,它是对某一列的值进行计算,然后返回一个单一的值( 另外聚合函数会忽略 null 空值。 )
语法结构
SELECT 聚合函数 ( 字段名 ) FROM 表名 ;
count( 字段 ) .max(字段).min(字段).sum(字段). avg( 字段 )
需求1
#1 查询员工的总数
#2 查看员工总薪水、最高薪水、最小薪水、薪水的平均值
#3 查询薪水大于 4000 员工的个数
#4 查询部门为 ' 教学部 ' 的所有员工的个数
#5 查询部门为 ' 市场部 ' 所有员工的平均薪水
sql实现
#1 查询员工的总数
-- 统计表中的记录条数 使用 count()
SELECT COUNT (eid) FROM emp; -- 使用某一个字段
SELECT COUNT (*) FROM emp; -- 使用 *
SELECT COUNT ( 1 ) FROM emp; -- 使用 1, * 效果一样
-- 下面这条 SQL 得到的总条数不准确 , 因为 count 函数忽略了空值
-- 所以使用时注意不要使用带有 null 的列进行统计
SELECT COUNT (dept_name) FROM emp;
#2 查看员工总薪水、最高薪水、最小薪水、薪水的平均值
-- sum 函数求和 , max 函数求最大 , min 函数求最小 , avg 函数求平均值
SELECT
SUM (salary) AS ' 总薪水 ' ,
MAX (salary) AS ' 最高薪水 ' ,
MIN (salary) AS ' 最低薪水 ' ,
AVG (salary) AS ' 平均薪水 '
FROM emp;
#3 查询薪水大于 4000 员工的个数
SELECT COUNT (*) FROM emp WHERE salary > 4000 ;
#4 查询部门为 ' 教学部 ' 的所有员工的个数
SELECT COUNT (*) FROM emp WHERE dept_name = ' 教学部 ' ;
#5 查询部门为 ' 市场部 ' 所有员工的平均薪水
SELECT
AVG (salary) AS ' 市场部平均薪资 '
FROM emp
WHERE dept_name = ' 市场部 ' ;
4 分组
分组查询指的是使用 GROUP BY 语句 , 对查询的信息进行分组 , 相同数据作为一组
注意:分组通常和聚合函数一起使用,单独分组没有意义
语法格式:SELECT 分组字段 / 聚合函数 FROM 表名 GROUP BY 分组字段 [ HAVING 条件 ];
需求1 : 通过性别字段 进行分组 , 求各组的平均薪资
SELECT sex, AVG (salary) FROM emp GROUP BY sex;
需求2:
#1. 查询所有部门信息
#2. 查询每个部门的平均薪资
#3. 查询每个部门的平均薪资 , 部门名称不能为 null
sql实现
#1. 查询有几个部门
SELECT dept_name AS ' 部门名称 ' FROM emp GROUP BY dept_name;
#2. 查询每个部门的平均薪资
SELECT
dept_name AS ' 部门名称 ' ,
AVG (salary) AS ' 平均薪资 '
FROM emp GROUP BY dept_name;
#3. 查询每个部门的平均薪资 , 部门名称不能为 null
SELECT
dept_name AS ' 部门名称 ' ,
AVG (salary) AS ' 平均薪资 '
FROM emp WHERE dept_name IS NOT NULL GROUP BY dept_name;
需求3
# 查询平均薪资大于 6000 的部门 .
分析 :
1) 需要在分组后 , 对数据进行过滤 , 使用 关键字 having
2) 分组操作中的 having 子语句,是用于在分组后对数据进行过滤的,作用类似于 where 条件。
sql实现
# 查询平均薪资大于 6000 的部门
-- 需要在分组后再次进行过滤 , 使用 having
SELECT
dept_name ,
AVG (salary)
FROM emp WHERE dept_name IS NOT NULL GROUP BY dept_name HAVING AVG (salary) >
6000 ;
5 limit 关键字
说明:limit 是限制的意思 , 用于 限制返回的查询结果的行数 ( 可以通过 limit 指定查询多少行数据 )
limit 语法是 MySql 的方言 , 用来完成分页
语法结构
SELECT 字段 1, 字段 2... FROM 表名 LIMIT offset , length;
参数说明
limit offset , length; 关键字可以接受一个 或者两个 为0 或者正整数的参数
offset 起始行数, 0开始记数, 如果省略 则默认为 0.
length 返回的行数
需求 1:
# 查询 emp 表中的前 5 条数据
# 查询 emp 表中 从第 4 条开始 , 查询 6
sql实现
# 查询 emp 表中的前 5 条数据
-- 参数 1 起始值 , 默认是 0 , 参数 2 要查询的条数
SELECT * FROM emp LIMIT 5 ;
SELECT * FROM emp LIMIT 0 , 5 ;
# 查询 emp 表中 从第 4 条开始 , 查询 6
-- 起始值默认是从 0 开始的 .
SELECT * FROM emp LIMIT 3 , 6 ;
需求 2: 分页操作 每页显示 3 条数据
sql实现
-- 分页操作 每页显示 3 条数据
SELECT * FROM emp LIMIT 0 , 3 ; -- 1
SELECT * FROM emp LIMIT 3 , 3 ; -- 2 2-1=1 1*3=3
SELECT * FROM emp LIMIT 6 , 3 ; -- 第三页
-- 分页公式 起始索引 = ( 当前页 - 1) * 每页条数
-- limit MySql 中的方言
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值