SQL入门全攻略(二)

一、引言

在上一篇文章中,我们初步了解了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的高级用法和内置函数。大家可以把每个用法都练习一下,也可以当作一个文档在使用的时候来查询一下。

  • 34
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

会三十六变的猫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值