• 表的加法
  • 表的联结
  • 联结应用案例
  • case表达式
  • sqlzoo

一、表的加法

使用场景:列数一致、列名一致的多张表格,合并在一张表上。使用union合并。

union:重复数据会删除

union all:保留所有行

course
course1
union无重复记录
union all所有行保留

二、表的联结

交叉联结(cross join)、内联结(inner join)、左联结(left join)、右联结(right join)、全联结(full join)

(1)交叉联结:笛卡尔积

(2)内联结:查找出两张表同时出现的数据

SELECT a.学号,a.姓名,b.课程号
from student a INNER JOIN score b
on a.学号=b.学号

student
score

(3)左联结:查找出左侧表的数据

SELECT a.学号,a.姓名,b.课程号
from student a LEFT JOIN score b
on a.学号=b.学号

-- 去除两张表的共同部分
SELECT a.学号,a.姓名,b.课程号
from student a LEFT JOIN score b
on a.学号=b.学号
where b.学号 is null

(4)右联结:查找出右侧表的数据

SELECT a.学号,a.姓名,b.课程号
FROM student a RIGHT JOIN score b
on a.学号=b.学号

-- 去除两张表共同部分
SELECT a.学号,a.姓名,b.课程号
FROM student a RIGHT JOIN score b
on a.学号=b.学号
where a.学号 is null

(5)全联结:返回左右两张表所有行(mysql不支持全联结)

三、联结应用案例

例1:查询所有学生的学号、姓名、选课数、总成绩

SELECT a.学号,a.姓名,count(b.课程号) 选课数,sum(b.成绩) 总成绩
FROM student a left join score b on a.学号=b.学号
group by a.学号

例2:查询平均大于85的所有学生的学号,姓名和平均成绩

SELECT a.学号,a.姓名,avg(b.成绩) 平均成绩
FROM student a left join score b on a.学号=b.学号
group by a.学号
having avg(b.成绩)>85

例3:查询学生的选课情况,学号、姓名、课程号以及课程名称

select a.学号,a.姓名,c.课程号,c.课程名称
from student a
inner join score b on a.学号=b.学号
inner join course c om b.课程号=c.课程号

四、case表达式

例1:查询学生成绩是否及格

SELECT 学号,课程号,成绩,
(case when 成绩>=60 then '及格'when 成绩<60 then '不及格'else nullend) 是否及格
from score

例2:查询每门课程及格与不及格的人数

SELECT 课程号,
sum(case when 成绩>=60 then 1 else 0 end) 及格人数,
sum(case when 成绩<60 then 1 else 0 end) 不及格人数
from score
group by 课程号

例3:使用分段100-85、85-70、70-60、<60来统计各科成绩,分别统计:各分数段人数,课程和课程名称。

SELECT a.课程号,b.课程名称,
sum(case when 成绩<60 then 1 else 0 end) '<60',
sum(case when 成绩>=60 then 1 else 0 end) '60-70',
sum(case when 成绩>=70 then 1 else 0 end) '70-85',
sum(case when 成绩>=85 then 1 else 0 end) '85-100'
from score a RIGHT JOIN course b on a.课程号=b.课程号
group by a.课程号,b.课程名称

注意事项:

  • else子句可省略不写,省略则为空值,建议不省略
  • end不能省略不写
  • case表达式可以写到sql语句的任意子句中

五、sqlzoo

1.賽事編號matchid和球員名player,該球員代表德國隊Germany入球的。要找出德國隊球員

select matchid,playerfrom goalwhere teamid='ger';

2.由以上查詢,你可見Lars Bender's 於賽事 1012入球。.現在我們想知道此賽事的對賽隊伍是哪一隊。

留意在 goal 表格中的欄位 matchid ,是對應表格game的欄位id。我們可以在表格 game中找出賽事1012的資料。

只顯示賽事1012的 id, stadium, team1, team2

SELECT id,stadium,team1,team2FROM game where  id=1012;

3.以下SQL列出每個入球的球員(來自goal表格)和場館名(來自game表格)

修改它來顯示每一個德國入球的球員名,隊伍名,場館和日期。

SELECT player,teamid,stadium,mdateFROM game JOIN goal ON (id=matchid)where teamid='ger';

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

select team1,team2,playerfrom game join goalon id=matchidwhere player like'mario%';

5.列出每場球賽中首10分鐘gtime<=10有入球的球員player, 隊伍teamid, 教練coach, 入球時間gtime

SELECT player, teamid, coach,gtimeFROM goal join eteam on teamid=idWHERE gtime<=10;

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

select mdate,teamnamefrom game join eteamon team1=eteam.idwhere coach='Fernando Santos';

7.列出場館 'National Stadium, Warsaw'的入球球員。

select playerfrom goal join gameon id=matchidwhere stadium= 'National Stadium, Warsaw';

8.以下例子找出德國-希臘Germany-Greece 的八強賽事的入球

修改它,只列出全部賽事,射入德國龍門的球員名字。

SELECT distinct playerFROM game JOIN goal ON matchid = id WHERE (team1='GER' and teamid=team2) or (team2='GER' and teamid=team1);

9.列出隊伍名稱teamname和該隊入球總數

SELECT teamname, count(*)FROM eteam JOIN goal ON id=teamidgroup by teamname;

10.列出場館名和在該場館的入球數字。

select stadium,count(*)from goal join gameon matchid=idgroup by stadium;

