MySQL5.7数据库中表连接、子查询、外键的示例分析
小编给大家分享一下MySQL5.7数据库中表连接、子查询、外键的示例分析,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!
文章目录表连接
自关联
外键
内连接
左连接
右连接
子查询
外键介绍
创建表时设置外键约束
当查询结果的列来源于多张表时,需要将多张表连接成一个大的数据集,再选择合适的列返回mysql
这时需要表进行连接
内连接内连接仅选出两张表中互相匹配的记录
select*from表1innerjoin表2on表1.列=表2.列--显示学生的所有信息,但只显示班级名称selects.*,c.namefromstudentssinnerjoinclassescons.id=c.id;--将班级名称显示在第一列selectc.name,s.*fromstudentssinnerjoinclassescons.id=c.id;--查询有能够对应班级的学生以及班级信息,按照班级进行排序selectc.name,s.*fromstudentssinnerjoinclassescons.cls_id=c.idorderbyc.nameasc;--当同一个班级时,按照学生的id进行从小到大排序selectc.name,s.*fromstudentssinnerjoinclassescons.cls_id=c.idorderbyc.nameasc,s.idasc;
在这里插入图片描述
查询的结果为两个表匹配到的数据,左表持有的数据,对于右表中不存的数据使用null填充
select*from表1leftjoin表2on表1.列=表2.列--students表左连接classes表并查看班级为null的数据select*fromstudentssleftjoinclassescons.cls_id=c.idhavings.cls_idisnull;--左连接并且查询s.cls_id=1并且s.name="small-j"的数据select*fromstudentssleftjoinclassescons.cls_id=c.idhavings.cls_id=1ands.name="small-j";
右连接查询结果为两个表匹配到的数据,右表持有的数据,对于左表中不存在的数据使用null填充。
select*from表1rightjoin表2on表1.列=表2.列;子查询
某些情况下,当进行查询的时候,需要的条件是另外一个select语句的结果,这个时候,就要使用到子查询
select*from表where表(子查询语句)--查询出students中身高最高的男生。显示名字和身高selects.name,s.highfromstudentsswherehigh=(selectmax(high)fromstudents)andgender="男";--查询出高于平均身高的学生信息select*fromstudentswherehigh>(selectavg(high)fromstudents);--查询学生班级号cls_id能够对应的学生信息select*fromstudentswherecls_idin(selectidfromstudents);--查询最大年龄的女生的idselect*fromstudentswhereid=(selectmax(id)fromstudentswheregender="女")andgender="女";
在这里插入图片描述
自关联简单理解为自己与自己进行连接查询
--查询广东省下的所有广东市select*fromcitiescinnerjoinprovincesponc.provinceid=p.provinceidhavingp.province="广东省";--查询广东省下的所有广东市--自关联select*fromareasainnerjoinareasbona.id=b.pidhavinga.name="广东";
MySQL的外键(foreing key)是表的一个特殊字段。对于两个具有关联关系的表而言,相关联字段的主键所在表就是主表(父表),外键所在的表是从表(子表)。
注意: 主键不能包含空值,但允许在外键中出现空值,也就是说,只要外键的每个非空值出现在指定的主键中,这个外键的内容就是正确的。
创建表时设置外键约束当创建外键的时候,必须先删除从表才能删除主表。
主表需存在时创建从表。
从表的外键关联必须是主表的主键,并且主键与外键的类型必须保持一致。
[constraint外键名]foreignkey(字段名[,字段名2,...])references<主表名>主键列1[,主键列2,...]
--创建班级表createtableclasses(idint(4)notnullprimarykey,namevarchar(36));--创建学生表createtablestudent(sidint(4)notnullprimarykey,snamevarchar(30),cidint(4)notnull);--创建直接含有外键关系的学生表createtablestudent(sidint(4)notnullprimarykey,snamevarchar(30),cidint(4)notnull,constraintpk_idforeignkey(cid)referencesclasses(id));--通过alter来添加外键关系altertablestudentaddconstraintpk_idforeignkey(cid)referencesclasses(id);--删除外键约束altertablestudentdropforeignkeypk_id;
看完了这篇文章,相信你对“MySQL5.7数据库中表连接、子查询、外键的示例分析”有了一定的了解,如果想了解更多相关知识,欢迎关注亿速云行业资讯频道,感谢各位的阅读!
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。