标签:条件 one and 需要 控制 别名 模糊查询 获取 语法错误
九、DQL(重点)
l 数据库在执行dql的时候,不会对数据进行改动,仅仅是看。只要把服务其中的数据获取返回给客户端
l 查询得到的结果也是一张表
9.1数据的准备
9.2基础查询
##(1.1)查询所有列 *表示所有列
##eg:查询所有员工的信息
select * from emp;
##(1.2)查询指定列:
select empno,ename,deptno from emp;
9.3条件查寻where
关系运算符:=、!=、<>、>=、<=、
区间:between A and B -》 [A,B]
And :并且,和。
Or:或者
Is null:空
Not:否,非
Is not null:非空
In:在什么里面
##(2.1)查询性别女,并且 年龄65的记录
select * from stu where gender=‘female‘ and age = 65;
##(2.2)查询学号是S_1001,或者名字为lisi的记录。
select * from stu where sid = ‘S_1001‘ or age = "65";
##(2.3)查询学号是S_1001,S_1002,S_1003的记录
写法一:select * from stu where sid = ‘S_1001‘ or sid = ‘S_1002‘ or sid = ‘S_1003‘;
写法二:select * from stu where sid in (‘S_1001‘, ‘S_1002‘, ‘S_1003‘);
##(2.3)查询学号不是S_1001,S_1001,S_1002,S_1003的记录
select * from stu where sid not in (‘S_1001‘, ‘S_1002‘, ‘S_1003‘);
##(2.4)查询年龄为null的记录
select * from stu where sname is not null;
##(2.5)查询年龄为20-40之间的
方式一:select * from stu where age >=20 and age <=40;
方式二:select * from stu where age between 20 and <= 40;错误
##(2.6)查询性别:非男 学生记录
select * from stu where gender != ‘male‘;
select * from stu where gender <> ‘male‘;
select * from stu where not gender = ‘male‘;
##(2.7)查询名字不为空的学生信息
select * from stu where sname is not null;
9.4模糊查询
当想查询学生姓名中包含字符a,就需要使用到模糊查询,模糊查询的话使用关键字是 :like (像)
(2)通配符
__:任意一个字符
张__:张三,张三丰
张__:张三,张三丰
%:表示0或者多个字符串
张%
##查询名字有五个字母构成的 学生记录
select * from stu where sname like ‘______‘;
##查询名字有五个字母构成的,并且第五个字符是I 学生记录
select * from stu where sname like ‘______i‘;
##查询名字以‘z’开头的学生记录
select * from stu where sname like ‘z%‘;
##查询名字中第二个字符是‘i’的学生记录
select * from stu where sname like ‘_i%‘;
##查询名字中包含a字符的学生记录
select * from stu where sname like ‘%a%‘;
9.5字段控制查询
##9.5.1去除重复数据
##(1)查询员工的所有部门
select distinct deptno from emp;
##(2)查询员工的薪资(工资+奖金)
##问题:任何数据+ null - >null
##1800 + null ->1800
ifnull(A,B);如果A是null,使用B的值,如果A不是null,就是使用A
select
sal,comm,sal+comm
from
emp;
别名:给这个列换一个新名字
##9.5.3别名
##9.5.3别名
select
sal,comm,sal+ifnull(comm,0) as money
from
emp;
##as 关键字可以省略
select
ename name, sal,comm,sal + ifnull(comm,0) as money
from
emp;
##排序order by
##升序
##(1)查询所有的学生信息,根据年龄进行升序排序
select * from stu order by age asc;
##降序
##(2)查询所有的学生信息,根据年龄进行降序排列
select * from stu order by age desc;
##(2)查询所有的学生信息,根据名字进行升序排序
select * from stu order by sname asc;
##(3)查询所有员工信息,根据工资进行排序,如果工资相同按照员工号升序
select * from emp order by sal desc,empno asc;
9.6聚合函数
MySQL系统提供了很多函数
Count:统计个数,次数,null不统计
Max:最大值
Min:最小值
Sum:求和
Avg:平均值
Round:四舍五入
###count函数
##(1)查询emp表中记录数
count(*):不会忽略null的值
select count(*) from emp;
##(2)统计emp表中,有提成的人数
##count(具体字段),null的话会被忽略
select count(comm) from emp;
##(3)工资大于2500的员工的人数
select count(*) from emp where sal > 2500;
##(4)薪资(工资+奖金)大于2500的员工的人数
select count(*) from emp where (sal + ifnull(comm,0) ) > 2500;
##(5)查询有提成的人数、由上一级领导的人数
select count(comm),coun(mgr) from emp;
##sum,avg,round
##(1)查询所有员工工资总和
select sum(sal) from emp;
##(2)查询所有员工工资总和,提成总和
select sum(sal) ,sum(comm) from emp;
##(3)查询所有员工工资总和,提成总和,薪资
select sum(sal) ,sum(comm),sum(sal + ifnull(comm,0) money from emp;语法错误
##(3)计算员工的平均工资
select avg(sal) ,avg(comm) from emp;
##(4)平均工资,保留两位小数
select round(avg(sal),2) ,avg(comm) from emp;
##max最大值和min最小值
##查询员工表中,工资最高的,最低的
select max(sal) max_sal,min(sal) min_sal from emp;
##分段函数 case
##员工表中,根据薪资不一样,给不一样的评论
>4000,NB666
>3000,NB66
>2000,NB6
<2000,ZZ
select
sal,
case
when sal >4000 then "NB666"
when sal >3000 then "NB66"
when sal >2000 then "NB6"
else "zz"
end as pj
from
emp;
Left:(A,4)从左边开始截取4个字符
Right:(A,4)从右开始截取4个字符
##截取
1987-04-19 -》1987
select right(‘1987-04-19‘,4)
###(1)获取员工的入职年份
select ename,hiredate,left(hiredate,4) from emp;
###(2)获取员工的入职工龄
select ename,hiredate,2021 - left(hiredate,4) from emp;
标签:条件 one and 需要 控制 别名 模糊查询 获取 语法错误
原文地址:https://www.cnblogs.com/1799923076z/p/14675432.html