1进阶9:联合查询
关键词union联合、合并:将多条查询语句的结果合并成一个结果
语法:查询语句1
union
查询语句2
union
...
应用场景:当我们要查询的结果来自于多个表,且多个表之间没有连接关系,但是查询的信息一致
特点:要求多条查询语句的查询列数是一致的★
要求多条查询语句的每一列的顺序和类型是一致的
使用union关键字默认是去重的,因此可以使用union all包含所有的信息
引入的案例:查询course表1和course表2的课程号和课程名称
select course_id,course_name from course1
union all
select course_id,course_name from course2;

2.表的联接

表的连接类型以A表和B表为例对不同的连接方式进行显示连接结果

2.1交叉联结cross join
又称之为笛卡儿积,即假设表1有m行,表2有n行,交叉连接的结果是m*n行,
在实际中运用较少。
2.2内联结 inner join
也称之为等值连接,即查找两张表中共同存在的数据,即两张表的交集,韦恩图如下:

select a.*,b.* from A表 inner join B表 on a.name=b.name;
连接结果:

2.3左联结 left join
(1)左连接是左边表是主表,匹配右边的表是从表。主表的所有数据都有显示出来,右边的表数据只显示共同有的那部分,没有对应的部分只能补空显示(以null显示),左边表就是指放在left join的左边的表.韦恩图:

select a.*,b.*from A表 left join B表 on a.name=b.name;
返回结果:

(2)若返回只有左表的记录,但是并不包括左表和右表所共有的
select a.*,b.* from A表 left join B表 on a.name=b.name where b.id is null;
韦恩图和返回的结果集如下:

2.4右联结 right join
右连接正好是和左连接相反的,这里的右边也是相对right join来说的,在这个右边的表就是右表 ,即主表,返回结果是右表有,左表显示共同的部分,没有的以null显示。
select a.*,b.*from A表 right  join B表 on a.name=b.name;
若返回只有右表的记录,但是并不包括左表和右表所共有的
select a.*,b.* from A表 left join B表 on a.name=b.name where a.id is null;
韦恩图

3.5全联结 full join
由于mysql不支持full join,大多数可以通过union all实现,即左连接+右连接+去重实现练习:
#1.查询所有学生的学号、姓名、选课数、总成绩
SELECT a.stu_id,stu_name,COUNT(课程号) AS 选课数,SUM(成绩)AS 总成绩 FROM
student a INNER JOIN score b ON a.stu_id=b.stu_id GROUP BY a.学号;
#2.查询平均成绩大于85的所有学生的学号、姓名和平均成绩
step1.先查询平均成绩大于85的学生学号
SELECT stu_id,AVG(score) AS ag FROM score WHERE AVG(score)>85 GROUP BY stu_id;
step2.再查询满足第一步的学生的学号、姓名、平均成绩
SELECT a.stu_id,a.stu_name,b.ag FROM srudent a INNER FROM
(SELECT stu_id,AVG(score) AS ag FROM score WHERE AVG(score)>85 GROUP BY stu_id)b
ON a.stu_id=b.stu_id;
方式2:采用左连接
select a.stu_id,a.stu_name,b.ag from student a left join score bgroup by a.stu_id having b.ag>85;

3.case表达式

case when 条件1 then 要显示的值1或语句1;when 条件2 then 要显示的值2或语句2;....else 条件n then 要显示的值n或语句nend
案例:查询出每门课程的及格人数和不及格人数
SELECT course_id,
SUM(CASE WHEN score>=60 THEN 1 ELSE 0 END)AS 及格人数,
SUM(CASE WHEN score<=60 THEN 1 ELSE 0 END)AS 不及格人数
FROM score GROUP BY course_id;
#案例2:使用分段函数[100-85],[85-70],[<60]来统计各科成绩,分别统计各分数段人数、课程号和课程名称
SELECT a.course_id,a.course_name,
SUM(CASE WHEN score BETWEEN 85 AND 100 THEN 1 ELSE 0 END) AS '[100,85]',
SUM(CASE WHEN score BETWEEN 70 AND 85 THEN 1 ELSE 0 END) AS '[85-70]',
SUM(CASE WHEN score < 60 THEN 1 ELSE 0 END) AS '[<60]'
FROM score a INNER FROM course b ON a.course_id=b.course_id  GROUP BY a.course_id,b.course_name; 

练习:

