MySQL 数据库 SQL 语句全面总结

一、引言

在本学期的《MySQL 数据库技术》课程学习中,我们接触到了丰富多样的 SQL 语句,这些语句是操作 MySQL 数据库的核心工具。为了更好地掌握它们,本文将对各类 SQL 语句进行系统性的知识整理,涵盖使用规范、应用规则、易错点以及实用实战案例等方面。

二、数据定义语言(DDL)

(一)CREATE 语句

  1. 使用规范:用于创建数据库、表、视图、索引等数据库对象。
    • 创建数据库:CREATE DATABASE database_name;
    • 创建表:CREATE TABLE table_name (column1 datatype, column2 datatype,...);
  2. 应用规则:创建表时需明确各列的数据类型,如INT(整数)、VARCHAR(可变长度字符串)、DATE(日期)等 ,并合理设置主键、外键等约束。
  3. 易错点:数据类型选择不当可能导致存储异常;定义主键时若未确保唯一性和非空性,会引发错误。
  4. 实例演示
    -- 创建名为test_db的数据库
    CREATE DATABASE test_db;
    -- 在test_db数据库中创建students表
    USE test_db;
    CREATE TABLE students (
        student_id INT PRIMARY KEY,
        student_name VARCHAR(50),
        age INT
    );

    (二)ALTER 语句

  5. 使用规范:用于修改已存在数据库对象的结构,如添加列、修改列的数据类型、删除列等。
    • 添加列:ALTER TABLE table_name ADD column_name datatype;
    • 修改列:ALTER TABLE table_name MODIFY column_name new_datatype;
    • 删除列:ALTER TABLE table_name DROP column_name;
  6. 应用规则:修改列数据类型时要注意数据兼容性,避免数据丢失或转换错误。
  7. 易错点:在生产环境中直接使用ALTER TABLE修改表结构可能影响业务连续性,且修改数据类型时若存在不兼容数据会报错。
  8. 实例演示
    -- 向students表添加gender列
    ALTER TABLE students ADD gender VARCHAR(10);
    -- 修改age列数据类型为BIGINT
    ALTER TABLE students MODIFY age BIGINT;
    -- 删除gender列
    ALTER TABLE students DROP gender;

    (三)DROP 语句

  9. 使用规范:用于删除数据库、表、视图、索引等对象。
    • 删除数据库:DROP DATABASE database_name;
    • 删除表:DROP TABLE table_name;
  10. 应用规则:删除操作不可逆,执行前需谨慎确认。
  11. 易错点:误删重要数据库或表会造成严重数据丢失,且无简便恢复方法(除非有备份)。
  12. 实例演示
    -- 删除test_db数据库
    DROP DATABASE test_db;
    -- 删除students表(假设在其他数据库中已创建)
    DROP TABLE students;

    三、数据操作语言(DML)

    (一)INSERT 语句

  13. 使用规范:用于向表中插入数据。
    • 插入完整行:INSERT INTO table_name (column1, column2,...) VALUES (value1, value2,...);
    • 插入部分列:INSERT INTO table_name (column1, column3) VALUES (value1, value3);
  14. 应用规则:插入值的数据类型和顺序要与列定义匹配,对于有默认值的列,若不指定值则会使用默认值。
  15. 易错点:值的数量与列的数量不匹配、数据类型不匹配会导致插入失败。
  16. 实例演示
    -- 向students表插入一条完整记录
    INSERT INTO students (student_id, student_name, age) VALUES (1, 'Alice', 20);
    -- 只插入student_id和student_name
    INSERT INTO students (student_id, student_name) VALUES (2, 'Bob');

    (二)UPDATE 语句

  17. 使用规范:用于修改表中已存在的数据。
    • 基本语法:UPDATE table_name SET column1 = value1, column2 = value2,... WHERE condition;
  18. 应用规则WHERE子句用于限定修改范围,若无WHERE子句则会修改表中所有行。
  19. 易错点:忘记写WHERE子句可能导致全表数据被错误修改。
  20. 实例演示
    -- 将students表中student_id为1的学生年龄改为21
    UPDATE students SET age = 21 WHERE student_id = 1;

    (三)DELETE 语句

  21. 使用规范:用于删除表中的数据行。
    • 基本语法:DELETE FROM table_name WHERE condition;
  22. 应用规则:同样通过WHERE子句指定删除条件,若无WHERE子句将删除表中所有数据。
  23. 易错点:误删数据且无备份时难以恢复,使用时务必谨慎。
  24. 实例演示
    -- 删除students表中student_id为2的学生记录
    DELETE FROM students WHERE student_id = 2;

    四、数据查询语言(DQL) - SELECT 语句

    (一)基本查询

  25. 使用规范SELECT column1, column2,... FROM table_name;
  26. 应用规则:可选择特定列查询,也可用*查询所有列;可使用AS关键字为列或表取别名。
  27. 易错点:查询所有列(SELECT * )可能导致性能问题,尤其是表结构复杂、列数多的情况。
  28. 实例演示
    -- 查询students表的所有列
    SELECT * FROM students;
    -- 查询student_name和age列,并给列取别名
    SELECT student_name AS name, age AS student_age FROM students;

    (二)条件查询

  29. 使用规范SELECT column1, column2,... FROM table_name WHERE condition;
  30. 应用规则WHERE子句中可使用比较运算符(=><>=<=!= )、逻辑运算符(ANDORNOT )、模糊匹配(LIKE )、范围判断(BETWEEN... AND... )、空值判断(IS NULLIS NOT NULL )等。
  31. 易错点:模糊匹配时通配符使用不当,如%_含义混淆;逻辑运算符优先级理解错误可能导致条件判断错误。
  32. 实例演示
    -- 查询年龄大于20的学生姓名和年龄
    SELECT student_name, age FROM students WHERE age > 20;
    -- 查询姓名以'A'开头的学生
    SELECT student_name FROM students WHERE student_name LIKE 'A%';
    -- 查询年龄在18到22之间的学生
    SELECT student_name, age FROM students WHERE age BETWEEN 18 AND 22;

    (三)分组查询

  33. 使用规范SELECT column1, aggregate_function(column2) FROM table_name GROUP BY column1;
  34. 应用规则:常用聚合函数有SUM(求和)、AVG(求平均值)、COUNT(计数)、MAX(求最大值)、MIN(求最小值) ;GROUP BY子句用于指定分组依据。
  35. 易错点:在SELECT子句中出现未在GROUP BY中指定的非聚合列可能导致错误(不同数据库规则有差异)。
  36. 实例演示
    -- 按年龄分组,统计每个年龄的学生人数
    SELECT age, COUNT(student_id) AS student_count FROM students GROUP BY age;
    -- 计算每个年龄学生的平均年龄(实际无意义,仅作演示)
    SELECT age, AVG(age) AS avg_age FROM students GROUP BY age;

    (四)连接查询

  37. 内连接(INNER JOIN)
    • 使用规范SELECT column1, column2,... FROM table1 INNER JOIN table2 ON table1.column = table2.column;
    • 应用规则:用于获取两个表中满足连接条件的行,连接条件通常是两表中相关列相等。
    • 易错点:连接条件错误可能导致结果集数据不准确。
    • 实例演示
      -- 假设存在scores表,有student_id和score列,查询学生姓名和对应成绩
      SELECT s.student_name, sc.score
      FROM students s
      INNER JOIN scores sc ON s.student_id = sc.student_id;

    • 左连接(LEFT JOIN)
      • 使用规范SELECT column1, column2,... FROM table1 LEFT JOIN table2 ON table1.column = table2.column;
      • 应用规则:返回左表(table1 )的所有行和右表(table2 )满足连接条件的行,若右表无匹配行则用NULL填充。
      • 易错点:对左连接和内连接结果差异理解不清,可能导致选择错误连接类型。
      • 实例演示
        -- 查询所有学生姓名及对应成绩(即使无成绩记录也显示学生信息)
        SELECT s.student_name, sc.score
        FROM students s
        LEFT JOIN scores sc ON s.student_id = sc.student_id;
        
        

      • 右连接(RIGHT JOIN)
        • 使用规范SELECT column1, column2,... FROM table1 RIGHT JOIN table2 ON table1.column = table2.column;
        • 应用规则:与左连接相反,返回右表的所有行和左表满足连接条件的行,左表无匹配行时用NULL填充。
        • 易错点:同左连接易错点,混淆不同连接类型的结果。
        • 实例演示
          -- 假设需求变为以scores表为主,查询成绩及对应学生姓名(即使学生信息缺失也显示成绩记录)
          SELECT s.student_name, sc.score
          FROM students s
          RIGHT JOIN scores sc ON s.student_id = sc.student_id;

          (五)子查询

        • 使用规范:子查询是在一个SELECT语句中嵌套另一个SELECT语句,可用于WHERE子句、FROM子句等。
          • WHERE子句中:SELECT column1, column2,... FROM table_name WHERE column IN (subquery);
        • 应用规则:子查询结果可作为条件判断依据,如INANYALL等操作符可与子查询配合使用;相关子查询会根据外部查询的每一行来执行。
        • 易错点:相关子查询可能导致性能问题,因为其执行次数较多;子查询结果集过大也可能影响性能。
        • 实例演示
          -- 查询成绩高于平均成绩的学生姓名和成绩
          SELECT student_name, score
          FROM students s
          JOIN scores sc ON s.student_id = sc.student_id
          WHERE sc.score > (SELECT AVG(score) FROM scores);

          五、数据控制语言(DCL)

          (一)GRANT 语句

        • 使用规范:用于授予用户对数据库对象的权限。
          • 基本语法:GRANT privilege_type ON object_name TO user_name;
        • 应用规则privilege_type可包括SELECTINSERTUPDATEDELETE等权限;object_name可以是数据库、表等;user_name指定被授权用户。
        • 易错点:授予过多权限可能带来安全风险,如将ALL PRIVILEGES随意授予普通用户。
        • 实例演示
          -- 授予user1用户对students表的SELECT权限
          GRANT SELECT ON students TO user1;

          (二)REVOKE 语句

        • 使用规范:用于收回用户已被授予的权限。
          • 基本语法:REVOKE privilege_type ON object_name FROM user_name;
        • 应用规则:与GRANT语句对应,明确要收回的权限、对象和用户。
        • 易错点:误收回关键权限可能影响业务正常运行,操作前需确认。
        • 实例演示
          -- 收回user1用户对students表的SELECT权限
          REVOKE SELECT ON students FROM user1;

          六、总结与反思

          通过对各类 SQL 语句的整理,我们对 MySQL 数据库操作有了更系统的认识。在学习过程中,我发现自己对复杂连接查询和性能优化方面还存在不足。对于连接查询,尤其是多表连接时,连接条件的准确设置和不同连接类型的选择还需进一步练习;在性能优化上,子查询和索引的合理使用理解不够深入。后续我将通过更多实战项目来加强这些方面的学习,同时定期复习 SQL 语句的使用,不断提升自己在 MySQL 数据库操作方面的能力。

           

          希望这篇博文能对大家理解和掌握 SQL 语句有所帮助,也欢迎大家在评论区交流学习心得和遇到的问题。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值