ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

MySQL多表查询与子查询

2020-09-04 08:01:28  阅读:254  来源: 互联网

标签:多表 学号 cjb 查询 与子 where 连接 xsl


多表查询

多表查询实际上根据查询要求先将两个表连接起来,形成一张新表,再在新表中查询出满足条件的记录多表查询可分为连接查询和子查询。

一、 连接查询(可分为外连接和内连接)关于外链接的几点说明:

A. 左外连接包括两个表中满足条件的行,再加上在join子句中指出的左表中不满足的行。

B. 不满足链接条件的行在结果中显示为Null;

C.全外连接中参加连接的两个表中的每一条记录都与另一个表的每一条记录连接,其结果集的记录数是两张表记录数的积。

D.左右表是相对的,在语句中先出现的表称为左表,后出现的称为右表。

外连接:外连接可分为左外连接、右外连接、全外连接三种。

注意:外连接只限于两个表中(”.”点表示属于)

1).左外连接Select xsl. , cjb. from xsl left outer join cjb on xsl.学号=cjb.学号;Xs.表示学生表中的所有字段;

xs.学号表示xs表中的学号字段。Select xsl.学号,xsl.姓名,cjb.学号,cjb.课程号,cjb.成绩 from xsl left outer join cjb on xsl.学号=cjb.学号;

2).右外连接Select xs. , cj. from xs right outer join cj on xs.学号=cj.学号;

3).全外连接Select from xs,cj;Select xsl. ,cj. from xsl,cj;如果xs表中有m条记录,cj表有n条记录全连接总共会生成m*n条记录先将xs表弟一条记录与cj表中每一条记录进行连接,然后再用xs表的第二条记录与成绩表中的每一条记录一一连接,直到学生表中所有记录连接完。链接后生成的新表的字段数是两个表字段的和。

内连接:

内连接用于把两个表连接成第三个表,在第三个表中仅包含哪些满足连接条件的记录行。注意:当某个字段在连接的两个表中都有时,要在字段前加“表名”,否则可省略表名例:

Select xsl.姓名,kb.课程名,cjb.成绩 from xsl,kb,cjb where xsl.学号=cjb.学号 and kb.课程号=cjb.课程号;

二、 子查询

在查询中,当一个查询的结果可以作为另一个查询的条件时,这个查询称作它的子查询。SQL允许select多层嵌套使用,用来表示复杂的查询。例1:在xsgl数据库中查询出有206号课程的学生的姓名、学号。第一步:在cj表中查询出有206号课程的同学的学号

Select 学号 from cj where 课程=’206’;

第二步:在xs表中找到相关同学的学号和姓名Select 学号,姓名 from xs where 学号 in(‘081101’,’081102’,’081103’,•••)

使用子查询完成

Select 学号,姓名 from xs where 学号 in(select 学号 from cj where 课程号=’206’);

例2:查询出选修了101号课程的同学的学号,专业和姓名

select 学号,姓名,专业 from xsl where 学号 in(select 学号 from cjb where 课程号='101');

例3:查询出参加了离散数学考试的学生的学号和姓名。

Select 课程号 from kb where 课程名=’离散数学’;

Select 学号 from cjb where 课程号=’206’;

Select 学号,姓名 from xsl where 学号 in(select 学号 from cjb where 课程号=206);

一步查询:Select 学号,姓名 from xsl where 学号 in(Select 学号from cjb where 课程号=(Select 课程号 from kb where 课程名=’离散数学’));

连接查询:select xs.学号,姓名 from xs,kc,cj where xs.学号=cj.学号 and kc.课程号=cj.课程号 and 课程名=’离散数学’;

注意:1.子查询只能输出最外层中的字段,一般要输出多个表中的字段时不使用子查询,只能使用连接查询;

2.一般情况下连接查询可以代替子查询。

标签:多表,学号,cjb,查询,与子,where,连接,xsl
来源: https://www.cnblogs.com/pony-mamba/p/13570765.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有