SELECT语句的使用

思维导图

思维导图

一、SELECT语句概述

1. 定义

用于从数据库表中检索数据的基本SQL语句。

2. 基本语法

SELECT 列名1, 列名2, ... FROM 表名;
示例:SELECT name, age FROM students;

二、基本查询操作

1. 选择单列数据

SELECT 列名 FROM 表名;
示例:SELECT name FROM students;

2. 选择多列数据

SELECT 列名1, 列名2, ... FROM 表名;
示例:SELECT name, age, gender FROM students;

3. 选择所有列

SELECT * FROM 表名;
示例:SELECT * FROM students;

三、过滤数据

1. WHERE子句

SELECT 列名 FROM 表名 WHERE 条件;
示例:SELECT name, age FROM students WHERE age > 20;
条件运算符
运算符 说明 示例
=/ != / <> 等于/不等于 WHERE age = 20
> / < / >= / <= 数值比较 WHERE score >= 60
AND / OR / NOT 逻辑组合 WHERE age>18 AND gender='M'
IN (值列表) 匹配列表中的任意值 WHERE age IN (20,21,22)
BETWEEN A AND B 范围匹配(闭区间) WHERE age BETWEEN 20 AND 25
LIKE '模式' 模糊匹配(通配符%和_) WHERE name LIKE '张%'

2. IN子句

SELECT 列名1, 列名2, ... FROM 表名 WHERE 列名 IN (值1, 值2, ...);
示例:SELECT name, age FROM students WHERE age IN (20, 21, 22);

3. BETWEEN子句

SELECT 列名1, 列名2, ... FROM 表名 WHERE 列名 BETWEEN 值1 AND 值2;
示例:SELECT name, age FROM students WHERE age BETWEEN 20 AND 25;

4. LIKE子句

SELECT 列名1, 列名2, ... FROM 表名 WHERE 列名 LIKE 匹配字符串;
示例:SELECT name FROM students WHERE name LIKE 'A%';

通配符

  • %(表示零个或多个字符)
  • _(表示单个字符)
  • [](表示括号中的单个字符)

四、排序数据

ORDER BY子句

SELECT 列名1, 列名2, ... FROM 表名 ORDER BY 列名 ASC|DESC;
示例:SELECT name, age FROM students ORDER BY age ASC;
示例:SELECT name, age FROM students ORDER BY age DESC;
示例:SELECT name, age, gender FROM students ORDER BY age ASC, gender DESC;

五、聚合函数

函数 作用 示例
COUNT() 统计行数 SELECT COUNT(*) FROM students;
SUM() 数值列求和 SELECT SUM(score) FROM exams;
AVG() 数值列平均值 SELECT AVG(age) FROM students;
MAX() 最大值 SELECT MAX(score) FROM exams;
MIN() 最小值 SELECT MIN(age) FROM students;

⚠️ 注意:聚合函数忽略NULL值,COUNT(*)除外。

1. COUNT

SELECT COUNT(column_name) FROM table_name WHERE condition;
示例:SELECT COUNT(*) FROM students WHERE age > 20;

2. SUM

SELECT SUM(column_name) FROM table_name WHERE condition;
示例:SELECT SUM(age) FROM students WHERE gender = 'M';

3. AVG

SELECT AVG(column_name) FROM table_name WHERE condition;
示例:SELECT AVG(age) FROM students;

4. MAX

SELECT MAX(column_name) FROM table_name WHERE condition;
示例:SELECT MAX(age) FROM students;

5. MIN

SELECT MIN(column_name) FROM table_name WHERE condition;
示例:SELECT MIN(age) FROM students;

六、分组与分组筛选

1. GROUP BY子句

SELECT column1, column2, ... FROM table_name GROUP BY column_name;
示例:SELECT gender, COUNT(*) FROM students GROUP BY gender;

2. HAVING子句

SELECT column1, column2, ... FROM table_name GROUP BY column_name HAVING condition;
示例:SELECT gender, COUNT(*) FROM students GROUP BY gender HAVING COUNT(*) > 10;

七、连接查询

连接类型 结果说明
INNER JOIN 仅返回两表匹配的行
LEFT JOIN 左表全保留,右表无匹配则填充NULL
RIGHT JOIN 右表全保留,左表无匹配则填充NULL
FULL JOIN 两表全保留(部分数据库不支持,如MySQL)

1. 内连接(INNER JOIN)

SELECT column1, column2, ... FROM table1 INNER JOIN table2 ON table1.column_name = table2.column_name;
示例:
SELECT students.name, courses.course_name FROM students INNER JOIN courses ON students.course_id = courses.id;

2. 左连接(LEFT JOIN)

SELECT column1, column2, ... FROM table1 LEFT JOIN table2 ON table1.column_name = table2.column_name;
示例:SELECT students.name, courses.course_name FROM students LEFT JOIN courses ON students.course_id = courses.id;

3. 右连接(RIGHT JOIN)

SELECT column1, column2, ... FROM table1 RIGHT JOIN table2 ON table1.column_name = table2.column_name;
示例:SELECT students.name, courses.course_name FROM students RIGHT JOIN courses ON students.course_id = courses.id;

4. 全连接(FULL JOIN)

SELECT column1, column2, ... FROM table1 FULL JOIN table2 ON table1.column_name = table2.column_name;
示例:SELECT students.name, courses.course_name FROM students FULL JOIN courses ON students.course_id = courses.id;

八、子查询

1. 定义

一个嵌套在另一个SQL语句中的查询语句。

2. 用途

作为条件

SELECT column1, column2, ... FROM table_name WHERE column_name IN (SELECT column_name FROM table_name WHERE condition);
示例:SELECT name FROM students WHERE age IN (SELECT age FROM students WHERE gender = 'M');

作为数据源

SELECT column1, column2, ... FROM (SELECT column_name FROM table_name WHERE condition) AS subquery;
示例:SELECT name FROM (SELECT name, age FROM students WHERE age > 20) AS subquery;