Select 语句
基本语法
sql
SELECT column1, column2, ...
FROM table_name;
sql
SELECT name, age
FROM students;
Where 子句
比较
sql
select * from students where age > 20;
sql
select * from students where age < 20;
sql
select * from students where age >= 20;
sql
select * from students where age <= 20;
sql
select * from students where age = 20;
sql
select * from students where age != 20;
逻辑
sql
select * from students where age > 20 and name = 'John';
sql
select * from students where age > 20 or name = 'John';
sql
select * from students where not age > 20;
IN
sql
select * from students where age in (20, 21, 22);
sql
select * from students where age not in (20, 21, 22);
Between And
sql
select * from students where age between 20 and 30;
sql
select * from students where age not between 20 and 30;
Exists
sql
select * from students where exists (
select * from teachers where students.teacher_id = teachers.id
);
sql
select * from students where not exists (
select * from teachers where students.teacher_id = teachers.id
);
Is Null
sql
select * from students where name is null;
sql
select * from students where name is not null;
Like 子句
Like 用来匹配通配符指定模式的文本值。
Like 通常与两个通配符一起使用:
- 百分号(%):代表零个、一个或多个字符。
- 下划线(_):代表一个单一的字符。
sql
select * from students where name like 'J%';
sql
select * from students where name not like 'J%';
sql
select * from students where name like 'J_n';
sql
select * from students where name not like 'J_n';
语句 | 描述 |
---|---|
WHERE SALARY LIKE '200%' | 查找以 200 开头的任意值 |
WHERE SALARY LIKE '%200' | 查找以 200 结尾的任意值 |
WHERE SALARY LIKE '%200%' | 查找包含 200 的任意值 |
WHERE SALARY LIKE '_00%' | 查找第二位是 0,第三位是 0 的任意值 |
WHERE SALARY LIKE '2_%_%' | 查找以 2 开头且长度至少为 3 的值 |
WHERE SALARY LIKE '2__' | 查找以 2 开头且长度为 3 的值 |
WHERE SALARY LIKE '2%5' | 查找以 2 开头且以 5 结尾的值 |
WHERE SALARY LIKE '2___5' | 查找以 2 开头且长度为 5 的值 |
Glob 子句
GLOB 运算符用于匹配通配符指定模式的文本值。
TIP
与 like 不同,GLOB 是大小写敏感的。
GLOB 支持以下通配符,可以组合使用:
*
:代表零个、一个或多个数字或字符。?
:代表一个单一的数字或字符。[...]
:匹配方括号内指定的字符之一。例如,[abc] 匹配 "a"、"b" 或 "c" 中的任何一个字符。[^...]
:匹配不在方括号内指定的字符之一。例如,[^abc] 匹配不是 "a"、"b" 或 "c" 中的任何一个字符的字符。
语句 | 描述 |
---|---|
WHERE SALARY GLOB '200*' | 查找以 200 开头的任意值 |
WHERE SALARY GLOB '*200*' | 查找任意位置包含 200 的任意值 |
WHERE SALARY GLOB '?00*' | 查找第二位和第三位为 00 的任意值 |
WHERE SALARY GLOB '2??' | 查找以 2 开头,且长度为 3 个字符的任意值 |
WHERE SALARY GLOB '*2' | 查找以 2 结尾的任意值 |
WHERE SALARY GLOB '?2*3' | 查找第二位为 2,且以 3 结尾的任意值 |
WHERE SALARY GLOB '2???3' | 查找长度为 5 位数,且以 2 开头以 3 结尾的任意值 |
Limit 子句
Limit 子句用于限制查询返回的行数。
sql
SELECT column1, column2, ... FROM table_name LIMIT [number of rows];
sql
SELECT name, age FROM students LIMIT 10;
Limit 子句与 Offset 子句一起使用,可以跳过指定数量(offset)的行,然后从下一行开始,返回剩余数量(limit)的行。
sql
SELECT column1, column2, ... FROM table_name
LIMIT [number of rows] OFFSET [offset];
sql
SELECT name, age FROM students LIMIT 10 OFFSET 10;
Order By 子句
Order By 子句用于对查询结果进行排序。
sql
SELECT column1, column2, ... FROM table_name
ORDER BY [column1, column2, ...] [ASC | DESC];
sql
SELECT name, age FROM students ORDER BY age DESC;
Group By 子句
Group By 子句用于对查询结果进行分组。
TIP
在 SELECT 语句中,GROUP BY 子句必须在 WHERE 子句之后,ORDER BY 子句之前。
sql
SELECT column1, column2, ... FROM table_name
GROUP BY [column1, column2, ...];
sql
SELECT name, count(*) FROM students GROUP BY name;
Having 子句
Having 子句用于对 GROUP BY 子句返回的结果进行过滤。
TIP
HAVING 子句必须在 GROUP BY 子句之后,ORDER BY 子句之前。
sql
SELECT column1, column2, ... FROM table_name
GROUP BY [column1, column2, ...]
HAVING [condition];
sql
SELECT name, count(*) FROM students GROUP BY name HAVING count(*) > 1;
Distinct 关键字
Distinct 关键字用于返回唯一不同的值。
sql
SELECT DISTINCT column1, column2, ... FROM table_name;
sql
SELECT DISTINCT name FROM students;