MySQL学习笔记(二)—条件查询,模糊查询,排序查询
做者:就叫易易好了
日期:2020/10/24 程序员节
注:如下案例均基于myemployees数据库,获取方式能够看我MySQL学习笔记(一)程序员
1、条件查询
语法:web
select数据库
查询列表svg
from函数
表名学习
where.net
筛选条件;code
执行顺序:xml
先执行的是表名,由于要先看数据库里面是否有这个表,再根据条件来筛选,再查询该列表,也就是说书写顺序与查询顺序不同。blog
分类:
按条件表达式筛选
条件运算符:
< > = ! = <> >= <=
按逻辑表达式筛选
逻辑运算符:
&& || !
and or not
&&和and:两个条件都为true,结果为true,反之则为false
||或or:只要有一个条件为true,结果为true,反之则为false
!或not:若是;链接的条件自己为fasle,结果为true,反之为false
一、按条件表达式筛选
#案例1:查询工资>12000的员工
SELECT
*
FROM
employees
WHERE
salary>12000;
(此语句用到的条件运算符为">")
#案例2:查询部门编号不等于90号的员工名和部门编号
SELECT
last_name,
department_id
FROM
employees
WHERE
department_id!=90;
(此指令用到的条件运算符为"!=",在MySQL中,不等号最好用"<>"代替)
二、按逻辑表达式筛选
#案例1:查询工资在10000到20000之间的员工名,工资以及奖金
SELECT
last_name,
salary,
commission_pct
FROM
employees
WHERE
salary>=10000
AND
salary<=20000
#案例2:查询部门编号不是在90到110之间,或者工资高于15000的员工信息
SELECT
*
FROM
employees
WHERE
department_id<=90 OR department_id>=110
OR
salary>15000
也能够将WHERE语句写成
WHERE
NOT(department_id>=90 AND department_id<=110)
2、模糊查询
须要用到的语句:
like
between and
in
is null|is not null
like
特色:通常与通配符搭配使用
通配符:
“%”表示任意多个字符,包含0个字符(以该字符开头的关键词)
“_”表示任意单个字符
#案例1:查询员工名中包含字符a的员工信息
SELECT
*
FROM
employees
WHERE
last_name
LIKE
'%a%';
#案例2:查询员工名中第三个字符为e,第五个字符为a的员工名和工资
SELECT
last_name,
salary
FROM
employees
WHERE
last_name
LIKE
'__e_a%';
#案例3:查询员工名中第二个字符为_的员工名
SELECT
last_name
FROM
employees
WHERE
last_name
LIKE
'_/_%';
(此时/为转义字符,将第二个下划线从通配符转移成普通字符)
这里也能够自定义转移符,用ESCAPE函数
LIKE
'_#_%' ESCAPE '#';
between and
使用between and能够提升语句简洁度
包含and先后的临界值
两个临界值的顺序不能颠倒
#案例:查询员工编号在100到120之间的员工信息
SELECT
*
FROM
employees
WHERE
employee_id BETWEEN 100 AND 120
in
用于判断某字段的值是否属于in列表中的某一项
使用in比使用or更提升了语句简洁性
in列表的类型必须统一或兼容
#案例:查询员工的工种编号是IT_PROG、AD_VP、AD_PRES
中的一个员工名和工种编号
SELECT
last_name,
job_id
FROM
employees
WHERE
job_id IN('IT_PROG','AD_VP','AD_PRES');
注意:in语句不支持通配符,好比上面的那个语句,若是为了省事将’AD_VP’,‘AD_PRES’写成’AD_%’,该语句是识别不了的。
is null|is not null
=或者<>不能用于判断null值
#案例1:查询没有奖金的员工名和奖金率
SELECT
last_name,
commission_pct
FROM
employees
WHERE
commission_pct is NULL;
#案例2:查询有奖金的员工名和奖金率
SELECT
last_name,
commission_pct
FROM
employees
WHERE
commission_pct is NOT NULL;
3、排序查询
SELECT * FROM employees
该语句查询出来的结果顺序与数据库里面的如出一辙,但在实际应用中,多数要对查询的数据进行排序,因此此时咱们要引入一个排序的条件。
SELECT * FROM employees
order by 排序列表 asc/desc
asc为升序,desc为降序,若是不写,默认是升序
order by子句中能够支持单个字段,多个字段,表达式,函数,别名
order by语句通常放在查询语句的最后边
#案例1:查询员工信息,要求工资从高到低排序
SELECT
*
FROM
employees
ORDER BY
salary DESC;
#案例2:查询部门编号>=90的员工信息,按入职时间的前后排序
SELECT
*
FROM
employees
WHERE
department_id>=90
ORDER BY
hiredate ASC;
#案例3:按年薪的高低显示员工的信息和年薪
法一:
SELECT
*,
salary*12*(1+IFNULL(commission_pct,0)) AS 年薪
FROM
employees
ORDER BY
salary*12*(1+IFNULL(commission_pct,0)) DESC;
(此案例用到的方法是按表达式排序)
#案例4:按年薪的高低显示员工的信息和年薪
法二:
SELECT
*,
salary*12*(1+IFNULL(commission_pct,0)) AS 年薪
FROM
employees
ORDER BY
年薪 DESC;
(此案例用到的方法是按别名排序)
#案例5:根据员工姓名的长度来显示员工姓名和工资
SELECT
LENGTH(last_name) as 字节长度,
last_name,
salary
FROM
employees
ORDER BY
LENGTH(last_name) DESC;
(按函数排序)
#案例6:查询员工信息,要求先按工资排序,再按员工编号排序
SELECT
*
FROM
employees
ORDER BY
salary ASC,employee_id DESC;
(按多个字段排序)