前言
什么是外键?
外键是指引用另一个表的一列或多列,被引用的列应该具有主键约束或唯一性约束。外键用于建立和加强两个表数据之间的连接
先创建一张班级表t_class
不会创建外键的看 https://jingyan.baidu.com/article/eae0782751728e1fed548577.html
查看表结构
再创建一张班级表t_student
查看表结构
当前表的Key 除了其自身主键外还多了一个外键MUL(stu_classid)
-
我们插入学生表中的外键值是与班级表(t_class)中主键对应的,两个表之间的数据就具有关联性,如果班级表中不存在这样一个ID值,则在学生表中无法进行插入操作。因为外键列只能插入参照列已存在的值。
-
删除同样如此,参照列被参照的值是不能被删除的,因此在t_class表中删除"大数据1班"时,一定要现在t_student表中删除该班级的所有学生,然后再删除班级。一句话总结:在两个具有关联关系的表中删除数据时,一定要先删除从表的数据,然后再删除主表中的数据,否则会报错。
-
修改数据时,当参照列被参照的值不存在时,从表不能被修改,即班级表中已经存在id=1、大数据1班,id=2、大数据2班,id=3、大数据3班,当修改学生表中小四班级外键为4是不可以的,因为依赖表中没有这列值,只能从1、2、3中任选一个值修改。
一、内连接查询
内连接查询的关键字是inner join 或者 join(不建议省略inner)。返回的是表中存在至少一个匹配的数据,那么不匹配的数据肯定就不返回了,如果都不匹配,就是空。
查询全部字段
SELECT * FROM t_student INNER JOIN t_class ON t_student.stu_classid=t_class.class_id
筛选查询所需要的字段
SELECT s.stu_name,c.class_name FROM t_student s INNER JOIN t_class c ON s.stu_classid=c.class_id;
//从表的外键stu_classid
二、左连接查询
外连接之左外连接(也称左连接)
左外连接关键字是LEFT OUTER JOIN 或LEFT JOIN(还是不建议省略outer,可读性不强)。左外连接查询是以左边的表为基准,去匹配要连接的表,不管是否匹配条件都会以基准表的条数返回结果(这里明显不同于内连接),匹配到的数据就显示匹配到的数据,没有匹配条件的数据就显示为null。
查询全部字段
SELECT * FROM t_student LEFT JOIN t_class ON t_student.stu_classid=t_class.class_id
筛选查询所需要的字段
SELECT s.stu_name,c.class_name FROM t_student s LEFT OUTER JOIN t_class c ON s.stu_classid=c.class_id
三、右连接查询
外连接之右外连接(也称右连接)
右连接和左连接的理论是一样的,只是基准表发生了变化,以右边被关联表为基准(将左连接的基准表和被关联表交换位置就等价于右连接)。右连接的关键字是RIGHT OUTER JOIN或RIGHT JOIN(还是不建议省略OUTER )。
查询全部字段
SELECT * FROM t_student RIGHT JOIN t_class ON t_student.stu_classid=t_class.class_id
筛选查询所需要的字段
SELECT s.stu_name,c.class_name FROM t_student s RIGHT OUTER JOIN t_class c ON s.stu_classid=c.class_id