码迷,mamicode.com
首页 > 其他好文 > 详细

九、DQL(重点)

时间:2021-04-20 15:47:03      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:条件   one   and   需要   控制   别名   模糊查询   获取   语法错误   

九、DQL(重点)

l  数据库在执行dql的时候,不会对数据进行改动,仅仅是看。只要把服务其中的数据获取返回给客户端

查询得到的结果也是一张表

9.1数据的准备

9.2基础查询

9.2.1查询所有列

##(1.1)查询所有列 *表示所有列

##eg:查询所有员工的信息

select * from emp;

 

9.2.2查询指定列

##(1.2)查询指定列:

select empno,ename,deptno from emp;

 

9.3条件查寻where

9.3.1常见的运算符

关系运算符:=、!=、<>、>=、<=、

区间:between A and B -》 [A,B]

And :并且,和。

Or:或者

Is null:空

Not:否,非

Is not null:非空

In:在什么里面

9.3.2或or、并且and

 

##(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";

 

 

9.3.2在什么里面in

 

 

9.3.3是否为空 is(not)null

##(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;

 

9.3.4区间between

##(2.5)查询年龄为20-40之间的

方式一:select * from stu where age >=20 and age <=40;

方式二:select * from stu where age between 20 and  <= 40;错误

 

9.3.5非not

##(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模糊查询

9.4.1介绍

当想查询学生姓名中包含字符a,就需要使用到模糊查询,模糊查询的话使用关键字是  :like (像)

(2)通配符

__:任意一个字符

张__:张三,张三丰

张__:张三,张三丰

%:表示0或者多个字符串

张%

9.4.2通配符:___

##查询名字有五个字母构成的 学生记录

select * from stu where sname like ‘______‘;

 

 

##查询名字有五个字母构成的,并且第五个字符是I 学生记录

select * from stu where sname like ‘______i‘;

 

9.4.3通配符:%

 

##查询名字以‘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去除重复数据(distinct)

##9.5.1去除重复数据

 

##(1)查询员工的所有部门

select distinct deptno from emp;

9.5.2  ifnull处理

##(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别名as

别名:给这个列换一个新名字

##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;

9.5.4排序 order by asc/desc

##排序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:四舍五入

9.6.1count函数

###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;

9.6.2sum,avg,round

##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;

9.6.3max和min

##max最大值和min最小值

##查询员工表中,工资最高的,最低的

select max(sal) max_sal,min(sal) min_sal from emp;

9.6.4分段函数case

##分段函数 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;

9.6.5字符串截取

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;

九、DQL(重点)

标签:条件   one   and   需要   控制   别名   模糊查询   获取   语法错误   

原文地址:https://www.cnblogs.com/1799923076z/p/14675432.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!