SQL语法(三)

359 阅读4分钟

1. 外键

  • 定义:在从表中与主表的主键对应的那个字段

  • 创建外键约束

    语法格式

    • 新建表时添加外键

      [CONSTRAINT] [外键约束名称] FOREIGN KEY(外键字段名) REFERENCES 主表名(主键字段名)
      
    • 已有表添加外键

       ALTER TABLE 从表 ADD [CONSTRAINT] [外键约束名称] FOREIGN KEY (外键字段名) REFERENCES 主表(主 键字段名);
      
  • 删除外键约束

    语法格式

      alter table 从表 drop foreign key 外键约束名称
    
  • 外键约束的注意事项

    • 从表外键类型必须与主表主键类型一致 否则创建失败
    • 添加数据时, 应该先添加主表中的数据
    • 删除数据时,应该先删除从表中的数据
  • 级联删除操作

    如果想实现删除主表数据的同时,也删除掉从表数据,可以使用级联删除操作。

    语法格式

       ON DELETE CASCADE
    

    例如

      -- 重新创建添加级联操作 
      CREATE TABLE employee(
          eid INT PRIMARY KEY AUTO_INCREMENT,
          ename VARCHAR(20),
          age INT,
          dept_id INT,
          CONSTRAINT emp_dept_fk FOREIGN KEY(dept_id) REFERENCES department(id)
          -- 添加级联删除
          ON DELETE CASCADE
      );    
    

2. 多表查询

  • 内连接查询

    特点:通过指定的条件去匹配两张表中的数据, 匹配上就显示,匹配不上就不显示

    分类:

    • 隐式内连接

      语法格式

       SELECT 字段名 FROM 左表, 右表 WHERE 连接条件;
      
    • 显示内连接

      语法格式

        SELECT 字段名 FROM 左表 [INNER] JOIN 右表 ON 条件
      
  • 外连接查询

    • 左外连接

      特点:以左表为基准, 匹配右边表中的数据,如果匹配的上,就展示匹配到的数据;如果匹配不到, 左表中的数据正常展示, 右边的展示为null.

      语法格式

        SELECT 字段名 FROM 左表 LEFT [OUTER] JOIN 右表 ON 条件
      
    • 右外连接

      特点:以右表为基准,匹配左边表中的数据,如果能匹配到,展示匹配到的数据;如果匹配不到,右表中的数据正常展示, 左边展示为null

      语法格式

        SELECT 字段名 FROM 左表 RIGHT [OUTER ]JOIN 右表 ON 条件
      

      总结:

      内连接(inner join):获取两张表中,交集部分的数据;
      
      左外连接(left join):以左表为基准,查询左表的所有数据,以及与右表有交集的部分;
      
      右外连接(right join):以右表为基准,查询右表的所有的数据,以及与左表有交集的部分。
      
  • 子查询

    概念:一条select查询语句的结果,作为另一条select语句的一部分

    特点:子查询必须放在小括号中;子查询一般作为父查询的查询条件使用

    分类说明
    where型子查询将子查询的结果,作为父查询的比较条件
    from型子查询将子查询的结果,作为一张表,提供给父层查询使用
    exists型子查询子查询的结果是单列多行,类似一个数组,父层查询使用IN函数,包含子查询的结果
    • where型子查询

      语法格式

       SELECT 查询字段 FROMWHERE 字段=(子查询);
      
    • from型子查询

      语法格式

       SELECT 查询字段 FROM (子查询)表别名 WHERE 条件;
      
    • exists型子查询

      语法格式

       SELECT 查询字段 FROMWHERE 字段 IN (子查询);
      

3. 数据库设计

  • 数据库三范式

    • 概念:

      • 为了建立冗余较小、结构合理的数据库,设计数据库时必须遵循一定的规则。在关系型数据库中这种规则就称为范式。范式是符合某一种设计要求的总结。要想设计一个结构合理的关系型数据库,必须满足一定的范式。
      • 满足最低要求的范式是第一范式(1NF)。在第一范式的基础上进一步满足更多规范要求的称为第二范式(2NF) ,其余范式以此类推。一般说来,数据库只需满足第三范式(3NF)就行了
    • 第一范式 1NF

      概念:原子性, 做到列不可拆分;第一范式是最基本的范式。数据库表里面字段都是单一属性的,不可再分, 如果数据表中每个 字段都是不可再分的最小数据单元,则满足第一范式。

    • 第二范式 2NF

      概念:在第一范式的基础上更进一步,目标是确保表中的每列都和主键相关;一张表只能描述一件事。

    • 第三范式 3NF

      概念:消除传递依赖;表的信息,如果能够被推导出来,就不应该单独的设计一个字段来存放

  • 数据库反三范式

    概念:反范式化指的是通过增加冗余或重复的数据来提高数据库的读性能;浪费存储空间,节省查询时间 (以空间换时间)