zoukankan      html  css  js  c++  java
  • MySQL----MySQL数据库入门----第五章 多表操作

    5.1 外键

      比如说有两个数据表,分别是学生信息表student和年级表grade。在student表中有存储学生年级的字段gid(外键),在grade表也有存储学生年级的字段id(主键),student表和grade表之间通过学生年级建立关联,两者是主从关系。在这种关联关系中:

      ①学生表student是引用表;------------------------------------------------->引用表是从表

      ②年级表grade是被引用表;------------------------------------------------->被引用表是主表

      ③引用表中引用字段gid要引入grade表中id字段,所以是外键;

      ④被引用表中的字段id,是grade中的主键或者对其设置唯一性约束;

      ⑤引入外键后,外键列只能插入参照列存在的值,参照列被参照的值不能被删除。这就保证了数据的参照完整性;

      为表添加外键约束

    alter table 引用表名 add constraint 外键名 foreign key (外键字段名) references 被引用表名(主键字段名)

      删除外键约束

    alter table 引用表名 drop foreign key 外键名

      注意:

      ①建立外键的表必须是InnoDB型,不能是临时表。因为在MySQL中只有InnoDB类型的表才支持外键。

      ②定义外键名时,不能加引号。

      

    5.2 连接查询

      ①内连接查询

    select 表1.字段1,表2.字段2,...,表1.字段n
    from 表1 [inner] join 表2
    on 表1和表2的约束条件
    [where条件]

      ②内连接的类似方法查询

    select 表1.字段1,表2.字段2,...,表1.字段n
    from 表1,表2
    where条件;

      注意:使用where子句的查询结果与使用inner join的查询结果是一致的,但是inner join是内连接语句,where是条件判断语句,在where语句后可以直接添加其他条件,而inner join语句不可以。

      ③左连接查询

    select 表1.字段1,表2.字段2,...,表1.字段n
    from 表1 left join 表2
    on 表1和表2的约束条件
    [where条件]

      ④右连接查询

    select 表1.字段1,表2.字段2,...,表1.字段n
    from 表1 right join 表2
    on 表1和表2的约束条件
    [where条件]

      注意:

      1、左连接的结果包括left join 子句中指定的左表的所有记录,以及所有满足连接条件的记录。如果左表的某条记录在右表中不存在,则在右表中显示为空;

      2、同理,右连接的结果包括right join 子句中指定的右表的所有记录,以及所有满足连接条件的记录。如果右表的某条记录在左表中不存在,则在左表中显示为空;

    5.3 子查询

      子查询就是一个查询的结果作为另外一个查询的条件使用。外层的查询称为父查询,作为条件的查询称为子查询(subquery),在查询语句执行时,首先会执行子查询中的语句,然后将返回结果作为外层查询的过滤条件。

      ①带IN关键字的子查询

    select * from 数据表 where 字段名 in (select  字段名  from 数据表 [where条件]);

      ②带exists关键字的子查询

    select * from 数据表 where exists (select  字段名  from 数据表 [where条件]);

      注意:exists关键字后面的参数可以是任意一个子查询,这个子查询的作用相当于测试,不产生任何数据,只返回true或者false,当返回值为true时,外层查询才会执行。

      ③带any关键字的查询

    select * from 数据表 where 字段名 > | < | >= | <= | != any(select  字段名  from 数据表 [where条件]);

      注意:any关键字标识满足其中任意一个条件,它允许创建一个表达式对子查询的返回值列表进行比较,只要满足内层子查询中的任意一个比较条件,就返回一个结果作为外层查询条件。

      ④带all关键字的查询

    select * from 数据表 where 字段名 > | < | >= | <= | !=all (select  字段名  from 数据表 [where条件]);

      注意:all关键字与any有点类似,只不过带all关键字的子查询返回的结果需要同时满足所有内层查询条件。

  • 相关阅读:
    Linux进程间通信:父子进程通过信号通信,实现交替数数,时间间隔1秒
    Ubuntu18 给terminal改个漂亮的命令行提示符
    int型、char*、string、的swap算法
    C++中的友元函数的总结
    C++内联函数
    static作用,静态成员变量和静态成员函数
    9——对象的创建和撤销,构造函数和析构函数
    如何用敏捷搞垮一个团队?
    .Net核心中间件httpContext不支持并发读写 Concurrent reads or writes are not supported.
    CentOS 7 MySQL5.7 多实例(多端口)
  • 原文地址:https://www.cnblogs.com/WangYujie1994/p/10416949.html
Copyright © 2011-2022 走看看