查询列名在哪张表_SQL—多表查询
文章结构:
- 表的加法
- 表的联结
- 表的联结案例
- case表达式
- sqlzoo练习题
表的加法【union|并集】:表的加法是指将表的数据按行合并在一起(要求两张表的数据结构一致),是按行进行添加数据。
关键字:union all可以将两个表的重复的数据也保存起来。
案例:合并下面两张表
SELECT <列名>,<列名>,<列名>.....
FROM TABLE1
UNION
SELECT <列名>,<列名>,<列名>.....
FROM TABLE2
表的联结:表的联结是指通过表和表之间的关系,将两个表合并在一起的操作,联结(JOIN)运算,简单来说,就是将其他表中的列添加过来,进行“添加列”的运算,是按列进行数据的添加。
①交叉联结【cross join 笛卡尔积】:其他联结都是建立在笛卡尔积的基础上的
②内联结【inner join】【只查询都存在于两张表中的数据,内联结会将各张表中符合条件的行记录都取出来】
sql对表的所有操作都是基于行的!
ON 之后指定两张表联结所使用的列(联结键),ON 是专门用来指定联结条件的,它能起到与 WHERE 相同的作用。需要指定多个键时,同样可以使用 AND、 OR。在进行内联结时ON 子句是必不可少的,并且 ON 必须书写在 FROM 和 WHERE 之间。
操作实例:
③左联结【left join】:左联结会将left join关键字左侧表作为主表,并且将左侧的表的数据全部读取出来。
实例操作:
④右联结【right join】:右联结会将right join关键字右侧表作为主表,并且将右侧的表的数据全部读取出来。
左右联结如何选择?
右联结和左联结本质上是相同的,只是指定的主表会有所差别,究竟是左联结还是右联结应该根据实际需求来决定,作为主表,需要做到的是,要覆盖所有查询主体【什么是查询主体,比如,我们要查询所有学生的身高,体重,.......,这个里面的主体就是学生】如果各表覆盖的主体个数没有差异,左右联结和内联结没有区别。
⑤全联结【full join】查询结果返回左表和右表中的所有行,如果某行和另一个表中的行匹配的时候,则进行交叉联结,如果某一行和另一个表中的行没有匹配地方的时候,另一表对应的值用空值填充。【mysql不支持全联结】
各种联结应用场景的汇总:
内联结:获取两个表的公共部分
外联结-左联结/右联结:生成固定行数的表单,或者申明说要哪个表的全部数据的时候。
联结应用案例:
练习1:查询所有学生的学号,姓名,选课数,总成绩
练习2:查询平均成绩大于60分的所有学生的学号 ,姓名和平均成绩
练习3:查询[所有]学生的选课情况【没选课的也需要显示】:学号,姓名,课程号,课程名称,授课老师。
咋一看只需要学生表和课程表,教师表就能解决问题,但是分析发现,学生表和课程表之间并没有直接关系,是通过成绩表作为桥梁来产生关系的,所以,该题涉及了四张表,因为题目需求是查询是所有学生的相关选课信息,主体是学生,所以,student表应该成为第一个主表,以student表为主表组成的新表,也应该成为后续联结的主表,所以全部采用左联结。
如果采用右联结,则王同学选课记录会被忽略,所以左右联结有别,需要根据题目进行选择,如下图:
CASE表达式
CASE WHEN <判断表达式> THEN <表达式> -- 如果符合条件,则后面的WHEN子句不会再执行WHEN <判断表达式> THEN <表达式>WHEN <判断表达式> THEN <表达式> ....ELSE <表达式> -- 如果所有的WHEN子句都不符合条件,则执行ELSE后面的语句
END -- END不能省略
案例1:查询成绩表中对及格和不及格分数做出区分。
案例2:查询每门课程中,及格人数和不及格人数。
案例3:使用分段[100-85],(85-70],(70,60],(60,-]来统计各科成绩,分别统计:各分数段的人数,课程号,和课程名称。
可以先看一下联结后的查询结果:
加入自定义分组条件后的查询结果:
CASE语句特点总结:①使用场景多涉及自定义分组,②在case语句分组后,常常会形成新的列。③CASE分成0/1两组的时候,多配合聚合函数一起使用。④CASE是基于行来操作的。
sqlzoo:
错误原因:
正确示例【若想不分组,则可以把count函数去掉,但是不符合题目需要】:
若13题采用右联结,则没有进球的球队会被漏掉,而题目是要统计所有球队的相关信息,所以统计的主体是球队,应该把包含所有球队信息的game表作为主表,goal表只是统计了进球的球队,并不是每个球队都能进球,比如国......。
查询列名在哪张表_SQL—多表查询相关推荐
- 查询列名在哪张表_探索SQL-多表查询
一.表的加法(Union) 1.用法:将两个表合并成一个表 2.语句: select 查询结果 from 从哪张表查询 union select 查询结果 from 从哪张表查询 *需保留重复行* s ...
- mysql同时查两张表数据库表_sql语句 同时查询两个表
展开全部 举例说明:某数e5a48de588b662616964757a686964616f31333365653261据库中有3张表分别为:userinfo,dep,sex userinfo(用户信 ...
- Java实现交叉表_Sql交叉表简单实现 | 学步园
最近碰到一需求,是酱紫的: 一个销售商品表, 每年每月每天都卖出N种不同种类的商品, 最后要统计每月每种商品的销售额. 或每年的, 在此我模拟创建了一个简单的表, 主要说明经验和大家一块分享, 若发现 ...
- SQL语句查询数据库某一张表的列名
SQL语句查询数据库某一张表的列名 select table_name,column_name,column_comment,column_type,column_key from informati ...
- mysql从一个表查出写入另一个表_sql语句 怎么从一张表中查询数据插入到另一张表中...
展开全部 sql语句从一张表中查询数据插入到另一张表中的方法如下:e68a843231313335323631343130323136353331333365653762 1.select * int ...
- mysql插入多行数据来自另一张表_mysql从一张表查询批量数据并插入到另一表中的完整实例...
说在前面 nodejs 读取数据库是一个异步操作,所以在数据库还未读取到数据之前,就会继续往下执行代码. 最近写东西时,需要对数据库进行批量数据的查询后,insert到另一表中. 说到批量操作,让人最 ...
- SQl查询数据库表名、表的列名、数据类型
1.获取所有数据库名: Select Name FROM Master..SysDatabases order by Name 2.获取所有表名: (1) Select Name FROM SysOb ...
- 数据窗口retrieve查询结果生成新表_SQL系列之窗口函数及经典使用场景,如topN排名问题...
日常生活中,经常会遇到需要在每组内排名的问题,比如每个部门按业绩排名,找出每个部门排名前N的员工等,面对这类需求,就需要使用SQL的高级功能--窗口函数. 窗口函数,也叫联机分析处理函数(Online ...
- sql join on 多表连接_SQL 多表查询-交叉连接(笛卡尔积)
交叉连接(笛卡尔积)返回被连接的两个表所有数据行的笛卡尔积,返回结果集合中的数据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数. 简单解释一下笛卡尔积 设A,B为集合,用 ...
最新文章
- 从试用到使用:计算机视觉产业新一轮发展的起步年
- 手机扫一扫就能“隔空移物”?AR炫酷新玩法,快来解锁新技能吧!
- 两次结果的绝对差值_多图示例:如何呈现论文结果中的各种图表
- ReflectionToStringBuilder
- 博图如何读取mysql数据_博途使用小结:从SQL中读取数据并给变量赋值
- mysql hive 内置函数_Hive 内置函数
- defender 删除_Java 8中的默认方法(Defender方法)简介
- 密码攻略 黑客亲手打造QQ密码破解器(转)
- mac软件下载常用经典网站
- 关于“商用超极本应用体验分享沙龙”的体验之旅——商用超极本的崛起之路、真机实测、优缺点分析与使用评价
- 揭秘小红书的种草套路
- 12款绝赞的Windows软件,让你的电脑再好用10倍
- 锁定计算机小键盘,笔记本数字键盘锁了要怎么办【图文教程】
- 【汇正财经】证券市场的基本功能有哪些?
- 我的软件销售生涯(一)
- Linux tty串口测试程序
- windows清理c盘的三种有效方法
- 关于java好的交流平台_java玩友交流平台
- 微信小程序----map组件实现检索【定位位置】周边的POI
- Springboot+MybatisPlus整合poi实现导出导入Excle表格
热门文章
- 动态规划——最优买卖股票时机含冷冻期(Leetcode 309)
- 基本BASH SHELL脚本命令——切换目录以及处理文件和目录的基本知识
- C语言中返回字符串函数的四种实现方法
- 深入解析:DBA_OBJECTS中的OBJECT_ID与DATA_OBJECT_ID的区别
- 续:跨平台版本迁移之 XTTS 方案操作指南
- 从基础到实践,一文带你看懂HashMap
- 【经验分享】如何搭建本地MQTT服务器(Windows ),并进行上下行调测
- 【nodejs原理源码赏析(4)】深度剖析cluster模块源码与node.js多进程(上)
- SpringBoot与SpringCloud集成
- java 嵌套类: Nested classes