MySQL数据库复习(1)----单表查询sql语句

写在最前面:本博文如有错误,还望大家指出,谢谢

其它相关文章

MySQL数据库复习(2)----多表查询和增删改sql语句
MySQL数据库复习(3)------约束
MySQL数据库复习(4)----存储引擎,事务,索引,视图和设计三范式

一、SQL语句

1.SQL语句 的分类

DQL(数据查询语言):查询语句(select)
DML(数据操作语言):insert delete update,对表中的数据进行增删改
DDL(数据定义语言):create drop alter,对表结构的增删改
TCL(事务控制语言):commit提交事务,rollback回滚事务
DCL(数据控制语言):grant授权、revoke撤销权限等

2.对sql脚本的理解

当一个文件的扩展名是.sql,并且该文件中编写了大量的sql语句,我们称这样的文件为sql脚本
在mysql中可以直接使用source命令执行sql脚本
sql脚本中的数据量太大的时候,无法直接打开,请使用source命令完成初始化

3.删除数据库

drop database XXX;

4.条件查询

语法格式:
select 字段1,字段2…
from 表名
where 条件;
先执行from,再执行where,最后执行select
例1:查询工资等于5000的员工姓名

select name from emptable where sal = 5000;

例2:查询张三的工资

select sal from emptable where name = ‘张三’;

例3:找出工资高于3000的员工

select name,sal from emptable where sal > 3000;

例4:找出工资不等于3000的员工(两者均可)

select name,sal from emptable where sal <> 3000;
select name,sal from emptable where sal != 3000;

例5:找出工资在1100和3000之间的员工(包括1100和3000)

select name,sal from emptable where sal >= 1100 and sal <= 3000;
select name,sal from emptable where sal between 1100 and 3000;

注意:between and是闭区间
select name,sal from emptable where sal between 3000 and 1100;
查询不到任何数据,between and在使用的时候必须左小右大
between and除了可以使用在数字方面之外,还可以使用在字符串方面

select name from emptable where name between ‘A’ and ‘B’;

例6:找出哪些人津贴为null
在数据库中NULL不是一个值,代表什么也没有,为空
空不是一个值,不能用等号衡量,必须使用is null 或is not null

select name,sal,comm from emptable where comm is null;

注意这里不能写成comm = null
例7:找出哪些人津贴不为NULL

select name,sal,comm from emptable where comm is not null;

例8:找出哪些人没有津贴(为NULL或者为0)

select name,sal,comm from emptable where comm is null or comm = 0;

例9:找出工作岗位是manager和salesman的员工

select name,job from emptable where job = ‘manager’ or job = ‘salesman’;

例10:找出薪资大于1000的并且部门编号是20或30的员工

select name,sal,depno from emptable where sal > 1000 and (depno = 20 or depno = 30);

and比or的运算符优先级高,运算符优先级不确定的时候直接加括号即可
例11:找出工作岗位是manager和salesman的员工

select name,job from emptable where job = ‘manager’ or job = ‘salesman’;

或者

select name,job from emptable where job in(‘salesman’,’manager’);

注意

select name,job from emptable where salin(1000,5000);

找出工资等于1000或工资等于5000的员工
in后面的值不是区间,是具体的值
not in:不在这几个值里面

例12:模糊查询like
a)找出名字中含有O的
两个特殊的符号:%(任意多个字符),_代表任意一个字符

select name from emptable where name like%O%;

b)找出第二个字母是A的

select name from emptable where name like ‘_A%;

c)找出名字中有下划线的?(使用转义字符即可)

select name from emptable where name like%\_%;

5.数据排序(升序或降序)

1)按照工资升序排列?

select name,sal from emptable order by sal;

注意:默认是升序
asc表示升序,desc表示降序

select name,sal from emptable order by sal asc;
select name,sal from emptable order by sal desc;

2)按照工资的降序排列,当工资相同的时候再按照名字的升序排列?

select name,sal from emptable order by sal desc, name asc;

多个字段排序,越靠前的字段起的主导作用越大,只有当前面的字段无法完成排序的时候,后面的字段才会起作用
3)找出工作岗位是salesman的员工,并要求按照薪资的降序排列

select name,job,sal from emptable where job = ‘salesman’ order by sal desc;

select * from tablename where 条件 order by xx
先执行from,再where,再select,最后执行order by
4)分组函数
count 计数
sum 求和
avg 平均值
max 最大值
min 最小值
所有分组函数都是对某一组数据进行操作的

a)求工资的总和

select sum(sal) from emptable;

b)找出最高/最低/平均工资

select max(sal) from emptable;
select min(sal) from emptable;
select avg(sal) from emptable;

c)找出总人数

select count(*) from emptable;

注意:分组函数自动忽略NULL
所有数据库都规定,只要有NULL参与的运算,结果就为NULL
ifnull ( ) 空处理函数?
格式:
ifnull(可能为NULL的数据,被当作什么处理)

d)如果津贴为NULL,就当作0处理

select name,ifnull(comm,0) as coom from emptable;

注意:所有分组函数自动忽略NULL
e)找出工资高于平均工资的员工?

select name,sal from emptable where sal > avg(sal);

以上代码是错误的
SQL语句中有一个语法规则,分组函数不可出现在where子句中
原因:因为group by是在where执行之后才会执行的,而分组函数是在group by执行之后才执行
正确写法:

select name,sal from emptable where sal > (select avg(sal) from emptable);

count()与count(某个具体字段)的区别:
count(
):统计总记录条数
count(XX):表示统计XX字段中不为NULL的元素的总数量
分组函数也可以组合使用:

select count(*),sum(sal),avg(sal) from emptable;

5)group by 和 having
group by:按照某个字段或者某些字段进行分组
having:对分组之后的数据进行再次过滤

找出每个工作岗位的最高薪资?

select max(sal),job from emp group by job;

分组函数一般都会和group by联合使用,且分组函数是在group by语句执行结束后执行
当一条sql语句没有group by的时候,整张表的数据会自成一组
各个语句执行顺序如下

在这里插入图片描述

注意:当一条语句中有group by的话select后面只能跟分组函数和参与分组的字段
多个字段联合分组
找出每个部门不同工作岗位的最高薪资

select deptno,job,max(sal) from emptable group by deptno,job;

having
找出每个部门的最高薪资,要求显示薪资大于2900的数据

select max(sal),deptno from emptable group by deptno having max(sal) > 2900;

或者

select max(sal),deptno from emptable where sal > 2900 group by deptno;

6.查询结果集的去重

加上distinct关键字即可

select distinct job from emptable;

注意:distinct关键字只能出现在所有字段的最前面

select distinct deptno,job from emptable;

这里表示deptno和job联合去重
案例:统计岗位的数量?

select count(distinct job) from emp;

本笔记网课资料来源:
https://www.bilibili.com/video/BV1fx411X7BD

猜你喜欢

转载自blog.csdn.net/weixin_46841376/article/details/112617902