MySql的初学习 -- 第四章 -- 使用DQL运行简单的SQL


博客说明

文章内容输出来源:拉勾教育Java就业急训营

准备表

/*
表名:staff
表中字段:
id:编号,int
name:姓名,varchar
sex:性别,char
salary:工资,double
hire_date:入职时间,date
dept_name:部门名称,varchar
*/
CREATE TABLE staff(
id INT,
name VARCHAR(20),
sex CHAR(1),
salary DOUBLE,
hire_date DATE,
dept_name VARCHAR(20));

-- 准备数据
INSERT INTO staff VALUES(1,'张三','男',7200,'2020-02-04','教学部');
INSERT INTO staff  VALUES(2,'李四','男',3600,'2020-12-02','教学部');
INSERT INTO staff VALUES(3,'王精五','男',9000,'2020-08-08','教学部');
INSERT INTO staff VALUES(4,'赵兔六','女',5000,'2020-10-07','市场部');
INSERT INTO staff VALUES(5,'李精七','女',5000,'2020-03-14','市场部');
INSERT INTO staff VALUES(6,'王兔八','女',200,'2020-03-14','市场部');
INSERT INTO staff VALUES(7,'孙九','女',10000,'2020-10-07','财务部');
INSERT INTO staff VALUES(8,'赵十','女',3500,'2020-09-14','财务部');
INSERT INTO staff VALUES(9,'吴十一','男',20000,'2020-03-14',NULL);
INSERT INTO staff VALUES(10,'孙十二','男', 10,'2020-03-14',财务部);
INSERT INTO staff VALUES(11,'钟十三','女', 300,'2010-03-14',财务部);

使用SQL对表中的数据进行查询

注意事项:查询操作不会对数据库中的数据进行修改,仅用于查看

简单查询

-- 格式:SELECT 列名1,列名2... FROM 表名;
-- *表示所有的列
-- 查询staff表中的所有数据
SELECT * FROM staff; 

-- 查询所有数据,但只显示 id 和 name
SELECT id,name FROM staff;

别名查询

/*
格式:
SELECT 
列名1 AS '别名1' ,
列名2 AS '别名2' ...
FROM 表名
*/
-- 查询所有数据,然后给列名改为中文
SELECT 
id AS '编号',
name AS '姓名',
sex AS '性别',
salary AS '工资',
hire_date AS '入职时间',
dept_name  '部门名称'-- AS可以省略不写
FROM staff;

去重查询

-- 格式:SELECT DISTINCT 列名 FROM 表名 
-- 查询一共有几个部门
SELECT DISTINCT dept_name '部门名称' FROM staff;

算术查询

-- 格式:SELECT (列名 + 数值) FROM 表
-- 格式:SELECT (列名 - 数值) FROM 表
-- 格式:SELECT (列名 * 数值) FROM 表
-- 格式:SELECT (列名 / 数值) FROM 表
-- 将员工工资+10,-10,*10,/10,进行操作
select salary + 10 AS '工资' from staff;
select salary - 10 AS '工资' from staff;
select salary * 10 '工资' from staff;
select salary / 10 '工资' from staff;

条件表达式

比较运算符说明
>、<、<=、>=、=、<>、!=大于、小于、大于(小于)等于、不等于
BETWEEN …AND…显示在某一区间的值,例如: 2000-10000之间: Between 2000 and 10000
IN(集合)集合表示多个值,使用逗号分隔,例如: name in (张三,李四),in中的每个数据都会作为一次条件,只要满足条件就会显示
LIKE ‘%张%’模糊查询
IS NULL查询某一列为NULL的值, 注: 不能写 = NULL
逻辑运算符说明
And 、&&多个条件同时成立
Or、丨丨多个条件任一成立
Not不成立,取反。

条件查询

-- 格式:SELECT 列名 FROM 表名 WHERE 条件表达式
SELECT dept_name FROM staff WHERE sex = '男'
SELECT * FROM staff WHERE salary = 9000;

模糊查询

模糊查询通配符说明
%表示匹配任意多个字符串
_表示匹配 一个字符
-- 模糊查询
-- %通配符:匹配一个或者多个字符串
-- 格式1:张%   -----查询开头为 张
SELECT * FROM staff WHERE name = '张%';
-- 格式2:%张   -----查询结尾为 张
SELECT * FROM staff WHERE name = '%张';
-- 格式3:%张%  -----查询包含 张
SELECT * FROM staff WHERE name = '%张%';

