一、引言
在上一篇文章中,我们初步了解了SQL的基础知识和概念。今天,我们将深入探讨SQL的增删查改操作,并学习一些高级用法,让你的SQL技能更上一层楼。
二、SQL基础增删查改操作
1. 增加
使用INSERT INTO
语句向表中插入新记录。
INSERT INTO 表名 (列1, 列2, 列3, ...)
VALUES (值1, 值2, 值3, ...);
例如,向students
表中插入一条新记录:
INSERT INTO students (id, name, age)
VALUES (1, '张三', 20);
2. 删除
使用DELETE FROM
语句从表中删除记录。
DELETE FROM 表名 WHERE 条件;
例如,删除students
表中年龄为20的学生:
DELETE FROM students WHERE age = 20;
3. 查找
使用SELECT
语句从表中查询数据。
SELECT 列1, 列2, ...
FROM 表名
WHERE 条件;
例如,查询students
表中所有年龄为20的学生的姓名和id:
SELECT name, id FROM students WHERE age = 20;
4. 修改
使用UPDATE
语句修改表中的记录。
UPDATE 表名
SET 列1 = 值1, 列2 = 值2, ...
WHERE 条件;
例如,将students
表中id为1的学生的年龄修改为21:
UPDATE students
SET age = 21
WHERE id = 1;
三、SQL高级用法
1. WHERE子句
用于过滤查询结果。这个经常使用,上面已经给出了示例,这里就不再赘述了。
2. ORDER BY子句
用于对查询结果进行排序。
SELECT 列1, 列2, ...
FROM 表名
ORDER BY 列名 ASC|DESC;
例如,按年龄升序查询students
表:
SELECT * FROM students ORDER BY age ASC;
-- ASC/DESC分别表示升序和降序
3. LIKE 语法与通配符
用于模糊查询。
通配符 | 描述 |
% | 替代0个或多个字符 |
_ | 替代一个字符 |
[charlist] | 字符列中的任何单一字符 |
[^charlist]或者[!charlist] | 不在字符列中的任何单一字符 |
SELECT 列1, 列2, ...
FROM 表名
WHERE 列名 LIKE 模式;
例如,查询名字以“张”开头的学生:
SELECT * FROM students WHERE name LIKE '张%';
4. IN 语句
用于指定多个可能的值。
SELECT 列1, 列2, ...
FROM 表名
WHERE 列名 IN (值1, 值2, ...);
例如,查询id为1或2的学生:
SELECT * FROM students WHERE id IN (1, 2);
5. BETWEEN 语句
用于指定一个值的范围。
SELECT 列1, 列2, ...
FROM 表名
WHERE 列名 BETWEEN 值1 AND 值2;
例如,查询年龄在20到25之间的学生:
SELECT * FROM students WHERE age BETWEEN 20 AND 25;
6. 别名(Alias)
用于简化查询结果中的列名或表名。
SELECT 列名 AS 别名 FROM 表名;
例如,查询学生姓名和年龄,并将姓名列重命名为student_name,年龄列重命名为student_age
:
SELECT name AS student_name, age AS student_age FROM students;
7. JOIN 语句
用于连接两个或多个表,并返回匹配的行。
这个主要是讲两个表按列连接在一起,比如表1中有个id1列,表2有个id2列,就可以按照表1和表2的id列将两个表连接在一起。
SELECT 列1, 列2, ...
FROM 表1
JOIN 表2 ON 表1.列 = 表2.列;
8. UNION 语句
用于合并两个或多个SELECT语句的结果集。
这个是将两个表按行连接在一起,注意和上面的join区分。
SELECT 列1, 列2, ... FROM 表1
UNION
SELECT 列1, 列2, ... FROM 表2;
-- 注意:UNION会去除重复行,如果想保留重复行,可以使用UNION ALL。
9. SELECT INTO 语句
SELECT INTO
语句用于从一个表中选择数据,并将结果插入到新的表中。新表是根据选择的数据创建的。
SELECT 列1, 列2, ...
INTO 新表名
FROM 原始表名
WHERE 条件;
例如,从students
表中选择所有年龄为20的学生,并将结果插入到新的students_20
表中:
SELECT *
INTO students_20
FROM students
WHERE age = 20;
10. GROUP BY 语句
GROUP BY
语句用于结合聚合函数,根据一个或多个列对结果集进行分组。
SELECT 列名, 聚合函数(列名)
FROM 表名
WHERE 条件
GROUP BY 列名;
例如,按年龄分组,计算每个年龄的学生数量:
SELECT age, COUNT(*) as student_count
FROM students
GROUP BY age;
11. HAVING 语句
HAVING
语句用于对GROUP BY
子句的结果进行过滤。与WHERE
子句类似,但WHERE
子句在数据分组之前进行过滤,而HAVING
子句在数据分组之后进行过滤。
SELECT 列名, 聚合函数(列名)
FROM 表名
WHERE 条件
GROUP BY 列名
HAVING 聚合函数(列名) 条件;
例如,找出学生数量超过10的年龄组:
SELECT age, COUNT(*) as student_count
FROM students
GROUP BY age
HAVING COUNT(*) > 10;
12. SQL函数
SQL提供了大量的内置函数,用于在查询中执行各种操作,如字符串处理、日期计算、数值计算等。这里先举个例子看一下怎么使用,下文会总结一下SQL的函数。
例如,使用UPPER()
函数将学生姓名转换为大写:
SELECT UPPER(name) as upper_name FROM students;
四、SQL内置函数总结
字符串函数
CONCAT(string1, string2, ...)
: 连接两个或多个字符串。LENGTH(string)
: 返回字符串的长度。UPPER(string)
: 将字符串中的所有字符转换为大写。LOWER(string)
: 将字符串中的所有字符转换为小写。SUBSTRING(string, start, length)
: 从字符串中提取子字符串。TRIM(string)
: 去除字符串两侧的空格。LTRIM(string)
: 去除字符串左侧的空格。RTRIM(string)
: 去除字符串右侧的空格。REPLACE(string, search_string, replacement_string)
: 在字符串中替换子字符串。
数值函数
ABS(number)
: 返回数的绝对值。ROUND(number, decimals)
: 对数进行四舍五入,可指定小数位数。CEIL(number)
或CEILING(number)
: 返回大于或等于指定数字的最小整数。FLOOR(number)
: 返回小于或等于指定数字的最大整数。MOD(number, divisor)
: 返回两数相除的余数。SQRT(number)
: 返回数的平方根。POWER(base, exponent)
: 返回数的乘方结果。
日期和时间函数
NOW()
: 返回当前日期和时间。CURDATE()
: 返回当前日期。CURTIME()
: 返回当前时间。DATE_ADD(date, INTERVAL value unit)
: 向日期添加时间间隔。DATEDIFF(date1, date2)
: 返回两个日期之间的天数差。DATE_FORMAT(date, format)
: 根据指定的格式返回日期字符串。DAY(date)
: 返回日期的天部分。MONTH(date)
: 返回日期的月部分。YEAR(date)
: 返回日期的年部分。
聚合函数
COUNT(column_name)
: 计算某列的行数(非NULL值)。SUM(column_name)
: 计算某列的总和(数值列)。AVG(column_name)
: 计算某列的平均值(数值列)。MAX(column_name)
: 返回某列的最大值。MIN(column_name)
: 返回某列的最小值。GROUP_CONCAT(column_name)
: 连接某个分组内的所有值,生成一个字符串结果。
转换函数
CAST(value AS type)
: 将值转换为指定的数据类型。CONVERT(value, type)
: 将值转换为另一种数据类型(某些数据库系统支持)。
其他函数
IF(condition, value_if_true, value_if_false)
: 根据条件返回两个值之一。CASE
: 类似于编程语言中的switch语句,允许在SQL查询中进行条件逻辑。COALESCE(value1, value2, ...)
: 返回参数列表中的第一个非NULL值。NULLIF(expression1, expression2)
: 如果两个表达式相等,则返回NULL;否则返回第一个表达式的值。
五、总结
这篇文章我们介绍了SQL的增删查改操作,并总结了一些SQL的高级用法和内置函数。大家可以把每个用法都练习一下,也可以当作一个文档在使用的时候来查询一下。