11.每一場波蘭'POL'有參與的賽事中,列出賽事編號 matchid, 日期date 和入球數字。

select a.id,a.mdate, count(b.player)from game as a inner join goal as b on a.id = b.matchid where (team1 = 'POL' or team2 = 'POL')group by a.id,a.mdate;

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

select a.id,a.mdate,count(player) from game as a inner join goal as b on a.id=b.matchid where b.teamid='GER' group by a.id,a.mdate;

13.查找出所有比赛的日期,每场比赛中对战双方各自的进球数(也就是team1进球数,team2进球数)

SELECT a.mdate,a.team1,sum(CASE WHEN b.teamid=a.team1 THEN 1 ELSE 0 END) as score1,a.team2,sum(CASE WHEN b.teamid=a.team2 THEN 1 ELSE 0 END) as score2FROM game as a left JOIN goal as b ON  a.id=b.matchid group by a.id,a.mdate,a.team1,a.team2order by a.mdate,a.id,a.team1,a.team2;

mysql union 后 sum_mysql:多表查询相关推荐

  1. MySQL字段约束及多表查询---讲解三

    MySQL环境配置(mysql有下载包) MySQL数据库表的基础操作(增删改查)-讲解一 MySQL数据库表的模糊/多行/分组/排序/分页查询以及字mysql数据类型的讲解-讲解二 MySQL字段约 ...

  2. MySQL数据库中的多表查询含义以及练习~建议码友们点亮拇指+收藏呐~

    MySQL数据库中的多表查询含义以及练习 一. 多表查询含义 二. 多表查询练习 1. 已知表 2. 需求And代码 一. 多表查询含义 查询语法: select列名列表from表名列表where条件 ...

  3. Linux命令:MySQL系列之五--SELECT单表查询、多表查询升级及删除,插入

    SELECT:查询 SELECT select-list FROM tb WHERE qualification  根据标准qualification查找对应的行 查询语句类型:  qualifica ...

  4. MySQL的约束、多表查询、子查询

    一.约束之主键约束 约束:约束是添加在列上的,用来约束列的. 1.主键约束(唯一标识):非空.唯一.被引用 当表的某一列被指定为主键后,该类就不能为空,不能有重复值出现 创建表时指定主键的两种方式: ...

  5. MySQL 第六章-多表查询+课后练习

    #1.多表的查询如何实现 #错误的实现方式,每个员工都与每个部门匹配了一遍 SELECT employee_id,department_name FROM employees,departments; ...

  6. 在mysql数据库中,多表查询,事务,DCL,

    多表查询: * 查询语法:select列名列表from表名列表where.... * 准备sql# 创建部门表CREATE TABLE dept(id INT PRIMARY KEY AUTO_INC ...

  7. mysql 基础入门及单表查询

    mysql单表 今日内容介绍 数据库: 数据库管理系统 使用数据库管理系统通过sql语句 创建数据库,创建表,插入数据,更新数据,删除数据,查询数据 数据库约束 数据库的备份还原 数据库的内容比较多, ...

  8. mysql学习笔记14 多表查询初步

    对数据分组的总结 举例:统计各个部门的平均工资,并且是大于1000的,并且按照平均工资从高到底排序 mysql> select avg(stsal) as myavgsal, stdepno f ...

  9. MySQL数据库-DQL(单表查询)

    单表查询 数据准备 查询语法 查询全部 条件查询 (where) 查询条件分类 条件查询的语法 聚合函数查询 聚合函数介绍 聚合函数分类 聚合函数语法 案例学习 排序查询 (order by) 注意 ...

最新文章

  1. R语言aggregate函数数据聚合实战
  2. 3D打印产业化机遇与挑战
  3. Java多线模式-Producer-Consumer模式(生产者、消费者模式)
  4. linux shell 和 golang 查询服务器硬件信息
  5. 深入浅出之Smarty模板引擎工作机制(一)
  6. 2.4g 无线键鼠对码软件_无线路由器的2.4G和5G同时开速度有影响吗?
  7. 字符函数和内存函数模拟实现
  8. 网页爬虫中文乱码问题Python
  9. [PAT乙级]1007 素数对猜想
  10. 顶宽的div中的英文不能自动换行
  11. 图书封面的故事之——“巴别塔”选自《七周七语言:理解多种编程范型》
  12. spring集成compass中出现的问题和总结
  13. ASPxGridView1用法-
  14. 触发C#Button的双击事件
  15. 十大排序算法——桶排序(C语言)
  16. 【VISIO2016箭头使用】
  17. 【转】【信息学奥赛一本通】题解目录
  18. html毕业设计论文,静态网页HTML设计毕业设计论文
  19. Windows phone 7中关于Zune软件使用几个问题
  20. 最少多少步才能逮住兔子

热门文章

  1. Spring Boot 搭载属于你的网站框架(一)
  2. CentOS7搭建LNMP--编译安装
  3. The substring() Method in JDK 6 and JDK 7
  4. 【iCore2双核心板】SRAM 读写实验(基于Verilog语言)
  5. 软件缺陷的状态有哪些??
  6. Silverlight Telerik控件学习:带CheckBox复选框的树形TreeView控件
  7. CISCO RS 的常用命令
  8. dns域名解析过程_域名解析怎样工作,Windows server 2008 R2如何安装DNS服务器
  9. a b c d java_java中数组String array{a,b,c,d,c,d,e}如何能把字段相同的分到另外的数组中...
  10. mysql ef6 事务_使用事务-EF6 | Microsoft Docs