- 1、本文档共11页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Mysql连接查询介绍场景:需要得到一个学生列表,要求是展示如下列表:学生,性别,班级名字此时,需要不单从学生表获取数据,还需要从班级表获取数据于是就需要:连接查询,join语法:from tbl_name1 join tbl_name2 on 连接条件;select stu_name,gender,class_id,class_name from select_student join select_class?on select_student.class_id=select_class.id;过程是:先执行from子句,需要连接join两个特殊的地方:join , onjoin 连接:除了默认的连接外,还有其他形式的连接方式:内连接外连接,左外连接,右外连接,【全外连接,也是外连接,但不是mysql所支持的】交叉连接自然连接内连接:inner join记录与真实的记录连接,称之为内连接(两条真实存在的记录连接)mysql默认的连接就是inner join,可省略inner首先给 select_student 表再添加一个学生,但不分配班级:insert into select_student values (56,李莫愁,female,33,1111.11,167.56);注意:此时班级表中没有class_id为33的班级:再次执行上面的连接查询:select stu_name,gender,class_id,class_name from select_student join select_class?on?select_student.class_id=select_class.id;此时,发现刚刚新添加的数据(李莫愁)没有出现在查询结果中。因为‘李莫愁’这条数据中的class_id,在select_class表中不存在,所以不会出现在展示结果中!此称之为内连接!内连接可以省略连接条件:on可以省略,相当于连接条件永远成立!返回值是一个笛卡尔积!select stu_name,gender,class_id,class_name from select_student inner join select_class;外连接:left join , right join连接的记录,可能是一方不存在的!(两条记录中可能某条不存在)示例:(李莫愁这条数据在表select_class中不存在)select stu_name,gender,class_id,class_name from select_student left join select_class?on?select_student.class_id=select_class.id;总结:内连接,外连接差别不大,只是外连接会将没有连接成功的记录也会展示在结果中,而内连接的结果中只有连接成功的(两条记录都真实存在的)。注意左外与右外的区别:区别在于,哪个表的记录会最终出现在连接结果内!该记录指的是连接失败的记录(在select_class表中再增加一条记录:insert into select_class values(10,what110,209);)select stu_name,class_name from select_student left join select_class?on?select_student.class_id=select_class.id;select stu_name,class_name from select_student right join select_class?on?select_student.class_id=select_class.id;什么是左表和右表?join关键字前面的(左边的)是左表,join关键字后面的(右边的)是右表左外:如果出现左表记录连接不上右表记录,左表记录会出现在最终的连接结果内,而右表记?????????????录相应的字段会被设置成null右外:如果出现右表记录连接不上左表记录,右表记录会出现在最终的连接结果内,而左表?????????????????记录相应的字段会被设置成null因此,可以交换表的位置,达到使用left 与 right 混用的目的!问题:统计每个班级内学生的数量!在班级列表内展示如下列表:班级名,教室号,学生数量select class_name,classroom,count(select_student.id) as s_count from select_class?left join select_student on select_class.id=select_student.class_id group by select_class.id;注
文档评论(0)