Skip to content

SQL语法基础

基础

  • 什么是 SQL

    SQL(Structured Query Language,结构化查询语言)是操作关系型数据库的标准语言,用于定义、查询、更新和管理数据。

  • 通用特性

    • 大小写不敏感 :关键字、库名、表名、列名在 Windows 平台默认不区分大小写;Linux 区分,建议统一小写 + 下划线命名。

    • 语句结束符:单条或多条语句均以英文分号 ; 结束。

    • 可换行缩进:提高可读性,解析器会忽略多余空白。

    • 支持表达式与函数SELECT 1+1, NOW(); 即可直接返回结果。

  • 注释

    SQL 支持以下三种注释:

    sql
    # 注释
    SELECT *
    FROM mytable; -- 注释
    /* 注释1
      注释2 */
  • SQL 四大分类(CRUD 视角)

    分类缩写常见动词典型作用
    DDLData Definition LanguageCREATE / DROP / ALTER定义库、表、列、索引等结构
    DMLData Manipulation LanguageINSERT / UPDATE / DELETE增删改“行”数据
    DQLData Query LanguageSELECT查询数据(只读)
    DCLData Control LanguageGRANT / REVOKE权限、事务、安全

DDL操作(数据定义)

库操作

  • 查看当前所有库

    sql
    SHOW DATABASES;
  • 查看当前使用的库

    sql
    SELECT DATABASES();
  • 使用某个库

    sql
    USE 库名;
  • 创建库

    sql
    CREATE DATABASE 库名 CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

    CHARACTER SET : 字符集,推荐utf8mb4

    COLLATE : 排序方式, 推荐utf8mb4_unicode_ci

  • 删除库

    sql
    DROP DATABASE 库名;

表操作

  • 查看当前库中的表
    sql
    SHOW TABLES;
  • 创建表
    sql
    CREATE TABLE 表名(
      列1 列类型 是否可空,
      列2 列类型 是否可空,
      ...);
  • 删除表
    sql
    DROP TABLE 表名;
    
    DROP TABLE IF EXISTS 表名;

DML操作(数据操作)

  • 插入数据

    sql
    -- 基础语法
    INSERT INTO 表名(列1, 列2, ...)
    VALUES(值1, 值2, ...), (值1, 值2, ...), ...;
    
    -- 示例: 
    -- 仅插入id列数据
    INSERT INTO student(id)
    VALUES(10001), (10002), (10003);
    
    -- 插入全部列数据
    INSERT INTO student(id, name, age)
    VALUES(10001, '周杰轮', 31), (10002, '王力宏', 33), (10003, '林俊杰', 26);
    
    /* 插入全部列数据(快捷写法)
       此时参数顺序要和列名顺序一致 */
    INSERT INTO student
    VALUES(10001, '周杰轮', 31), (10002, '王力宏', 33), (10003, '林俊杰', 26);
  • 删除数据

    sql
    -- 基础语法
    DELETE FROM 表名 [WHERE 条件判断];
    
    -- 示例:
    -- 删除 student 表中 name = 林俊杰 的数据
    DELETE FROM student
    WHERE name = '林俊杰';
    -- 删除 student 表中 age > 33 的数据
    DELETE FROM student
    WHERE age>33;
    -- 删除 student 表中全部数据
    DELETE FROM student;
  • 修改数据

    sql
    -- 基础语法
    UPDATE 表名
    SET= 值 [WHERE 条件判断];
    
    -- 示例:
    -- 在 student 将 id = 10001 的 同学的 name 改为 陈奕迅
    UPDATE student
    SET name = '陈奕迅'
    WHERE id = 10001;
    
    -- 在student表中修改全部数据的 age 为 11
    UPDATE student SET age = 11;

DQL操作(数据控制)

  • 基础查询

    sql
    -- 基本语法
    SELECT 列名1, 列名2, ... 
    FROM 表名
    [WHERE 条件]
    [GROUP BY 分组列]
    [HAVING 分组条件]
    [ORDER BY 排序列 [ASC|DESC]]
    [LIMIT 行数];
    
    -- 示例
    -- 查询 student 表中 id, name 两列
    SELECT id, name FROM student;
    -- 查询 student 表中 全部列
    SELECT * FROM student;
    --
  • 条件查询(过滤)

    sql
    -- 基础语法
    SELECT 列1, 列2
    FROM 表名
    WHERE 条件;
    
    -- 示例
    -- 查询 student 表中 age >= 18 的同学的 name 和 id
    SELECT id, name
    FROM student
    WHERE age >= 18;
  • 分组聚合

    sql
    -- 基础语法
    -- 要注意 select 后的列要和 GROUP BY 后的列一致
    SELECT 列1, 列2, ...|聚合函数
    FROM 表名
    WHERE 条件
    GROUP BY 列1, 列2...;
    
    -- 示例:
    -- 按性别统计学生的数量
    SELECT gender, COUNT(*) AS stu_count
    FROM student
    GROUP BY gender;
    
    -- 分组前筛选(WHERE)
    -- 只统计 age > 18 的学生, 按性别统计学生的数量
    SELECT gender, COUNT(*) AS oldstu_count
    FROM student
    WHERE age > 18
    GROUP BY gender;
    
    
    -- 分组后筛选(HAVING)
    -- 统计各个部门平均薪资, 只显示平均薪资大于8000的部门
    SELECT department, AVG(salary) AS avg_salary
    FROM employees
    GROUP BY department
    HAVING AVG(salary) > 8000;
    • 常用聚合函数
      • count() : 计数 COUNT(*)统计行数
      • SUM() : 求和 SUM(salary)计算总和
      • AVG() : 求平均值 AVG(age)计算平均年龄
      • MAX() : 最大值 MAX(price)找出最高价格
      • MIN() : 最小值 MIN(date)找出最早日期
  • 排序分页

    sql
    -- 排序基础语法
    SELECT 列1, 列2, ...|聚合函数 FROM 表名
    WHERE 条件
    GROUP BY 列1, 列2, ...
    ORDER BY 列 [ASC|DESC];  -- ASC: 升序(默认); DESC: 降序
    
    -- 示例:
    -- 员工表中先按部门升序,再按薪资降序
    SELECT name, department, salary
    FROM employees
    ORDER BY department ASC, salary DESC;
    
    -- 按名字长度排序
    SELECT name
    FROM employees
    ORDER BY LENGTH(name);
    
    -- 按计算结果排序
    SELECT prodect_name, (price * discount) AS final_price
    FROM products
    ORDER BY final_price DESC
    sql
    -- 分页基础语法
    SELECT 列1, 列2, ...|聚合函数 FROM 表名
    WHERE 条件
    GROUP BY 列1, 列2, ...
    ORDER BY 列 [ASC|DESC]
    LIMIT n[,m];  -- n: 偏移量, 跳过前 n 个数据; m: 每页 m 条数据
    
    -- 示例
    -- 获取第2页数据,每页10条
    SELECT *
    FROM products
    ORDER BY id
    LIMIT 10, 10;

Released under the MIT License.