入门SQL一篇文章就够了

SQL(Structured Query Language)即结构化查询语言,是用于管理关系型数据库的标准语言。

一、基础环境搭建

  1. 安装数据库管理系统(DBMS)

    • 常见的有MySQL、Oracle、SQL Server等。以MySQL为例,你可以从官方网站下载适合你操作系统的安装包进行安装。在安装过程中,需要注意设置好用户名、密码等相关参数。
    • 安装完成后,启动数据库服务,这样就可以开始使用SQL来操作数据库了。
  2. 选择SQL客户端工具

    • 有命令行工具和图形化工具。命令行工具如MySQL自带的mysql命令行客户端,通过在终端中输入命令来操作数据库。图形化工具像Navicat、SQLyog等,它们提供了更直观的界面,方便初学者操作。以Navicat为例,在安装并连接到你的数据库服务器后,就可以通过简单的界面操作来执行SQL语句。

二、SQL基础语法学习

  1. 数据定义语言(DDL)

    • 创建数据库(CREATE DATABASE)
      • 例如,在MySQL中创建一个名为testdb的数据库的语句是:CREATE DATABASE testdb;。这行语句告诉数据库管理系统创建一个新的数据库,名称为testdb
    • 创建表(CREATE TABLE)
      • 假设要创建一个学生表students,包含学生ID(student_id)、姓名(student_name)和年龄(student_age)三个字段。语句可以是:
        CREATE TABLE students (
            student_id INT PRIMARY KEY AUTO_INCREMENT,
            student_name VARCHAR(50),
            student_age INT
        );
        
      • 这里INT表示整数类型,VARCHAR(50)表示最大长度为50的可变长字符串类型。PRIMARY KEY指定student_id为表的主键,AUTO_INCREMENT表示该字段的值会自动递增。
    • 修改表(ALTER TABLE)
      • 如果要在students表中添加一个新的字段student_gender,类型为CHAR(1)(表示长度为1的定长字符串),可以使用以下语句:ALTER TABLE students ADD COLUMN student_gender CHAR(1);
    • 删除表(DROP TABLE)
      • 要删除students表,可以使用DROP TABLE students;。这个操作会永久删除表及其所有数据,所以要谨慎使用。
  2. 数据操作语言(DML)

    • 插入数据(INSERT INTO)
      • students表中插入一条学生记录,例如插入一个名为“张三”,年龄为20岁的学生(假设性别字段暂不考虑):
        INSERT INTO students (student_name, student_age)
        VALUES ('张三', 20);
        
    • 更新数据(UPDATE)
      • 如果要将名为“张三”的学生年龄更新为21岁,可以使用以下语句:
        UPDATE students
        SET student_age = 21
        WHERE student_name = '张三';
        
      • 这里WHERE子句用于指定要更新的记录条件,只有满足student_name = '张三'这个条件的记录才会被更新。
    • 删除数据(DELETE FROM)
      • 要删除名为“张三”的学生记录,可以使用:
        DELETE FROM students
        WHERE student_name = '张三';
        
  3. 数据查询语言(DQL)

    • 简单查询(SELECT)
      • 查询students表中的所有记录:
        SELECT * FROM students;
        
      • 这里*表示选择所有列。如果只想查询学生姓名和年龄,可以使用:SELECT student_name, student_age FROM students;
    • 条件查询(WHERE)
      • 查询年龄大于20岁的学生记录:
        SELECT * FROM students
        WHERE student_age > 20;
        
    • 排序查询(ORDER BY)
      • 按照学生年龄升序查询学生记录:
        SELECT * FROM students
        ORDER BY student_age ASC;
        
      • 如果要降序查询,可以将ASC(升序)改为DESC(降序)。
    • 聚合函数查询(SUM、AVG、COUNT等)
      • 计算学生的平均年龄:
        SELECT AVG(student_age) FROM students;
        
      • 统计学生的人数:
        SELECT COUNT(*) FROM students;
        
  4. 数据控制语言(DCL)

    • 授权(GRANT)
      • 例如,授予用户user1testdb数据库中的students表的查询权限:
        GRANT SELECT ON testdb.students TO user1;
        
    • 收回权限(REVOKE)
      • 收回用户user1testdb数据库中的students表的查询权限:
        REVOKE SELECT ON testdb.students FROM user1;
        

