0
点赞
收藏
分享

微信扫一扫

Windows部署MinIO,搭建本地对象存储服务

闲云困兽 2024-06-28 阅读 28
sql数据库
一、SQL 概述

SQL (Structured Query Language) 是一种标准的数据库查询语言,用于管理和操作关系数据库。SQL 包含两部分:数据定义语言 (DDL) 和数据操作语言 (DML)。

二、数据定义语言 (DDL)

DDL 用于定义和修改数据库结构,包括创建、修改和删除数据库对象。

  1. 创建表

    CREATE TABLE 表名 (
        列名 数据类型 [约束条件],
        ...
        [PRIMARY KEY (主键列名)],
        [FOREIGN KEY (外键列名) REFERENCES 参考表(参考列名)]
    );
    

    示例:

    CREATE TABLE Sailors (
        sid INTEGER,
        sname CHAR(20),
        rating INTEGER,
        age FLOAT,
        PRIMARY KEY (sid)
    );
    
  2. 修改表

    ALTER TABLE 表名
    ADD 列名 数据类型 [约束条件];
    
    ALTER TABLE 表名
    DROP COLUMN 列名;
    
  3. 删除表

    DROP TABLE 表名;
    
三、数据操作语言 (DML)

DML 用于查询和修改数据库中的数据,包括插入、更新、删除和查询操作。

  1. 插入数据

    INSERT INTO 表名 (列名1, 列名2, ...)
    VALUES (1,2, ...);
    

    示例:

    INSERT INTO Sailors (sid, sname, rating, age)
    VALUES (1, 'Fred', 7, 22);
    
  2. 更新数据

    UPDATE 表名
    SET 列名1 =1, 列名2 =2, ...
    WHERE 条件;
    

    示例:

    UPDATE Sailors
    SET rating = 8
    WHERE sname = 'Fred';
    
  3. 删除数据

    DELETE FROM 表名
    WHERE 条件;
    

    示例:

    DELETE FROM Sailors
    WHERE sname = 'Fred';
    
  4. 查询数据

    SELECT [DISTINCT] 列名1, 列名2, ...
    FROM 表名
    [WHERE 条件]
    [GROUP BY 列名]
    [HAVING 条件]
    [ORDER BY 列名 [ASC|DESC]]
    [LIMIT 数量];
    

    示例:

    SELECT sname, age
    FROM Sailors
    WHERE age > 25
    ORDER BY age DESC;
    
四、查询语句的执行顺序

SQL 查询语句的执行顺序通常如下:

  1. FROM:确定查询的数据来源。
  2. WHERE:过滤数据。
  3. GROUP BY:对数据进行分组。
  4. HAVING:过滤分组后的数据。
  5. SELECT:选择要显示的列。
  6. DISTINCT:去除重复行。
  7. ORDER BY:对结果排序。
  8. LIMIT:限制返回的行数。
五、常用的SQL功能和操作
  1. DISTINCT
    去除查询结果中的重复行。

    SELECT DISTINCT 列名 FROM 表名;
    
  2. 排序 (ORDER BY)
    按指定列对查询结果进行排序,默认升序排列。

    SELECT 列名 FROM 表名 ORDER BY 列名 [ASC|DESC];
    
  3. 聚合函数

    • AVG(): 计算平均值
    • SUM(): 计算总和
    • COUNT(): 计算数量
    • MAX(): 计算最大值
    • MIN(): 计算最小值

    示例:

    SELECT AVG(age) FROM Sailors;
    
  4. 分组 (GROUP BY)
    将查询结果按指定列进行分组,并对每个分组应用聚合函数。

    SELECT 列名, 聚合函数(列名)
    FROM 表名
    GROUP BY 列名;
    
  5. HAVING
    用于过滤分组后的数据,类似于 WHERE,但作用于分组结果。

    SELECT 列名, 聚合函数(列名)
    FROM 表名
    GROUP BY 列名
    HAVING 聚合函数(列名) 条件;
    
  6. LIMIT
    限制返回的行数。

    SELECT 列名 FROM 表名 LIMIT 数量;
    
六、示例数据库

