> 文章列表 > 【Sql】sql语法基础随记

【Sql】sql语法基础随记

【Sql】sql语法基础随记

文章目录

    • 1. 插入
    • 2. 通配符
    • 3. 计算字段
    • 4. 汇总
    • 5. 文本处理
    • 6. 分组
    • 7. 视图
    • 8. 存储过程
    • 9. 事务管理
    • 10. 权限管理

1. 插入

普通插入

INSERT INTO mytable(col1, col2)
VALUES(val1, val2);

插入检索出来的数据

INSERT INTO mytable1(col1, col2)
SELECT col1, col2
FROM mytable2;

将一个表的内容插入到一个新表

CREATE TABLE newtable AS
SELECT * FROM mytable;

2. 通配符

  • % 匹配 >=0 个任意字符;
  • _ 匹配 ==1 个任意字符;
  • [ ]可以匹配集合内的字符,例如 [ab] 将匹配字符 a 或者 b。用脱字符 ^ 可以对其进行否定,也就是不匹配集合内的字符。使用
    Like 来进行通配符匹配。
SELECT *
FROM mytable
WHERE col LIKE '[^AB]%'; -- 不以 A 和 B 开头的任意文本

3. 计算字段

计算字段通常需要使用 AS 来取别名,否则输出的时候字段名为计算表达式。

SELECT col1 * col2 AS alias
FROM mytable;

CONCAT() 用于连接两个字段。许多数据库会使用空格把一个值填充为列宽,因此连接的结果会出现一些不必要的空格,使用 TRIM() 可以去除首尾空格。

SELECT CONCAT(TRIM(col1), '(', TRIM(col2), ')') AS concat_col
FROM mytable;

4. 汇总

AVG() 会忽略 NULL 行。

使用 DISTINCT 可以让汇总函数值汇总不同的值。

SELECT AVG(DISTINCT col1) AS avg_col
FROM mytable;

5. 文本处理

LEFT()函数用于从左侧开始提取一个字符串的指定数量的字符。如果你有一个字符串 ‘Hello World’,你可以使用以下 SQL 语句来提取前 5 个字符。

SELECT LEFT('Hello World', 5);

6. 分组

分组就是把具有相同的数据值的行放在同一组中。

可以对同一分组数据使用汇总函数进行处理,例如求分组数据的平均值等。

SELECT col, COUNT(*) AS num
FROM mytable
GROUP BY col;

GROUP BY 自动按分组字段进行排序,ORDER BY 也可以按汇总字段来进行排序。

SELECT col, COUNT(*) AS num
FROM mytable
GROUP BY col
ORDER BY num;

WHERE 过滤行,HAVING 过滤分组,行过滤应当先于分组过滤。

SELECT col, COUNT(*) AS num
FROM mytable
WHERE col > 2
GROUP BY col
HAVING num >= 2;

分组规定:

  • GROUP BY 子句出现在 WHERE 子句之后,ORDER BY 子句之前;
  • 除了汇总字段外,SELECT 语句中的每一字段都必须在 GROUP BY 子句中给出;
  • NULL 的行会单独分为一组。

7. 视图

视图在一定程度上可以看作是基础表的一个实时快照,它随着基础表数据的变化而动态地更新自己的数据

  • 简化复杂查询:当需要执行复杂的 SQL 查询语句时,可以通过创建视图将其简化。这样可以提高 SQL 查询语句的可读性和维护性。
  • 保护敏感数据:在某些情况下,需要限制用户访问敏感数据。此时可以创建视图,将需要保护的数据筛选出来,然后将其授权给需要访问该数据的用户,而不直接授权基础表。
  • 更改数据模型:在数据模型更改时,可以使用视图来确保现有的应用程序仍然可以访问数据。创建视图,将新的数据模型映射到视图中,然后更新应用程序代码以使用视图而不是基础表。
  • 重用查询逻辑:在多个查询中需要重复使用相同的查询逻辑时,可以使用视图将其封装起来,方便重用。
CREATE VIEW myview AS
SELECT Concat(col1, col2) AS concat_col, col3*col4 AS compute_col
FROM mytable
WHERE col5 = val;

具体使用时,可以将对视图的操作权限授予角色role_name。

GRANT SELECT ON myview TO role_name;

然后,将角色授予多个用户来实现。

GRANT role_name TO user1, user2, user3;

注意:如果视图中符合条件的记录被删除,则基础表中相应的记录也将被删除。

8. 存储过程

存储过程是一组预编译SQL语句的集合,减少SQL语句的解析和编译时间,提高数据库的执行效率。

9. 事务管理

基本术语:

  • 事务(transaction)指一组 SQL 语句;
  • 回退(rollback)指撤销指定 SQL 语句的过程;
  • 提交(commit)指将未存储的 SQL 语句结果写入数据库表;
  • 保留点(savepoint)指事务处理中设置的临时占位符(placeholder),你可以对它发布回退(与回退整个事务处理不同)。

不能回退 SELECT 语句,回退 SELECT 语句也没意义;也不能回退 CREATE 和 DROP 语句。

10. 权限管理

MySQL 的账户信息保存在 mysql 这个数据库中。

穿搭知识