做者:就叫易易好了 日期:2020/10/24 程序员节
注:如下案例均基于myemployees数据库,获取方式能够看我MySQL学习笔记(一)程序员
语法: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)
须要用到的语句: like between and in is null|is not null
特色:通常与通配符搭配使用
通配符:
“%”表示任意多个字符,包含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能够提升语句简洁度
包含and先后的临界值
两个临界值的顺序不能颠倒
#案例:查询员工编号在100到120之间的员工信息 SELECT * FROM employees WHERE employee_id BETWEEN 100 AND 120
用于判断某字段的值是否属于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_%’,该语句是识别不了的。
=或者<>不能用于判断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;
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; (按多个字段排序)