MySQL数据库——连接查询
第1关 内连接查询
一、本关任务:使用内连接查询数据表中学生姓名和对应的班级。
内连接查询
仅将两个表中满足连接条件的行组合起来作为结果集,称为内连接;
关键字:
[inner] join ... on
。
语法:
表1 [inner] join 表2 on 表1.字段=表2.字段
语法解释:
从表1中取出每一条记录,去表2中与所有的记录进行匹配,匹配必须是某个条件在表1中与表2中相同,最终才会保留结果,否则不保留。inner 关键字可省略不写;on 表示连接条件:条件字段就是代表相同的业务含义(如下面两张表中的 employee.dept_id 和 department.id),大多数情况下为两张表中的主外键关系。
内连接查询的使用
现在我们有两张表,数据如下:
employee
表数据:
id | name | dept_id |
---|---|---|
1 | Nancy | 4 |
2 | Tod | 2 |
3 | Carly | 1 |
4 | Allen | 2 |
5 | Mary | (null) |
department
表数据:
id | name |
---|---|
1 | 开发部 |
2 | 测试部 |
3 | 运维部 |
4 | 销售部 |
现在想要查询出员工姓名以及其对应的部门名称,我们就使用内连接来进行查询。
- 我们可以将关联查询思路分为三步:
1.确定所连接的表,
2.确定所要查询的字段,
3.确定连接条件与连接方式。
其中,没有部门的员工和部门没有员工的部门都没有被查出来,这就是内连接的特点,只查询在连接表中有对应的记录,其中dept.id=emp.dept_id
是连接条件。
二、编程要求
补充代码,查询数据表中学生姓名以及对应的班级名称,将其对应的列名分别另命名为studentName
和className
。
两张表,内容如下:
tb_student
表数据:
id | name | class_id |
---|---|---|
1 | Emma | 2 |
2 | Mary | 4 |
3 | Allen | (null) |
4 | Kevin | 1 |
5 | Rose | 2 |
6 | James | 1 |
tb_class
表数据:
id | name |
---|---|
1 | 软件1631 |
2 | 软件1632 |
3 | 测试1631 |
4 | 测试1632 |
三、预期输出:
studentName className
Kevin 软件1631
James 软件1631
Emma 软件1632
Rose 软件1632
Mary 测试1632
四、代码
USE School;########## 查询数据表中学生姓名和对应的班级 ##########
#请在此处添加实现代码
########## Begin ##########
SELECT tb_student.name as studentName,tb_class.name as className from tb_class join tb_student on tb_student.class_id=tb_class.id;########## End ##########
第2关 外连接查询
一、本关任务:使用外连接查询数据表中所有班级和对应班级里学生的姓名。
外连接查询
以某张表为主,取出里面的所有记录,然后每条与另外一张表进行连接,不管能不能匹配上条件,最终都会保留。能匹配,正确保留;不能匹配,其它表的字段都置空(
null
),称为外连接。外连接查询分为左外连接查询和右外连接查询;
关键字:
left/right [outer] join ... on
。
语法:
表1 left/right [outer] join 表2 on 表1.字段=表2.字段
语法解释:
左外连接:在内连接的基础上,还包含表1中所有不符合条件的数据行,并在其中的表2列填写 NULL;
右外连接:在内连接的基础上,还包含表2中所有不符合条件的数据行,并在其中的表1列填写 NULL。
外连接查询的使用
我们仍使用如下两张数据表:
employee
表数据:
id | name | dept_id |
---|---|---|
1 | Nancy | 4 |
2 | Tod | 2 |
3 | Carly | 1 |
4 | Allen | 2 |
5 | Mary | (null) |
department
表数据:
id | name |
---|---|
1 | 开发部 |
2 | 测试部 |
3 | 运维部 |
4 | 销售部 |
例如查询所有员工姓名以及他所在部门,在内连接中Mary
没有被查出,因为他没有对应的部门,现在想把Mary
也查出来,就要使用左外连接。
此查询语句以employee
为主表查询,因此最终记录至少不少于主表已有的记录数。
- 右外连接是同理的,只是基准表的位置变化了而已。
我们在这里只是将left
修改成了right
,但是基准表变化了,是以department
表的数据去匹配employee
表,所以左外连接能做到的查询,右外连接也能做到,仅展现的效果有所不同。
虽然左外连接和右外连接有主表差异,但左外连接和右外连接可以互转,如上面的右外连接也等效于如下查询语句,只需将基准表换一下:
二、编程要求
补充代码,分别使用左外连接
和右外连接
查询数据表中所有学生姓名和对应的班级名称,查询结果列分别另命名为studentName
和className
。
我们为你提供了两张表,内容如下:
tb_student
表数据:
id | name | class_id |
---|---|---|
1 | Emma | 2 |
2 | Mary | 4 |
3 | Allen | (null) |
4 | Kevin | 1 |
5 | Rose | 2 |
6 | James | 1 |
tb_class
表数据:
id | name |
---|---|
1 | 软件1631 |
2 | 软件1632 |
3 | 测试1631 |
4 | 测试1632 |
注意:请使用 tb_student 作为左表,tb_class 作为右表。
三、预期输出:
studentName className
Emma 软件1632
Mary 测试1632
Allen NULL
Kevin 软件1631
Rose 软件1632
James 软件1631
studentName className
Kevin 软件1631
James 软件1631
Emma 软件1632
Rose 软件1632
NULL 测试1631
Mary 测试1632
四、代码
########## Begin ##########
SELECT tb_student.name as studentName,tb_class.name as className from tb_student left join tb_class on tb_student.class_id = tb_class.id;SELECT tb_student.name as studentName,tb_class.name as className from tb_student right join tb_class on tb_student.class_id = tb_class.id;########## End ##########
第3关 符合条件连接查询
一、本关任务:使用连接查询,查询所有班级里分数在90
分以上的学生的姓名和学生的成绩以及学生所在的班级。
复合条件连接查询
- 复合条件连接查询,就是在连接查询的过程中,通过添加过滤条件来限制查询结果,使查询结果更加精确。
如下两张数据表:
employee
表数据:
id | name | dept_id | age |
---|---|---|---|
1 | Nancy | 3 | 18 |
2 | Tod | 2 | 22 |
3 | Carly | 1 | 19 |
4 | Allen | 2 | 24 |
department
表数据:
id | name |
---|---|
1 | 开发部 |
2 | 测试部 |
3 | 运维部 |
要求查询员工姓名和所在部门名称,使用内连接查询,将查询结果按照年龄升序排序:
二、编程要求
查询所有班级里分数在90
分以上的学生的姓名和学生的成绩以及学生所在的班级,其中学生的姓名和学生所在班级分别另命名为studentName
和className
。
两张表,内容如下:
tb_student
表数据:
id | name | class_id | score |
---|---|---|---|
1 | Emma | 2 | 89 |
2 | Mary | 4 | 92 |
4 | Kevin | 1 | 76 |
5 | Rose | 3 | 68 |
6 | James | 1 | 99 |
tb_class
表数据:
id | name |
---|---|
1 | 软件1631 |
2 | 软件1632 |
3 | 测试1631 |
4 | 测试1632 |
三、预期输出:
studentName score className
James 99 软件1631
Mary 92 测试1632
四、代码
USE School;########## 查询所有班级里分数在90分以上的学生的姓名和学生的成绩以及学生所在的班级 ##########
#请在此处添加实现代码
########## Begin ##########SELECT tb_student.name as studentName,tb_student.score,tb_class.name as className from tb_class join tb_student on tb_student.class_id=tb_class.id where score>90;########## End ##########
MySQL数据库——连接查询相关推荐
- MySQL 数据库————连接查询
目录 一.多表连接查询 1.内连接--inner join 2.左连接--left join 3.右连接--right join 二.存储过程 1.简介 2.优点 3.语法 ②.参数分类 ③.带参数的 ...
- MySQL数据库 - 连接查询
第1关:内连接查询 任务描述 本关任务:使用内连接查询数据表中学生姓名和对应的班级. 相关知识 为了完成本关任务,你需要掌握: 1.什么是内连接查询: 2.如何使用内连接查询. 内连接查询 仅将两个表 ...
- mysql数据库——连接查询(内连接:自然连接,等值连接。外连接:左连接,右连接,全连接)
- 小白 MySQL数据库链接查询语句_MySQL数据库——连接查询
今天将用 "手" 来教大家关于MySQL连接查询的知识! ============================================================= ...
- php 查看mysql连接数据库_php基础之连接mysql数据库和查询数据
php基础之连接mysql数据库和查询数据 文章主要介绍了php连接mysql数据库和查询数据的方法和示例,需要的朋友可以参考下,就跟随百分网小编一起去了解下吧,想了解更多相关信息请持续关注我们应届毕 ...
- java查询mysql装载bean_jsp与javabean链接mysql数据库并查询数据表的简单实例源码
jsp与javabean链接mysql数据库并查询数据表的简单实例源码.这个简单的实例是给新手学习的,或者一些高手临时忘记怎么使用jsp操作mysql数据库时候查找的,包括了建立mysql数据库连接的 ...
- MySQL表连接查询
MySQL表连接查询 1 基本格式 select fieldName from tbName1 连接符 tbName2 on 条件 2 笛卡尔乘积[避免] -- 笛卡尔乘积,没有约束条件,数据库匹配发 ...
- MySQL数据库select查询命令大全
MySQL数据库select查询命令大全 --数据库操作前的准备 -- 创建数据库 -- create database python_test_1 charset=utf8; -- 使用数据库 -- ...
- 查询 oracle_关于oracle和mysql数据库的查询问题
近期在写mysql数据库报表时,需要给查询排序后的数据增加一列序号,用来统计查询数据的排名,在这里遇到一个视图和排序冲突的问题. Part 1 在oracle数据库中可以直接给查询语句增加一列ROWN ...
最新文章
- 一个浙江商人立下的22条军规(转载)
- 丹佛斯变频器模拟量速度输入_变频器与PLC是如何协同作战的?了解这几个控制方式很有必要...
- asp.net应用百度编辑器(UEditor)上传图片跟上次附件不成功的解决办法
- HandlerInterceptorAdapter或HandlerInterceptor的使用
- 保益悦听怎么开盲人模式_盲人看电影???是的!盲人看电影!!!
- codeforces82 D. Two out of Three(记忆化搜索)
- php连接mysql乱码原因_PHP连接MYSQL出现乱码的原因与解决办法
- 探秘亚洲最大单体智慧农园:探索改变农民“靠天吃饭”的农作模式
- MSComm控件过程中内存溢出和GetOneDimSize出错的问题
- java jdbc_详解Java基础知识——JDBC
- MySQL的chap服务器_路由器chap的双向配置命令
- 说说我出道后的处女作:剪贴板神器 iPaste
- stm32调试1.44寸TFT液晶屏过程遇到的问题
- Android 源码编译生成framework.jar
- adb查看手机设备型号、品牌、机型等信息
- 产品说接口返回数据需要脱敏 只能安排
- 【Spring Web教程】SpringBoot 整合SpringFox-SwaggerUI 3
- 人群计数数据集汇总和详细介绍,全网最全,crowd counting datasets
- 利用云服务器和Python架设TCP Server控制ESP8266单片机
- 功能插件---水印插件
热门文章
- 双目立体感知「走下神坛」?鼻祖斯巴鲁启用单目摄像头
- springboot 妙启动_优雅的启动、停止、重启你的SpringBoot项目
- foxmail 通讯录同步方法
- PAT 1060 爱丁顿数
- 《红楼梦》23道经典菜制作方法, 有原文,有出处(转)
- 坯子库无法一键安装插件没用_坯子插件库下载-坯子插件库电脑版下载v2020.1-IE浏览器中文网站...
- airpods二代圆点按钮是啥_华强北洛达 AirPods 详细讲解,结合目前用户使用的一些情况...
- Linux 系统Tick
- IIS URL重写实现重定向
- 计算机休眠自动开机,win7电脑休眠后会自动开机,睡眠原因?怎么处理?