MySQL多表操作
一、外键
指引用另一个表中的一列或多列,被引用的列应该具有主键约束或唯一性约束。外键用于建立和加强两个数据表之间的连接
添加外键约束:
alter table 表名 add constraint FK_ID foreign key (外键字段名) REFERENCES 外表表名(主键字段名);
删除外键约束:
alter table 表名 drop foreign key 外键名;
二、操作关联表
关联关系:
- 多对一
- 多对多
- 一对一
三、连接查询
- 内连接 inner join 查询两个表中的结果集中的交集(满足条件连接)
- 外连接 outer join
- 左外连接 left join 以左表作为基准 右边表来一一匹配,匹配不上的,返回左表记录,右表以null填充,left join 左边的表称为左表,右边的表称为右表
- 右外连接 right join 以右表作为基准 左边表来一一匹配,匹配不上的,返回右表记录,左表以null填充,right join 右边的表称为右表,左边的表称为左表
- 自连接
- 等值连接
- 非等值连接(交叉连接) (无条件连接)
思路:
1.分析需求,确定查询的列来源于两个表student,result 连接查询
2.确定使用哪一种连接查询?
内连接:
内连接语法:
select 查询的字段
from 表一
inner join 表二
on 两表查询的条件;
- 两表查询的条件 一般来说就是两表的主外键
- 内连接使用比较运算符对两个表中的数据进行比较,并列出与连接条件匹配的数据行,组合成新的记录,也就是说,在内连接查询中,只有满足条件的记录才能出现在查询结果中
- inner可省略 默认连接是内连接
- inner join 用于连接两个表,on来指定连接条件
非等值连接=交叉连接(无条件连接):
交叉连接语法:
- select * from 表一 cross join 表二;
- select * from 表一,表二;
- 返回第一个表中符合查询条件的数据行数乘以第二表中符合查询条件的数据行数(笛卡尔积)
自连接:
- 在一个连接查询中,涉及的两个表是同一个表,指相互连接的表在物理上为同一个表,但逻辑上分为两个表,需要写别名
四、子查询
指一个查询语句嵌套在另一个查询语句内部的查询,在执行查询语句时,首先会执行子查询中的语句,然后将返回的结果作为外层查询的过滤条件
带IN关键字的子查询:内层查询语句仅返回一个数据列,这个数据列中的值将供外层查询语句进行比较操作
带EXISTS关键字的子查询:参数可以是任意一个子查询,这个子查询的作用相当于测试,它不产生任何数据,只返回TRUE或FALSE,当返回值为TRUE时,外层查询才会执行
带ANY关键字的子查询:ANY关键字表示满足其中任意一个条件,它允许创建一个表达式对子查询的返回值列表进行比较,只要满足内层子查询中的任意一个比较条件,就返回一个结果作为外层查询条件 >
带ALL关键字的子查询:与ANY有点相似,但带ALL关键字的子查询返回的结果需同时满足所有内层查询条件 >
带比较运算符的子查询:>=、<、=、!=