三、高级主题学习

  1. 连接查询(JOIN)

    • 内连接(INNER JOIN)
      • 假设有两个表,students表(包含学生ID和姓名)和scores表(包含学生ID和成绩)。要查询学生姓名和对应的成绩,可以使用内连接:
        SELECT students.student_name, scores.score
        FROM students
        INNER JOIN scores ON students.student_id = scores.student_id;
        
      • 内连接会返回两个表中满足连接条件(students.student_id = scores.student_id)的记录组合。
    • 左连接(LEFT JOIN)
      • 如果想查询所有学生的姓名以及他们对应的成绩(即使有些学生没有成绩记录),可以使用左连接:
        SELECT students.student_name, scores.score
        FROM students
        LEFT JOIN scores ON students.student_id = scores.student_id;
        
      • 左连接会返回左表(students表)中的所有记录,以及右表(scores表)中满足连接条件的记录。如果右表中没有匹配的记录,则对应的列值为NULL
    • 右连接(RIGHT JOIN)和全连接(FULL JOIN)
      • 右连接与左连接类似,只是返回右表中的所有记录以及左表中满足连接条件的记录。全连接会返回两个表中的所有记录组合,只要其中一个表中有匹配的记录。不过全连接在某些数据库(如MySQL)中的实现方式可能略有不同,需要注意。
  2. 子查询

    • 子查询是嵌套在其他查询中的查询。例如,要查询成绩高于平均成绩的学生姓名。首先计算平均成绩:
      SELECT AVG(score) FROM scores;
      
      • 然后将这个查询作为子查询,嵌入到主查询中:
        SELECT students.student_name
        FROM students
        INNER JOIN scores ON students.student_id = scores.student_id
        WHERE scores.score > (SELECT AVG(score) FROM scores);
        
    • 子查询可以出现在WHERE子句、FROM子句等多个位置,为复杂的查询提供了灵活的解决方案。
  3. 视图(VIEW)

    • 视图是一种虚拟表,它是基于一个或多个表(或视图)的查询结果。例如,创建一个视图来显示学生姓名和成绩:
      CREATE VIEW student_scores_view AS
      SELECT students.student_name, scores.score
      FROM students
      INNER JOIN scores ON students.student_id = scores.student_id;
      
      • 之后可以像查询普通表一样查询这个视图:
        SELECT * FROM student_scores_view;
        
      • 视图可以简化复杂的查询操作,并且可以根据不同的需求创建多个视图,方便用户使用。
  4. 存储过程(Stored Procedure)和函数(Function)

    • 存储过程
      • 存储过程是一组预编译的SQL语句,存储在数据库中,可以被调用执行。例如,创建一个存储过程来插入一条学生记录:
        DELIMITER //
        CREATE PROCEDURE insert_student(IN p_name VARCHAR(50), IN p_age INT)
        BEGIN
            INSERT INTO students (student_name, student_age)
            VALUES (p_name, p_age);
        END //
        DELIMITER ;
        
      • 可以使用CALL命令来调用这个存储过程:CALL insert_student('李四', 22);。存储过程可以包含复杂的逻辑,如条件判断、循环等,并且可以提高数据库的性能,因为它是预编译的。
    • 函数
      • 函数与存储过程类似,但函数有返回值。例如,创建一个函数来计算两个数的和:
        DELIMITER //
        CREATE FUNCTION add_numbers(a INT, b INT) RETURNS INT
        BEGIN
            DECLARE result INT;
            SET result = a + b;
            RETURN result;
        END //
        DELIMITER ;
        
      • 可以在查询中调用这个函数:SELECT add_numbers(3, 5);。函数在需要返回一个计算结果的场景中非常有用。

四、实践与项目锻炼

  1. 数据库设计项目
    • 可以自己设计一个小型数据库,如一个图书馆管理系统数据库。确定数据库中的表结构,包括图书表(包含图书ID、书名、作者等字段)、读者表(包含读者ID、姓名等字段)、借阅记录表(包含借阅记录ID、图书ID、读者ID、借阅日期等字段)。然后使用SQL创建这些表,插入一些初始数据,并实现基本的查询和更新操作,如查询某本书的借阅情况、更新读者信息等。
  2. 数据分析项目
    • 从网上下载一些公开数据集,如气象数据、销售数据等。将数据导入到数据库中,然后使用SQL进行数据分析。例如,计算某个地区的平均气温、分析销售数据中的热门产品等。通过这些项目实践,可以加深对SQL的理解和应用能力。
posted @ 2024-12-18 10:49  软件职业规划  阅读(14)  评论(0编辑  收藏  举报