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)

  1. 没有排序时,数据库根据添加的顺序进行排序。
  2. 使用ORDER BY关键词进行排序。
  3. 升序ASC(ascend)降序DESC(descend)
  4. 默认进行升序排列。
  5. 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之前
  1. 使用LIMIT进行分页

  2. LIMIT 0,20 偏移量为0,一次显示20条数据。

  3. 偏移量为0是可以省略。

  4. 每页显示pageSize条数据,此时第pageNO页:

  5. 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之后
  1. LIMTI pageSize OFFSET pageNO
  2. 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;
posted @ 2021-12-17 21:56  Boerk  阅读(178)  评论(0)    收藏  举报