外键:用于建立两个表数据之间的链接,外间是指引用另一个表中的一列或者多列,(具有唯一性约束。主键约束啊)
-----------------------------------------------------------------------------------------------------------------------------------------------------------------
主表从表?关联关系?1:n (外键在n上) n:m(存在中间表,两个表的主键是中间表的联合主键)1:1(存在一个表中,没有从表)
=======================================================================================
插入时,先插入主表,删除时,先删除从表,
mysql中只有InnoDB才支持外键
cascade删除外键关联列的所有数据
set null 外键关联列被修改或者删除时,使用null替换
no action 不进行任何操作
restrict:拒绝主表删除或修改外键关联列,,最安全!!!!!!!!!!!!!!!!!!!!!!
---------------------------------------------------------------------------------------------------------------------------------------------------------------------
连接查询
交叉连接:select * from b1 cross join b2; 结果两个表的笛卡儿积 4*4=16
内连接 select b1.cc,b2.zz from b1 inner join b2 on b1.xxx=b2.xxx;==select b1.cc,b2.zz from b1,b2 where b1.xxx=b2.xxx
外连接:
1)左连接:left join:返回佐表中的所有记录和右表中符合连接条件的记录
2)右连接:right join 返回右表中的所有记录和左表中符合连接条件的记录
附上交叉连接,内链接,外连接的例子
见表2个,结构数据如下,学生表(id,姓名)和课程表(id,学生姓名,课程名)
进行查询
1交叉查询----笛卡儿积--------查询结果=两张表做笛卡儿积
2内链接查询-------查询结果=符合查询条件的记录
3外连接查询
1)左连接查询----------查询结果=左表的所有记录+右表符合条件的记录
2)右连接查询-----查询结果=右表中的所有记录+左表符合条件的记录,若左表不符合条件,则null
子查询
带IN关键字的子查询 select * from user where id in(select id from del);
带exits关键字的子查询 select * from user where exists(select id fom del where age>12);
使用any select * from user id>any(select id from del)
使用all select * from user id>any(select id from all)