目录
一、增(INSERT)
1.1插入单行数据
INSERT INTO 表名(列名1, 列名2, 列名3) VALUES (值1, 值2, 值3);
示例:
INSERT INTO students (id, name, age) VALUES (1, 'Alice', 20);
1.2插入多行数据
INSERT INTO 表名 (列名1, 列名2, 列名3) VALUES (值1, 值2, 值3), (值4, 值5, 值6), (值7, 值8, 值9);
示例:
INSERT INTO students (id, name, age) VALUES (2, 'Bob', 21), (3, 'Charlie', 22), (4, 'David', 23);
1.3从另一个表插入数据
INSERT INTO 表名 (列名1, 列名2)
SELECT 列名1, 列名2 FROM 另一个表 WHERE 条件;
示例:
INSERT INTO students_backup (id, name)
SELECT id, name FROM students WHERE age > 21;
二、删(DELETE)
2.1删除特定条件的数据
DELETE FROM 表名 WHERE 列名 = 特定值;
示例:
DELETE FROM students WHERE id = 1;
2.2删除所有行
删除表中的所有数据,但保留表结构。
DELETE FROM students;
2.3使用子查询删除数据
DELETE FROM 表名 WHERE 列名 IN (SELECT 列名 FROM 另一个表 WHERE 条件);
示例:
DELETE FROM students WHERE id IN (SELECT student_id FROM courses WHERE course_name = 'Math');
三、改(UPDATE)
3.1更新单个列
UPDATE 表名 SET 要改的列名 = 值 WHERE 列名 = 值;
示例:
UPDATE students SET age = 21 WHERE id = 2;
3.2更新多个列
UPDATE 表名 SET 列名1 = 值1, 列名2 = 值2 WHERE 条件;
示例:
UPDATE students SET name = 'Alice Smith', age = 21 WHERE id = 1;
3.3使用子查询更新数据
UPDATE 表名 SET 列名 = (SELECT 列名 FROM 另一个表 WHERE 条件) WHERE 条件;
示例:
UPDATE students SET age = (SELECT AVG(age) FROM students) WHERE name = 'Bob';
3.4安全更新
在进行批量更新操作时,可以先使用 SELECT
语句确认需要更新的数据。
SELECT * FROM students WHERE age < 18;
-- 确认后再执行更新
UPDATE students SET age = 18 WHERE age < 18;
四、查(SELECT)
4.1查询全部
SELECT * FROM 表名;
4.2查询特定列
SELECT 列名1, 列名2 FROM 表名;
示例:
SELECT name, age FROM students;
4.3条件查询
SELECT * FROM 表名 WHERE 列名 = 特定值;
示例:
SELECT * FROM students WHERE age = 20;
4.4模糊查询(LIKE)
SELECT * FROM 表名 WHERE 列名 LIKE '%值%';
示例:
SELECT * FROM students WHERE name LIKE '%张%';
4.5去重查询(DISTINCT)
SELECT DISTINCT 列名 FROM 表名;
示例:
SELECT DISTINCT age FROM students;
4.6排序查询(ORDER BY)
排序查询用于按指定列对结果集进行升序或降序排序。
语法:
SELECT * FROM 表名 ORDER BY 列名 [ASC|DESC];
ASC
表示升序(默认)。DESC
表示降序。
示例:
假设有一个 students
表,包含 id
、name
和 age
列。
按 age
升序排序:
SELECT * FROM students ORDER BY age ASC;
按 age
降序排序:
SELECT * FROM students ORDER BY age DESC;
按 age
降序,然后按 name
升序排序:
SELECT * FROM students ORDER BY age DESC, name ASC;
4.7分组查询(GROUP BY)
分组查询用于将具有相同值的行归为一组,并可以使用聚合函数对这些组进行操作。
语法:
SELECT 列名, 聚合函数(列名) FROM 表名 GROUP BY 列名;
示例:
按 age
分组,统计每个年龄的人数:
SELECT age, COUNT(*) AS count FROM students GROUP BY age;
按 age
分组,并按每组的人数降序排序:
SELECT age, COUNT(*) AS count FROM students GROUP BY age ORDER BY count DESC;
4.8聚合函数查询
聚合函数用于对一组值执行计算,并返回单个值。常见的聚合函数包括 COUNT
、SUM
、AVG
、MAX
和 MIN
。
常用聚合函数:
COUNT(column)
: 计算非空值的数量。SUM(column)
: 计算数值列的总和。AVG(column)
: 计算数值列的平均值。MAX(column)
: 返回最大值。MIN(column)
: 返回最小值。
示例:
计算 students
表中学生的总数:
SELECT COUNT(*) FROM students;
计算 students
表中所有学生的平均年龄:
SELECT AVG(age) FROM students;
计算 students
表中年龄最大的学生:
SELECT MAX(age) FROM students;
计算 students
表中年龄最小的学生:
SELECT MIN(age) FROM students;
4.9联接查询
联接查询用于从多个表中基于相关列的条件组合数据。常见的联接类型有内联接(INNER JOIN)、左联接(LEFT JOIN)、右联接(RIGHT JOIN)和全外联接(FULL OUTER JOIN)。
语法:
SELECT 表1.列名, 表2.列名 FROM 表1 [INNER|LEFT|RIGHT|FULL] JOIN 表2 ON 表1.列名 = 表2.列名;
示例:
假设有两个表 students
和 courses
:
students
表包含id
、name
和age
列。courses
表包含student_id
和course_name
列。
内联接(INNER JOIN)
只返回两个表中匹配的行。
SELECT students.name, courses.course_name
FROM students
INNER JOIN courses ON students.id = courses.student_id;
左联接(LEFT JOIN)
返回左表中的所有行,即使右表中没有匹配的行。
SELECT students.name, courses.course_name
FROM students
LEFT JOIN courses ON students.id = courses.student_id;
右联接(RIGHT JOIN)
返回右表中的所有行,即使左表中没有匹配的行。
SELECT students.name, courses.course_name
FROM students
RIGHT JOIN courses ON students.id = courses.student_id;
全外联接(FULL OUTER JOIN)
返回两个表中的所有行,无论是否有匹配的行(某些数据库可能不支持)。
SELECT students.name, courses.course_name
FROM students
FULL OUTER JOIN courses ON students.id = courses.student_id;
4.10子查询
子查询是嵌套在另一个查询中的查询。子查询可以用于 SELECT
、INSERT
、UPDATE
或 DELETE
语句中。
语法:
SELECT * FROM 表名 WHERE 列名 IN (SELECT 列名 FROM 表名 WHERE 条件);
示例:
从 students
表中查询年龄在子查询结果中的记录。
SELECT * FROM students WHERE age IN (SELECT age FROM students WHERE name LIKE '%张%');
分页查询
分页查询用于限制返回的记录数量,以便于处理大量数据时进行分页显示。
语法:
SELECT * FROM 表名 LIMIT 偏移量, 行数;
示例:
查询前10条记录:
SELECT * FROM students LIMIT 0, 10;
从第11条记录开始查询10条记录:
SELECT * FROM students LIMIT 10, 10;
五、通用注意事项
-
事务处理:在进行增删改操作时,使用事务可以确保数据的一致性和完整性。
BEGIN TRANSACTION;
-- 执行增删改操作
COMMIT;
-- 或者在出错时回滚
ROLLBACK;
-
约束:确保表中的数据符合业务规则,如主键、外键、唯一约束和检查约束。
ALTER TABLE students ADD CONSTRAINT unique_name UNIQUE (name);
- 索引:在常用查询列上建立索引可以提高查询性能。
CREATE INDEX idx_age ON students (age);
以上就是我所理解的SQL语句的全部内容了,希望这篇文章能帮助您更好地掌握SQL语句的使用!如果有任何问题,欢迎在评论区留言讨论。