SQL语句学习总结 | 青训营

118 阅读3分钟

SQL

注释

  • 单行注释:--注释#注释(MySql特有)
  • 多行注释:/*注释*/

DDL(定义数据库、表、字段)

数据库

  • SHOW DATABASES;
  • SELECT DATABASE();:查看当前数据库名称
  • CREATE DATABASE [IF NOT EXISTS] 数据库名称 [DEFAULT CHARSET 字符集][COLLATE 排序规则];
  • DROP DATABASE [IF EXISTS] 数据库名称;
  • USE 数据库名称:使用某个数据库

查询

  • SHOW TABLES;
  • DESC 表名;:查询表结构
  • SHOW CREATE TABLE 表名;:查询创建表的语句

创建

CREATE TABLE 表名(
    字段1 字段1的类型[COMMENT 字段1的注释],
    字段n 字段n的类型[COMMENT 字段n的注释]
)[COMMENT 表注释];

修改

  • ALTER TABLE 表名 ADD 字段名 类型(长度) [COMMENT 注释][约束];:添加字段
  • ALTER TABLE 表名 MODIFY:可以修改数据类型,或者字段名和字段类型一起修改
  • ALTER TABLE 表名 DROP 字段;
  • ALTER TABLE 表名 RENAME TO 新表名;

删除

  • DROP TABLE [IF EXISTS] 表名;
  • TRUNCATE TABLE 表名;:删除表后重新创建相同的表,相当于清除所有数据

DML(增删改)

  • INSERT INTO 表名() VALUES();:添加的数据填写指定字段
  • INSERT INTO 表名 VALUES();:添加的数据填写全部字段

以上两种方法的VALUES后都可以跟不止一个括号,表示批量添加数据,用逗号隔开每条数据

DELETE FROM 表名 [WHERE 条件];:删除的是整行数据;如果只删除某个字段,要使用UPDATE将某个字段设为null

如果没有WHERE条件判断,则默认删除所有数据

UPDATE 表名 SET 字段1=值1, 字段2=值2, ... [WHERE 条件];

如果没有WHERE条件判断,则默认更改所有数据的指定字段

DQL(查)

SELECT

​ 字段列表

FROM

​ 表名列表

WHERE

​ 条件列表

GROUP BY

​ 分组字段列表

HAVING

​ 分组后条件列表

ORDER BY

​ 排序字段列表

LIMIT

​ 分页参数

基础查询

  • SELECT 字段1,字段2,... FROM 表名;
  • SELECT * FROM 表名;
  • SELECT 字段1 [AS 别名1],字段2 [AS 别名2],... FROM 表名; :取别名,AS可以不写,只写字段+别名
  • SELECT DISTINCT 字段列表 FROM 表名;:去重

条件查询

SELECT 字段列表 FROM 表名 WHERE 条件列表;:条件列表可以是比较运算符或逻辑运算符

聚合函数

聚合函数都是将作为一个整体,进行纵向计算

  • count
  • max
  • min
  • avg
  • sum

分组查询

SELECT 字段列表 FROM 表名 [WHERE 条件] GROUP BY 分组字段名 [HAVING 分组后过滤条件];

WHEREHAVING的区别

  • where在分组之前,having在分组之后
  • where不能用聚合函数,having可以用

注意事项

  • 执行顺序:where>聚合函数>having
  • 分组之后,查询的字段一般为聚合函数和分组字段,其余字段无意义

排序查询

SELECT 字段列表 FROM 表名 ORDER BY 字段1 排序方式1, 字段2 排序方式2;

排序方式

  • ASC:升序(默认值)
  • DESC:降序

注意事项

先根据第一个字段排序,相同时才会根据第二个字段排序

分页查询

SELECT 字段列表 FROM 表名 LIMIT 起始索引,查询记录数;

注意事项

  • 起始索引=(查询页码-1)*每页显示记录数
  • 分页查询是数据库方言,MySQL中的关键字是LIMIT
  • 如果查询的是第一页数据,起始索引可以省略

DQL执行顺序

  1. FROM
  2. WHERE
  3. GROUP BY, HAVING
  4. SELECT
  5. ORDER BY
  6. LIMIT

DCL(控制)