经过之前的学习,现在我们已经对查询有了一定的了解,但是我们目前的所有查询都只能找到在一张表中的数据,但如果我们需要寻找分布在多张表格中的数据时,这种之前的查询就做不到了,这时就需要引入一种新的查询方法,多表查询。

一、联结的介绍

还记得我们最开始数据库结构中提到的联结(JOIN)吗?它就是我们用来连接多个表格的工具,当需要提取的数据分布在不同表格时。我们可以使用JOIN链接,多个数据库关联起来,

图片来自猴子老师LIVE课程

如图所示这四张表格使用了JOIN相互连接,学生表学号与成绩表学号连接,成绩表课程号与课程表课程号连接,课程表教师号与教师表教师号连接,表之间的连接可以这样写

SELECT
FROM 学生表 as a1 JOIN 成绩表 as a2
ON a1.学号 = a2.学号
JOIN 课程表 as a3 /*如果需要关联第三个表*/
ON a2.课程表 = a3.课程表

在表和表之间使用 JOIN 来进行联接,用来关联的字段则写在 ON 后面

二、联结的种类

连接又分类几个种类

1.交叉连接,交叉连接会将表中的每一行和另外一张表中的每一行合并在一起,结果的行数是两张表行数的乘积(一共6行)。

2.内连接,内连接将两张表中共有的数据相联,如图所示,我们可以看到通过学号相联结的时学号0001为两张表中共有的行,因此将学号为0001的列与成绩表中0001的列相联结。

3.左联结/右联结,左联结会将左侧表中的全部数据与右侧表中的数据相联结。右边没有的数据则用空值表示。右联结则会将右侧表中的全部数据与左侧表中的数据相联结,左边表没有的数据则为空值。

4.全联结,全连接会将左右两边的值都进行合并,没有值的行则会用空值表示

三、CASE表达式

CASE表达式可以用来解决复杂的问题

CASE WHEN<判断表达式> THEN <表达式>WHEN<判断表达式> THEN <表达式>WHEN<判断表达式> THEN <表达式>.......ELSE
END

CASE表达式可以用来进行复杂的判断,每一句CASE表达式都能进行一个判断,当满足这个条件时就会结束,如果不满足这个条件则会继续运行后面的WHEN语句,最后的语句都没有找到符合条件的语句则会运行ELSE子句。

每一个CASE表达式都必须含有END

四、练习题

将分数分段并统计各分段的人数

SELECT c1.课程号,c2.课程名称,
SUM(CASE WHEN 成绩 BETWEEN 70 AND 85
THEN 1 ELSE 0 END) AS '[85-70]',
SUM(CASE WHEN 成绩 BETWEEN 60 AND 70
THEN 1 ELSE 0 END) AS '[70-60]',
SUM(CASE WHEN 成绩 <60 THEN 1 ELSE 0 END) AS '[<60]'
FROM score as c1 JOIN courser as c2
ON c1.课程号 = c2.课程号
GROUP BY c1.课程号

The JOIN operation/zh​sqlzoo.net

4.列出球員名字叫Mario (player LIKE 'Mario%')有入球的 隊伍1 team1, 隊伍2 team2 和 球員名 player

SELECT team1,team2,player
FROM goal as c1 JOIN game as c2
ON id =matchid
WHERE player LIKE 'Mario%'

6.列出'Fernando Santos'作為隊伍1 team1 的教練的賽事日期,和隊伍名。

SELECT mdate,teamname
FROM game as c1 JOIN eteam as c2
ON c1.team1 = c2.id
WHERE coach = 'Fernando Santos'

8.列出全部賽事,射入德國龍門的球員名字

SELECT DISTINCT(player)
FROM game JOIN goal ON matchid = id
WHERE (team1='GER' or team2='GER')
AND teamid <> ('GER')

12.每一場德國'GER'有參與的賽事中,列出賽事編號 matchid, 日期date 和德國的入球數字。

SELECT matchid,mdate,count(team1)
FROM game AS c1 JOIN goal as c2
ON c2.matchid = c1.id
WHERE (team1 = 'GER' OR team2 = 'GER')
AND c2.teamid = 'GER'
GROUP BY c2.matchid,mdate

xietq:从零开始学习SQL(六)练习题目​zhuanlan.zhihu.com

