SQL 基本查询语句详解
一、SELECT 语句
(一)基本语法结构
SELECT 语句是 SQL 中最基础且核心的查询语句,用于从数据库中选取数据,其基本语法结构如下:
部分 | 描述 | 示例 |
SELECT | 指定要查询的列,多个列之间用逗号分隔,若要查询所有列,可以使用 通配符 | SELECT column1, column2 FROM table_name SELECT * FROM table_name |
FROM | 指定查询的数据表或视图的来源 | FROM table_name |
WHERE (可选) | 设置查询条件,用于筛选符合特定条件的记录,常见的比较运算符有= (等于)、<> (不等于)、> (大于)、< (小于)、>= (大于等于)、<= (小于等于),还可以使用逻辑运算符如AND (与)、OR (或)、NOT (非)来组合多个条件 | SELECT * FROM table_name WHERE column1 = 'value' AND column2 > 10 |
GROUP BY (可选) | 对查询结果进行分组,通常与聚合函数(如 COUNT()、SUM()、AVG()、MAX()、MIN())一起使用,用于对一组相关的行进行汇总计算 | SELECT column1, column2, COUNT(*) FROM table_name GROUP BY column1, column2 |
HAVING (可选) | 用于筛选分组后的结果,与WHERE 类似,但WHERE 是在分组前筛选,而HAVING 是在分组后筛选,常与聚合函数配合使用 | SELECT column1, column2, COUNT(*) FROM table_name GROUP BY column1, column2 HAVING COUNT(*) > 5 |
ORDER BY (可选) | 对查询结果进行排序,可以按一个或多个列进行排序,默认为升序(ASC),若想降序排列则使用DESC | SELECT * FROM table_name ORDER BY column1 ASC, column2 DESC |
LIMIT (可选,部分数据库支持) | 限制查询结果返回的行数,常用于分页显示数据 | SELECT * FROM table_name LIMIT 10 |
(二)示例
假设有一个名为students
的表,结构如下:
id | name | age | gender | grade |
1 | Tom | 18 | Male | A |
2 | Jerry | 19 | Male | B |
3 | Mary | 18 | Female | A |
4 | John | 20 | Male | C |
5 | Alice | 17 | Female | B |
查询所有学生信息:
SELECT * FROM students;
这将返回students
表中的所有列和所有行的数据。
查询学生的姓名和年龄:
SELECT name, age FROM students;
只会返回学生的姓名和年龄两列数据。
查询年龄大于 18 岁的男生信息:
SELECT * FROM students WHERE age > 18 AND gender = 'Male';
将筛选出满足年龄大于 18 且性别为男的学生记录。
按成绩分组统计各成绩段的人数:
SELECT grade, COUNT(*) AS num_students FROM students GROUP BY grade;
会按照成绩列进行分组,并统计每个成绩对应的学生数量。
二、INSERT 语句
(一)基本语法结构
INSERT 语句用于向数据库表中插入新数据,其基本语法结构如下:
部分 | 描述 | 示例 |
INSERT INTO | 指定要插入数据的表名 | INSERT INTO table_name |
(column1, column2,...) (可选) | 指定要插入数据的列,若省略则表示插入所有列的数据,此时值的顺序需与表中列的顺序一致 | INSERT INTO table_name (column1, column2) |
VALUES | 指定要插入的具体值,多个值用括号括起来,若有多组值则用逗号分隔 | VALUES (value1, value2), (value3, value4) |
(二)示例
继续以上面的students
表为例:
插入一条新学生记录:
INSERT INTO students (id, name, age, gender, grade) VALUES (6, 'Bob', 18, 'Male', 'B');
这将在students
表中插入一条 id 为 6,姓名为 Bob,年龄为 18,性别为男,成绩为 B 的新记录。
三、UPDATE 语句
(一)基本语法结构
UPDATE 语句用于修改表中已有的数据,其基本语法结构如下:
部分 | 描述 | 示例 |
UPDATE | 指定要更新数据的表名 | UPDATE table_name |
SET | 指定要更新的列和新的值,多个列和值用逗号分隔 | SET column1 = value1, column2 = value2 |
WHERE (可选) | 设置更新条件,若省略则表示更新表中所有记录 | WHERE condition |
(二)示例
将学生 John 的成绩改为 A:
UPDATE students SET grade = 'A' WHERE name = 'John';
这条语句会将students
表中姓名为 John 的学生的成绩更新为 A。
四、DELETE 语句
(一)基本语法结构
DELETE 语句用于从表中删除数据,其基本语法结构如下:
部分 | 描述 | 示例 |
DELETE FROM | 指定要删除数据的表名 | DELETE FROM table_name |
WHERE (可选) | 设置删除条件,若省略则表示删除表中所有记录 | WHERE condition |
(二)示例
删除成绩为 C 的学生记录:
DELETE FROM students WHERE grade = 'C';
此语句会删除students
表中所有成绩为 C 的学生记录。
相关问题与解答
问题一:如果只想查询某一列的最大值,SQL 语句该怎么写?
解答:可以使用聚合函数MAX()
结合SELECT
语句来实现,对于students
表,若要查询年龄的最大值,SQL 语句为:
SELECT MAX(age) FROM students;
这将返回students
表中年龄列的最大值。
问题二:在插入数据时,如果某些列没有提供值,该如何处理?
解答:在插入数据时,如果某些列允许为空且没有提供值,可以直接在对应位置留空或者使用NULL
表示,对于students
表,若插入一条新记录时不想提供性别信息(假设性别列允许为空),可以这样写:
INSERT INTO students (id, name, age, grade) VALUES (7, 'Cathy', 19, 'A');
或者写成:
INSERT INTO students (id, name, age, gender, grade) VALUES (7, 'Cathy', 19, NULL, 'A');
这两种方式都可以实现插入一条除了性别列为空外其他列有值的新记录。