WHERE语句
SQL语句的学习
12.17
出于规范,在SQL语句中,所有的关键字使用大写。
1.0SELECT
1.1基本语法
以宋红康老师的视频中employees表为例
SELECT last_name
FROM employees;
//在员工表中查找员工的姓名
1.2列的别名
SELECT salary 薪水
FROM employees;
/*此时输出时,salary列名为薪水*/
列的别名只能再ORDER BY中使用,不能在WHERE中使用!
SQL语句首先会执行FROM然后WHERE,其次是SELECT,最后才是排序。
因此WHERE执行时,列的别名还没有声明,会报错!
2.0WHERE
基本语法
SELECT last_name
FROM employees
WHERE manager IS NULL;
/*查找公司中没有管理者的员工姓名。
这里还可以使用<=>
*/
WHERE manager <=>NULL;
/*<=>安全等于可以与NULL值进行比较
不是NULL则用IS NOT NULL,或者
WHERE NOT manager <=> NULL
*/
2.1模糊查询(LIKE)
//"_"的使用
SELECT last_name
FROM employees
WHERE last_name LIKE "_a%";
/*查找公司中名字中第二个字符是a的员工。*/
WHERE last_name LIKE "%a%" AND last_name LIKE "%k%";
/*查找公司中名字中含有a和k的员工
OR等价于||
AND 等价于&&
*/
2.2BETWEEN AND
SELECT last_name
FROM employees
WHERE department_id BETWEEN 80 AND 100;
/*查找公司中工号在80-100之间的员工。
前一个数必须比后一个数小!BETWEEN 100 AND 80是错误的
这是一个闭合的区间,包含首尾。
等价于WHERE department_id >=80 AND department_id <=100;
而不在相应区间则为
*/
WHERE department_id NOT BETWEEN 80 AND 100;
/*这里的结果不包含80和100
等价于WHERE department_id <80 OR department_id >100;
*/
2.3IN
SELECT last_name
FROM employees
WHERE manager_id IN(100,101,110);
/*显示管理者ID是100,101或者110的员工
等价于 WHERE manager_id =100 OR manager_id =101 OR manager_id =110;
*/
2.4排序(ORDER BY)
- 没有排序时,数据库根据添加的顺序进行排序。
- 使用ORDER BY关键词进行排序。
- 升序ASC(ascend)降序DESC(descend)
- 默认进行升序排列。
- ORDER BY和WHERE同时出现时,必须将WHERE放在FROM的后面
SELECT employee_id,last_name,salary
FROM employees
ORDER BY salary ASC;
/*对公司员工按照薪水升序排列*/
SELECT employee_id,last_name,salary
FROM employees
WHERE employee_id>=50;
ORDER BY salary ASC;
/*
SELECT employee_id,last_name,salary
FROM employees
ORDER BY salary ASC;
WHERE employee_id>=50;
是错误的!
*/
2.4.1二级排序
直接在一级排序后输入二级排序内容
SELECT employee_id,last_name,salary
FROM employees
ORDER BY salary ASC,employee_id ASC;
/*对公司员工按照薪水升序排序,二级排序按照员工id进行升序排序*/
2.5分页
2.5.1MYSQL 8.0之前
-
使用LIMIT进行分页
-
LIMIT 0,20 偏移量为0,一次显示20条数据。
-
偏移量为0是可以省略。
-
每页显示pageSize条数据,此时第pageNO页:
-
SQL语句顺序:SELECT…FROM…WHERE…ORDER BY…LIMIT。
LIMIT (pageSize-1)*pageNO,pageNO;
SELECT employee_id,last_name,salary
FROM employees
LIMIT 0,20;
/*第一页的20条数据
如果想查看第二页则将偏移量改为20
*/
SELECT employee_id,last_name,salary
FROM employees
LIMIT 20,20;
#表里有n条数据,我们想只想显示第m条和m+1条数据。
SELECT employee_id,last_name
FROM employees
LIMIT m-1,(m+1-m+1);
2.5.2MYSQL 8.0之后
- LIMTI pageSize OFFSET pageNO
- 8.0之后偏移量在OFFSET之后。
#表里有n条数据,我们想只想显示第m条和m+1条数据。
SELECT employee_id,last_name
FROM employees
LIMIT (m+1-m)+1 OFFSET m-1;
#练习:查询员工表中工资最后的员工
SELECT last_name
FROM employees
ORDER BY salary DESC
LIMIT 1;#LIMIT 0,1;或者 LIMIT 1 OFFSET 0;

浙公网安备 33010602011771号