sql 多表多行模糊查询_从零开始学习SQL(五)多表查询相关推荐

  1. hive 如果表不存在则创建_从零开始学习大数据系列(四十七) Hive中数据的加载与导出...

    [本文大约1400字,阅读时间5~10分钟] 在<从零开始学习大数据系列(三十八) Hive中的数据库和表>和<从零开始学习大数据系列(四十二)Hive中的分区>文章中,我们已 ...

  2. Mysql进阶学习(五)连接查询(包含sql92标准和sql99标准)

    Mysql进阶学习(五)连接查询(包含sql92标准和sql99标准) 一.进阶6:连接查询 (一).sql92标准 1.等值连接 1.1 等值连接简介 案例1:查询女神名和对应的男神名 案例2:查询 ...

  3. sql 两个表字段不一样合并查询_数据分析进阶--SQL多表查询

    下午写完了上一篇文章,晚上就开始做牛客的SQL题啦,然后发现少少的十题就用到了好几次多表连接,case在实际分析过程中也非常常用,所以我打算单独把多表查询和case拉出来写一篇文章. 文章目录: 表的 ...

  4. postgresql两个列模糊比较_数据分析之SQL优化系列(二)---PostgreSQL 的索引

    参考<PostgreSQL11.2-中文手册> 下面这个链接,讲的通俗易懂,可以看看. 数据分析师不得不知道的SQL优化 - 鑫获 - 博客园​www.cnblogs.com 索引是提高数 ...

  5. sql 如何设置行级锁_如何使用SQL Server 2016行级安全性过滤和阻止数据访问

    sql 如何设置行级锁 SQL Server 2016 came with many new features and enhancements for existing ones, that con ...

  6. pgsql vs mysql查询_对比平台--SQL Server Vs PostgreSQL

    Microsoft SQL Server是一个数据库管理和分析系统,主要用于电子商务,业务范围和不同的数据仓库解决方案.另一方面,PostgreSQL是高级的对象关系数据库管理系统,它为SQL标准的扩 ...

  7. sql重复数据只保留一条_一条SQL完成跨数据库实例Join查询

    背景 随着业务复杂程度的提高.数据规模的增长,越来越多的公司选择对其在线业务数据库进行垂直或水平拆分,甚至选择不同的数据库类型以满足其业务需求.原本在同一数据库实例里就能实现的SQL查询,现在需要跨多 ...

  8. sql 查询本月请假的人数_温故而知新---学习SQL练习作业

    在看过<SQL基础教程>(作者:MICK)后,陆续面试发现自己的实操确实差很多,又重新学习SQL知识,听了猴子老师新的知乎LIVE,发现这种新的SQL学习方式真好,知识点写的很清楚,也更容 ...

  9. sql镶嵌查询_超实用的SQL语句之嵌套查询

    嵌套查询 什么是嵌套查询. 嵌套查询的意思是,一个查询语句(select-from-where)查询语句块可以嵌套在另外一个查询块的where子句中,称为嵌套查询.其中外层查询也称为父查询,主查询.内 ...

最新文章

  1. 简要叙述matlab的含义,1,简述MATLAB组成部分? 2,说明使用M文件编辑/调试器的方法和优点? 3,存储在工作空间中的数组能编辑吗...
  2. 微信为什么打不开html,微信打不开怎么回事 微信打不开解决方法
  3. 北京智源大会 | AI 产业下个十年中的大变量
  4. grunt.config()_gruntjs api
  5. (1 LEETCODE)2. Add Two Numbers
  6. JAVA面试题(part1)--变量相加与常量相加
  7. Java 7:使用NIO.2进行文件过滤-第1部分
  8. 【渝粤教育】国家开放大学2019年春季 2732土地利用规划 参考试题
  9. 前端学习(1734):前端系列javascript之添加动画
  10. 五个温度带的分界线_女神建筑师在拿破仑故乡打造的海景别墅,超美!超有温度!【环球设计2225期】...
  11. 基于java+swing+mysql+JFeeChart的企业人力资源管理系统(2)续
  12. Opencv---remap函数的实现
  13. 【java】在jsp的js和css里面使用EL表达式取值|style里面用$取值
  14. 什么叫做展望_在迷茫的时代,选择相信:关于2021经济的一些展望。
  15. python2和python3的区别 print-Python2与Python3中print用法总结
  16. linux安装chrome_chrome 的安装及出现密钥问题(ubuntu16.04)
  17. 西安西北大学计算机研究生学费,关于西北大学研究生学费及住宿的解答
  18. swat模型_安利一个运用SWAT模型模拟径流的简单工具
  19. 宏基aspire拆机触摸_宏基(acer)Aspire 4930G拆机教程
  20. Mac用Homebrew安装libimobiledevice

热门文章

  1. 使用BeetleX的TcpBenchmark工具进行百万设备模拟测试
  2. C#:在Task中使用依赖注入的Service/EFContext
  3. 使用C# (.NET Core) 实现命令设计模式 (Command Pattern)
  4. spring cloud+.net core搭建微服务架构:Api授权认证(六)
  5. 初探SQL Server 2017 on Docker@macOS
  6. Net分布式系统之:微服务架构
  7. 在Linux上编译dotnet cli的源代码生成.NET Core SDK的安装包
  8. EQueue 2.3.2版本发布(支持高可用)
  9. 采用EntityFramework.Extended 对EF进行扩展(Entity Framework 延伸系列2)
  10. python 图像识别pytesseract快速设置