✅作者简介:大家好我是@每天都要敲代码,一位材料转码农的选手,希望一起努力,一起进步!
📃个人主页:@每天都要敲代码的个人主页🔥系列专栏:MySQL专栏
💬推荐一款模拟面试、刷题神器,从基础到大厂面试题👉点击跳转刷题网站进行注册学习
一:简单的查询(DQL)
语法格式:
select 字段名1,字段名2,字段名3,.... from 表名;
注意:
(1)任何一条sql语句以 “;” 结尾
(2)sql语句不区分大小写
1. 查询一个字段
例如:查询员工的姓名
select ename from emp;
Select语句后面跟的是字段名称,select是关键字,select和字段名称之间采用空格隔开,from表示将要查询的表,它和字段之间采用空格隔开
2. 查询多个字段
例如:查询员工的编号和姓名
select empno, ename from emp;
查询多个字段,select中的字段采用逗号间隔即可,最后一个字段,也就是在from前面的字段不能使用逗号了。
3. 查询全部字段
例如:查询当前数据库中,emp表中的所有字段;在select语句中可以使用运算符!
select * from emp;
采用select * from emp,虽然简单,但是*号不是很明确,建议查询全部字段将相关字段写到select语句的后面;在以后java连接数据库的时候,是需要在java程序中编写SQL语句的这个时候编写的SQL语句不建议使用select * 这种形式,建议写明字段,这样可读性强!
4. 计算员工的年薪
例如:列出员工的编号,姓名和年薪
select empno,ename,sal*12 from emp;
sal*12看着很不舒服,我们可以用as给查询结果的列重命名,as可省略
5. 将查询出来的字段显示为中文
采用as关键字重命名表字段,并且这里的as 是可以省略的!
注意:字符串必须添加单引号 或者 双引号
标准sql语句中要求字符串使用单引号括起来;虽然mysql支持双引号,尽量别用!
select empno as '员工编号',ename as '员工姓名',sal*12 as '年薪'from emp;
# 写成双引号的方式,只能在MySQL中运行,不通用;建议写成单引号的方式
select empno "员工编号", ename "员工姓名", sal*12 "年薪" from emp;
二:条件查询
条件查询需要用到where语句,where必须放到from语句表的后面
语法格式:
select
字段,字段...
from
表名
where
条件;执行顺序:先from,然后where,最后select
支持如下运算符:
1. = 操作符
(1)查询薪水为5000的员工
select empno, ename, sal from emp where sal=5000;
(2)查询job为MANAGER的员工
注意:manager字符串,要用单引号或者双引号括起来!
select empno, ename from emp where job='manager';
2. <> != 操作符
(1)查询薪水不等于5000的员工
注意:对于数值也可以采用单引号或者双引号引起来的,写成'5000'或者“5000”都是可以的,但是不建议这样写!
select empno, ename, sal from emp where sal <> 5000;
select empno, ename, sal from emp where sal != 5000;
(2)查询工作岗位不等于MANAGER的员工
select empno, ename, sal from emp where job<>'manager';
3. between … and …操作符
between and在使用的时候必须左小右大。
between and除了可以使用在数字方面(左闭右闭)之外,还可以使用在字符串方面(左闭右开)。
(1)查询薪水为1600到3000的员工
第一种方法:使用between...and...
select empno, ename, sal from emp where sal between 1600 and 3000;
between … and …,它是包含最大值和最小值的;就等价于>= and <=
第二种方式:使用>= and <=
select empno, ename, sal from emp where sal >=1600 and sal<=3000;
(2)查看员工首字母是A到C开头的名字
select ename from emp where ename between 'A' and 'C';
4. is null
null为空,但不是空串,为null可以设置这个字段不填值,空不是一个值,不能用等号衡量。如果查询为null的字段,采用is null;不能采用 =null !
(1)查询津贴为空null的员工
(1)首先先使用select * from emp; 查询到所有的comm信息,发现有很多是NULL
(2)如果直接只用 =null 是无法查询出符合条件的数据
(3)应该采用** is null **作为查询条件
select * from emp where comm is null;
select * from emp where comm is not null;
(2)找出那些员工没有津贴:这就包括为null的和0的
select * from emp where comm is null or comm=0;
5. and
and表示并且的含义,表示所有的条件必须满足
例如:查询工作岗位为MANAGER,薪水大于2500的员工
select * from emp where job='manager' and sal >= 2500;
6. or
or,只要满足条件即可,相当于包含;满足条件之一即可!
例如:查询出job为manager或者job为salesman的员工
select * from emp where job='manager' or job = 'salesman';
7. and 和 or 联合使用
找出薪资大于1000的并且部门编号是20或30部门的员工。
select ename,sal,deptno from emp where sal > 1000 and (deptno = 20 or deptno = 30);
-- and优先级比or高,要想让or先执行,必须加小括号
8. in
in表示包含的意思,完全可以采用or来表示,采用in会更简洁一些
(1)查询出job为manager或者job为salesman的员工
使用or:select * from emp where job='manager' or job = 'salesman'; 使用in是:
select * from emp where job in ('manager','salesman');
(2)查询出薪水包含1600和薪水包含3000的员工
select * from emp where sal in(1600,3000);
9. not
(1)查询出薪水不包含1600和薪水不包含3000的员工
第一种写法:使用不等<>
select * from emp where sal<>1600 and sal <>3000;
第二种写法: 使用等于= 和 not 联合使用
select * from emp where not(sal=1600 or sal=3000);
第三种写法:使用not in
select * from emp where sal not in(1600,3000);
(2)查询出津贴不为null的所有员工
select * from emp where comm is not null;
10. like
(1)Like可以实现模糊查询,like支持%和下划线匹配
(2)Like中%和下划线的差别?
%匹配任意字符出现的个数 下划线只匹配一个字符
(3)Like 中的表达式必须放到单引号中或者双引号中
(1)查询姓名以M开头所有的员工
select * from emp where ename like 'M%';
(2)查询姓名以N结尾的所有的员工
select * from emp where ename like '%N';
(3)查询姓名中包含O的所有的员工
select * from emp where ename like '%O%';
(4)查询姓名中第二个字符为A的所有员工
select * from emp where ename like '_A%';
(5)补充:找出名字中有下划线_的;利用转义字符!
select * from emp where ename like '%\_%';
三:排序查询
1 .单一字段排序
排序采用order by子句,order by后面跟上排序字段,排序字段可以放多个,多个采用逗号间隔,order by默认采用升序,如果存在where子句那么order by必须放到where语句的后面
(1)按照薪水由小到大排序
select * from emp order by sal;
(2)先取得job为MANAGER的员工,再按照薪水由小到大排序
select * from emp where job='manager' order by sal;
(3)按照多个字段排序,如:首先按照job排序,再按照sal排序
select * from emp order by job,sal;
2. 手动指定排序顺序
(1)手动指定按照薪水由小到大排序:asc;默认也是从小到大的!
select * from emp order by sal asc;
(2)手动指定按照薪水由大到小排序:desc
select * from emp order by sal desc;
3. 多个字段排序
(1)按照job和薪水倒序
select * from emp order by job desc,sal desc;
(2)按照工资的降序排列,当工资相同的时候再按照名字的升序排列
注意:****越靠前的字段越能起到主导作用,只有当前面的字段无法完成排序的时候,才会启用后面的字段
select ename,sal from emp order by sal desc, ename asc;
4. 使用字段的位置(下标)来排序
也就是通过下标进行排序,从1开始,例如sal下标是6,那么按照薪水升序;不健壮,不建议使用
select * from emp order by 6;
总结:一定要注意执行的顺序
select
字段 3
from
表名 1
where
条件 2
order by
.... 4order by是最后执行的!
结束语
今天的分享就到这里啦!快快通过下方链接注册加入刷题大军吧!各种大厂面试真题在等你哦!
💬刷题神器,从基础到大厂面试题👉点击跳转刷题网站进行注册学习
版权归原作者 @每天都要敲代码 所有, 如有侵权,请联系我们删除。