-- _通配符:至多匹配一个字符串
-- 格式1:张_   -----查询第一个字为 张
SELECT * FROM staff WHERE name = '张_';
-- 格式2:_张   -----查询第二个字为 张
SELECT * FROM staff WHERE name = '_张';

练习

-- SQL形成三部曲:查哪张表、查哪些字段、查询条件

-- 查询员工姓名为吴十一的员工信息
-- 查询薪水价格为5000的员工信息
-- 查询薪水价格不是5000的所有员工信息
-- 查询薪水价格大于6000元的所有员工信息
-- 查询薪水价格在5000到10000之间所有员工信息
-- 查询薪水价格是3600或7200或者20000的所有员工信息
-- 查询含有'精'字的所有员工信息 
-- 查询以'孙'开头的所有员工信息 
-- 查询第二个字为'兔'的所有员工信息 
-- 查询没有部门的员工信息
-- 查询有部门的员工信息

-- 查询员工姓名为吴十一的员工信息
SELECT * FROM staff WHERE name = '吴十一';

-- 查询薪水价格为5000的员工信息
SELECT* FROM staff WHERE salary = 5000;

-- 查询薪水价格不是5000的所有员工信息
方法一:SELECT* FROM staff WHERE salary != 5000;
方法二:SELECT* FROM staff WHERE salary <> 5000;

-- 查询薪水价格大于6000元的所有员工信息
SELECT* FROM staff WHERE salary > 6000;

-- 查询薪水价格在5000到10000之间所有员工信息
-- && 和 AND 为同一个运算符,无差别,用哪个都可以
方法一:SELECT* FROM staff WHERE salary >= 5000 && salary <= 10000;
方法二:SELECT* FROM staff WHERE salary >= 5000 AND salary <= 10000;
方法三:SELECT* FROM staff WHERE salary BETWEEN 5000 AND 10000;

-- 查询薪水价格是3600或7200或者20000的所有员工信息
-- || 和 OR 为同一个运算符,无差别,用哪个都可以
方法一:SELECT* FROM staff WHERE salary = 3600||salary = 7200||salary=20000
方法二:SELECT* FROM staff WHERE salary = 3600 OR salary = 7200 ORr salary=20000
方法三:SELECT* FROM staff WHERE salary IN(3600,7200,20000)

-- 查询含有'精'字的所有员工信息 
SELECT * FROM staff  WHERE name = '%精%';

-- 查询以'孙'开头的所有员工信息 
SELECT * FROM staff WHERE NAME = '孙%';

-- 查询第二个字为'兔'的所有员工信息 
SELECT * FROM staff WHERE NAME = '_兔%';

-- 查询没有部门的员工信息
SELECT * FROM staff WHERE dept_name IS null;

-- 查询有部门的员工信息
SELECT * FROM staff WHERE dept_name IS NOT NULL;

排序查询

-- 格式:SELECT 字段名 FROM 表名 WHERE 字段 = 值 ORDER BY 字段名 ASC/DESC
-- ASC:升序
-- DESC:降序
SELECT * FROM staff WHERE salary > 6000 ORDER BY salary DESC; 

单列排序查询

-- 格式:SELECT * FROM 表名 ORDER BY 字段
-- 默认升序(ASC)排序
SELECT * FROM staff ORDER BY salary; 
-- 降序
SELECT * FROM staff ORDER BY salary DESC; 

多列排序查询

同时对多个字段进行排序, 如果第一个字段相同 就按照第二个字段进行排序,以此类推

-- 格式:SELECT * FROM 表名 ORDER BY 字段1,ORDER BY 字段2...
SELECT * FROM staff ORDER BY salary DESC,id DESC;

聚合函数

一列数据作为一个整体,进行 纵向 计算

聚合函数作用
count(字段)统计指定列不为NULL的记录行数
sum(字段)计算指定列的数值和
max(字段)计算指定列的最大值
min(字段)计算指定列的最小值
avg(字段)计算指定列的平均值
-- 格式1:SELECT 聚合函数(字段名) FROM 表名
-- 格式2:SELECT 聚合函数(字段名) FROM 表名 WHERE 条件表达式
SELECT MAX(salary) FROM staff;
SELECT SUM(salary) FROM staff WHERE id > 2;

