mysql数据库第五章_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.字段nfrom 表1 [inner] join表2on表1和表2的约束条件[where条件];

②内连接的类似方法查询

select表1.字段1,表2.字段2,...,表1.字段nfrom表1,表2

where条件;

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

③左连接查询

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

④右连接查询

select表1.字段1,表2.字段2,...,表1.字段nfrom 表1 right join表2on表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关键字的子查询返回的结果需要同时满足所有内层查询条件。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值