以下是一个示例数据库,包括三张表:Sailors, Boats, Reserves。

  1. Sailors 表

    CREATE TABLE Sailors (
        sid INTEGER PRIMARY KEY,
        sname CHAR(20),
        rating INTEGER,
        age FLOAT
    );
    

    示例数据:

    sidsnameratingage
    1Fred722
    2Jim239
    3Nancy827
  2. Boats 表

    CREATE TABLE Boats (
        bid INTEGER PRIMARY KEY,
        bname CHAR(20),
        color CHAR(10)
    );
    

    示例数据:

    bidbnamecolor
    101Ninared
    102Pintablue
    103Santa Mariared
  3. Reserves 表

    CREATE TABLE Reserves (
        sid INTEGER,
        bid INTEGER,
        day DATE,
        PRIMARY KEY (sid, bid, day),
        FOREIGN KEY (sid) REFERENCES Sailors(sid),
        FOREIGN KEY (bid) REFERENCES Boats(bid)
    );
    

    示例数据:

    sidbidday
    11022023-09-12
    21022023-09-13
七、高级查询
  1. 多表连接

    • 内连接(INNER JOIN):返回两个表中匹配的行。

      SELECT Person.name, Orders.order_id
      FROM Person
      INNER JOIN Orders ON Person.person_id = Orders.person_id;
      
    • 左连接(LEFT JOIN):返回包括左表中所有行及右表中匹配的行。

      SELECT Person.name, Orders.order_id
      FROM Person
      LEFT JOIN Orders ON Person.person_id = Orders.person_id;
      
    • 右连接(RIGHT JOIN):返回包括右表中所有行及左表中匹配的行。

      SELECT Person.name, Orders.order_id
      FROM Person
      RIGHT JOIN Orders ON Person.person_id = Orders.person_id;
      
    • 全连接(FULL JOIN):返回包括左右表中所有行。

      SELECT Person.name, Orders.order_id
      FROM Person
      FULL JOIN Orders ON Person.person_id = Orders.person_id;
      
  2. 集合操作

    • UNION 操作:用于合并两个或多个SELECT语句的结果集。

      SELECT name FROM Person
      UNION
      SELECT name FROM Employees;
      
    • INTERSECT 操作:用于返回两个SELECT语句结果集的交集。

      SELECT name FROM Person
      INTERSECT
      SELECT name FROM Employees;
      
    • EXCEPT 操作:用于返回第一个SELECT语句结果集中存在但在第二个SELECT语句结果集中不存在的行。

      SELECT name FROM Person
      EXCEPT
      SELECT name FROM Employees;
      
  3. 子查询

    • 基本子查询:子查询用于在另一个查询的 WHERE 子句中嵌套查询。

      SELECT num
      FROM enrollment
      WHERE students >= (
        SELECT AVG(students)
        FROM enrollment
      );
      
    • 相关子查询:子查询依赖于外部查询。

      SELECT *
      FROM classes
      WHERE EXISTS (
        SELECT *
        FROM enrollment
        WHERE classes.num = enrollment.num
      );
      
  4. 谓词逻辑

    • 常用的谓词逻辑操作符包括 EXISTSANYALLIN 等。
    • 示例:
      SELECT name
      FROM Sailors
      WHERE age > ALL (
        SELECT age
        FROM Sailors
        WHERE rating > 7
      );
      
八、示例查询及其结果
  1. 查询所有年龄为27的水手的姓名和等级:

    SELECT sname, rating
    FROM Sailors
    WHERE age = 27;
    
    
    

    结果:

    snamerating
    Nancy8
  2. 查询评级大于5的水手的ID及其预定的船只ID:

    SELECT S.sid, R.bid
    FROM Sailors AS S
    JOIN Reserves AS R ON S.sid = R.sid
    WHERE S.rating > 5;
    

    结果:

    sidbid
    1102
九、结论

这份SQL学习笔记涵盖了基本的SQL查询、复杂查询、多表连接、集合操作及高级查询技术。通过这些例子和解释,可以帮助理解SQL的基本概念及其在实际数据库操作中的应用。

举报

相关推荐

0 条评论