欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

MySQL----MySQL数据库入门----第五章 多表操作

程序员文章站 2022-11-21 20:14:03
5.1 外键 比如说有两个数据表,分别是学生信息表student和年级表grade。在student表中有存储学生年级的字段gid(外键),在grade表也有存储学生年级的字段id(主键),student表和grade表之间通过学生年级建立关联,两者是主从关系。在这种关联关系中: ①学生表stude ......

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关键字的子查询返回的结果需要同时满足所有内层查询条件。