聚合函数练习

-- 1 查询员工的总数
-- 2 查看员工总薪水、最高薪水、最小薪水、薪水的平均值 
-- 3 查询薪水大于4000员工的个数
-- 4 查询部门为'教学部'的所有员工的个数 
-- 5 查询部门为'市场部'所有员工的平均薪水

-- 1 查询员工的总数
SELECT count(*) FROM staff;

-- 2 查看员工总薪水、最高薪水、最小薪水、薪水的平均值 
SELECT 
SUM(salary) '总薪水',
Max(salary) '最高薪水',
min(salary) '最小薪水',
avg(salary) '平均薪水' 
from staff;

-- 3 查询薪水大于4000员工的个数
SELECT count(*) FROM staff where salary > 4000;

-- 4 查询部门为'教学部'的所有员工的个数 
select COUNT(*) from staff where dept_name ='教学部';

-- 5 查询部门为'市场部'所有员工的平均薪水
SELECT avg(salary) FROM staff WHERE dept_name ='市场部';

分组查询

分组的目的就是为了方便统计,所有一般分组会与聚合函数一起使用,单独进行分组是没有意义的

-- 格式:SELECT 分组字段/聚合函数 FROM 表名 GROUP BY 分组字段
SELECT sex,AVG(salary) FROM staff GROUP BY sex;

分组查询练习

-- 1.查询有几个部门
-- 2.查询每个部门的平均薪资
-- 3.查询每个部门的平均薪资, 部门名称不能为null

-- 1.查询有几个部门
SELECT 
dept_name '部门名称'
FROM staff GROUP BY dept_name;

-- 2.查询每个部门的平均薪资
SELECT 
dept_name '部门名称',
AVG(salary) '平均薪资' 
FROM staff GROUP BY dept_name;

-- 3.查询每个部门的平均薪资, 部门名称不能为null
SELECT 
dept_name '部门名称',
AVG(salary) '平均薪资'
FROM staff WHERE dept_name IS NOT NULL 
GROUP BY dept_name;

having关键字与where关键字的区别

-- having:在分组之后,再进行条件过滤使用
-- 格式:在后面接上即可

-- 查询平均薪资大于6000的部门
SELECT 
dept_name '部门名称',
AVG(salary) '平均薪资'
FROM staff WHERE dept_name IS NOT NULL 
GROUP BY dept_name 
having AVG(salary) > 6000;

having关键字与where关键字的区别

limit关键字

作用:使用limit去指定要查询数据的条数、行数

-- 格式:SELECT 字段 FROM 表名 LIMIT OFFSET, LENGTH;
-- OFFSET:起始行数,默认从0开始
-- LENGTH:返回的行数(要查询几条数据)
-- LIMIT OFFECT, LENGTH; 关键字可以接受一个 或者两个 为0 或者正整数的参数
-- LIMIT关键字可以进行分页操作
人话:SELECT * FROM staff LIMIT 从第几行开始显示 , 显示几条数据;
  详细用法参考下面limit关键字练习

limit关键字练习,熟悉使用limit进行分页操作

-- 查询staff表中的前5条数据
方法一:SELECT * FROM staff LIMIT 0,5;
方法二:SELECT * FROM staff LIMIT 5;--因为默认从0开始,所以可以考虑不写
-- 查询staff表中从第4条开始,查询6条
SELECT * FROM staff LIMIT 3,6;

-- 使用分页操作对staff中的数据进行分页,每页显示三行
SELECT * FROM staff LIMIT 0,3;
SELECT * FROM staff LIMIT 3,3;
SELECT * FROM staff LIMIt 6,3;

--分页公式: 起始行数 = (当前页面 - 1) * 每页显示行数
#第一页
SELECT * FROM staff LIMIT 0,3;--(1 - 1) * 3 = 0;
#第二页
SELECT * FROM staff LIMIT 3,3;--(2 - 1) * 3 = 3;
#第三页
SELECT * FROM staff LIMIt 6,3;--(3 - 1) * 3 = 6;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值