vue实现查询多条记录_sql:多表查询相关推荐

  1. MySQL批量查询能返回集合吗_JDBC——查询多条记录,返回对应的对象的集合;查询一条记录,返回对应的对象...

    //查询多条记录,返回对应的对象的集合 public List getForList(Class clazz, String sql, Object...args){ List list = new ...

  2. mysql 下一条数据_mysql 查询一条记录的下一条和上一条记录

    如果ID是主键或者有索引,可以直接查找: 方法一: 查询上一条记录的SQL语句(如果有其他的查询条件记得加上other_conditions以免出现不必要的错误): select * from tab ...

  3. java查询多条_Mybatis查询多条记录并返回List集合的方法

    实体对象如下: /** 使用lobmok插件 */ @Getter @Setter @NoArgsConstructor @ToString @EqualsAndHashCode public cla ...

  4. 怎样查看电脑系统版本_用什么软件查维修记录 思域HATCHBACK怎样查询维保记录_汽车事故车查询...

    请点击上方快速关注 思域HATCHBACK很火.这款被誉为"国产Type R"的思域HATCHBACK版本在三厢车的基础上,集成了更运动化乃至更具战斗感的套件包围.中置排气和手动变 ...

  5. 使用PL/SQL删除百万条记录的大表

    使用PL/SQL删除百万条记录的大表: 最近开发人员对测试环境数据库进行了压力测试,数据库中产生了大量的脏数据.有几张大表里数据量均在百万甚至千万条的记录数.开发人员现提出需求如下: 只清理其中的部分 ...

  6. mysql连接查询分为几种方式_SQL多表查询的几种连接方式

    一.基础 1.1 SQL查询的基本原理 第一.单表查询:根据WHERE条件过滤表中的记录,形成中间表(这个中间表对用户是不可见的):然后根据SELECT的选择列选择相应的列进行返回最终结果. 第二.两 ...

  7. mysql 查询导入的数据_MySql多表查询及数据导入

    MySQL高级 外键(foreign key) 定义 让当前表字段的值在另一个表的范围内选择 语法 foreign key(参考字段名) references 主表(被参考字段名) on delete ...

  8. mysql 连表查询 好处,MySQL 多次单表查询和多表联合查询的优缺点分析-Fun言

    前言 阿里巴巴的代码规范中有一条就是不建议执行三张表以上的多表联合查询,因为对数据量不大的应用来说, 多表联合查询开发高效, 但是多表联合查询在表数据量大, 并且没有索引的时候, 如果进行笛卡儿积, ...

  9. mysql查询数据库第一条记录_SQL获取第一条记录的方法(sqlserver、oracle、mysql数据库)...

    Sqlserver 获取每组中的第一条记录 在日常生活方面,我们经常需要记录一些操作,类似于日志的操作,最后的记录才是有效数据,而且可能它们属于不同的方面.功能下面,从数据库的术语来说,就是查找出每组 ...

最新文章

  1. 删除windows7的隐藏分区
  2. 人民搜索,该怎么说你才好
  3. 话里话外:信息资源整合失败之痛(二)
  4. 新手入门深度学习 | 2-2:结构化数据建模流程示例
  5. (chap4 IP协议) 路由控制( Routing)
  6. OPENCV-5 学习笔记
  7. mybatis-spring
  8. 【信号处理第十二章】转置卷积
  9. sql查询时取日期部分内容(年月日时分秒)、增加时间
  10. at91rm9200移植u-boot
  11. css 长单词不换行溢出容器的解决方法 word-wrap与word-break
  12. [乡土民间故事_徐苟三传奇]第十二回_歪拐差役苦挑石磨
  13. 大学c语言第三章作业,第三章_C语言标准课件_ppt_大学课件预览_高等教育资讯网...
  14. DTC品牌如何冷启动?
  15. 钉钉小程序的开发入门【亲自调试】
  16. Mysql的下载、安装
  17. Succi - 用python做皇帝的棋盘
  18. 讯搜 配置mysql_迅搜创建数据库索引
  19. 戴尔R730服务器增加内存,多功能存储密集型 戴尔R730xd拆解评测
  20. Mac 下终端命令无法使用

热门文章

  1. 10_css控制背景与css精灵.txt
  2. python-assert
  3. C#通过COM组件操作IE浏览器(二):使用IHTMLDocument3完成登录
  4. 详细分析Memcached缓存与Mongodb数据库的优点与作用
  5. 团购、定时抢购倒计时js版
  6. Flex开源开发框架
  7. 就业模拟试题_Net(答案)
  8. web计算机导论读书报告,计算机导论 读书报告.doc
  9. IDEA加载mysql 报:java.sql.SQLException: Unknown system variable ‘query_cache_size‘
  10. MySQL基础教程之IN的用法详解