文章目录
MYSQL简单查询及条件查询
一、简单查询
1. 查询一个字段
查询表中所有员工姓名
select [列名] from emp;
2. 查询多个字段
查询表中所有员工姓名,部门编号,员工工资
select [列名],[列名],[列名] from emp;
3. 查询全部字段
查询表中全部内容
select * from emp;
4. 字段运算
在MySQL中使用运算符进行运算,MySQL支持四种运算符, 分别是算术运算符、比较运算符、逻辑运算符、位运算符。
算数运算符即基本的加(+)减(-)乘(*)除(/)以及取余(%);
比较运算符在数据库操作中是十分常用的,在第二部分会详细讲述;
逻辑运算符即与或非、异或;
位运算符用来对二进制字节中的位进行移位或者测试。
5. 将查询出来的字段显示为其他标题
这里需要用到as,在查询的字段后添加as 以及需要显示出来的标题即可,as也可省略。
select
ename as(可省略) '员工姓名', deptno as(可省略) '部门编号', sal as(可省略) '员工工资'
from
emp;
二、条件查询
条件查询需要用到where语句,where必须放到from语句表的后面
支持如下运算符:
运算符 | 说明 |
---|---|
= | 等于 |
< | 小于 |
<= | 小于等于 |
> | 大于 |
>= | 大于等于 |
<=> | 表示NULL安全的等价,返回值不会为NULL |
<>或!= | 不等于 |
IS NULL | 判断是否为NULL |
IS NOT NULL | 判断是否不为NULL |
BETWWEN [ ] AND [ ] | 判断一个值是否在两者之间 |
LEAST | 当有两个以上值时,返回最小值 |
GREATEST | 当有两个以上值时,返回最大值 |
IN | 判断一个值是否在该列表中 |
NOT IN | 判断一个值是否不在该列表中 |
LIKE | 通配符匹配 |
REGEXP | 正则表达式匹配 |
and | 并且 |
or | 或者 |
以下对于 "between [ ] and [ ] " 、“isnull”、
“in”、"like"进行具体演示,以及对表达式的优先级进行简略的说明。
1.between [ ] and [ ]
查询薪水为1600到3000的员工(第一种方式,采用between … and …
select
empno, ename, sal
from
emp
where
sal between 1600 and 3000;
2.is null
Null为空,但不是空串,为null可以设置这个字段不填值,如果查询为null的字段,采用is null进行查询
查询津贴为空的员工
select * from emp where comm=null;
select * from emp where comm is null;
比较上面两条语句的查询结果
第一条语句无法正确的查出我们所需要的数据,因为NULL是一个特殊的值,不能使用“=”进行比较,需要使用“is null”来进行判断。
3.in
in表示包含的意思,完全可以采用or来表示,但采用in会更简洁一些
查询出job为manager或者job为salesman的员工
select * from emp where job in ('manager','salesman');
4.like
like可以实现模糊查询,like支持%和下划线匹配
查询姓名以M开头所有的员工
select * from emp where ename like 'M%';
5.表达式的优先级
首先看一个问题的具体情况
查询薪水大于1800,并且部门代码为20或30的员工(错误的写法)
select * from emp where sal > 1800 and deptno = 20 or deptno = 30;
以上输出不是预期结果,薪水小于1800的数据也被查询上来了,
原因是表达式的优先级导致的,首先过滤sal > 1800 and deptno = 20,
然后再将deptno = 30员工合并过来,所以是不对的
一般情况下,级别高的运算符优先进行计算,如果级别相同,MySQL按表达式的顺序从左到右依次计算。
运算符的具体优先级如下:
优先级由低到高排列 | 运算 符 |
---|---|
1 | =(赋值运算)、:= |
2 | II、OR |
3 | XOR |
4 | &&、AND |
5 | NOT |
6 | BETWEEN、CASE、WHEN、THEN、ELSE |
7 | =(比较运算)、<=>、>=、>、<=、<、<>、!=、 IS、LIKE、REGEXP、IN |
8 | 按位或 |
9 | & |
10 | <<、>> |
11 | -(减号)、+ |
12 | *、/、% |
13 | ^ |
14 | -(负号)、〜(位反转) |
15 | ! |
查询薪水大于1800,并且部门代码为20或30的(正确的写法)
select * from emp where sal > 1800 and (deptno = 20 or deptno = 30);
在无法确定优先级的情况下,可以使用圆括号“()”来改变优先级,并且这样会使计算过程更加清晰。