关于left join、inner join、where 控制条件的区别

embedded/2024/11/9 16:45:18/

首先了解left join、inner join 的区别

left join :以主表数据为主,子表关联不到就为null。

inner join : 主表有的子表也得有,才能关联到。

例:

学生表(a表):学生id,学生名称

课程记录表(b表):学生id,课程id。。。

课程表(c表):课程id,课程名称

表关系:a表一对多b表,c表一对多b表。

说明:不是所有学生都有课程,不是所有课程都有学生报名学习。

当要查询每个学生学习的课程有哪些时:

select a.学生id,a.学生名称,c.课程id,c.课程名称from 学生 a left join 课程记录 b on b.学生id=a.学生idinner join 课程 c on c.课程id=b.课程id 

当要查询每个课程有多少学生报名时:

select c.课程id,c.课程名称,nvl(count(distinst b.学生id),0) as slfrom 课程 cleft join 课程记录 b on c.课程id=b.课程id

 ———————————————————分割线————————————————————

接下来正题,如下控制条件写法的区别

--查询报名语文、数学、英语课程的人数
--1、
select c.课程id,c.课程名称,nvl(count(distinst b.学生id),0) as sl
from 课程 c
left join 课程记录 b on c.课程id=b.课程id
where c.课程名称 in ('语文','数学','英语')
--2、
select c.课程id,c.课程名称,nvl(count(distinst b.学生id),0) as sl
from 课程 c
inner join 课程记录 b on c.课程id=b.课程id
where c.课程名称 in ('语文','数学','英语')
--3、
select c.课程id,c.课程名称,nvl(count(distinst b.学生id),0) as sl
from 课程 c
inner join 课程记录 b on c.课程id=b.课程id and c.课程名称 in ('语文','数学','英语')
--4、
select c.课程id,c.课程名称,nvl(count(distinst b.学生id),0) as sl
from 课程记录 b
inner join 课程 c on c.课程id=b.课程id and c.课程名称 in ('语文','数学','英语')
--5、
select c.课程id,c.课程名称,nvl(count(distinst b.学生id),0) as sl
from 课程记录 b
left join 课程 c on c.课程id=b.课程id 
where c.课程名称 in ('语文','数学','英语')

 2、3 查询结果是一致的。4、5查询结果是一致的。

正确写法是1。

4,5主表错误,如果该课程无人报名,会导致查询结果缺少


http://www.ppmy.cn/embedded/95035.html

相关文章

如何保持git主分支树的整洁

经典应用展示Git版本控制用法 本章将列举Git的一些闪亮特性,期待能够让您爱上Git 文章目录 经典应用展示Git版本控制用法前言一、分支是什么?二、主-分支合并merge三、cherry-pick(精挑细选)四、Rebase(变基)4.1 合并本地分支到主分支4.2 合并本地分支从指定commit开始的…

【Python-办公自动化】几秒搞定几天的工作量之根据指定要求汇总求和排序成278张表格

欢迎来到"花花 Show Python",一名热爱编程和分享知识的技术博主。在这里,我将与您一同探索Python的奥秘,分享编程技巧、项目实践和学习心得。无论您是编程新手还是资深开发者,都能在这里找到有价值的信息和灵感。 自我介…

Spring中dbUtil的概念和搭建使用

目录 1、什么是dbUtil 2、lombok插件 3、dbUtil通过xml来实现 4、SpringJunit的作用和效果 (1)标记测试方法和配置方法的注解 5、dbUtil通过注释来实现 6、dbUtil通过config配置类来实现 7、dbUtil通过aop的XML的实现 (1&#xff09…

手机在不同地方ip地址一样吗

在这个数字化时代,手机已成为我们日常生活中不可或缺的一部分,它不仅是我们沟通的工具,更是我们获取信息、娱乐休闲和社交互动的重要平台。然而,你是否曾好奇过,当你带着手机穿梭于不同的地方,手机的IP地址…

Hive学习(一)

一、Hive基本概念 1.简介:是基于Hadoop的一个数据仓库工具,可以将结 构化的数据文件映射成一张表,并提供 SQL查询功能,用于解决海量数据结构化日志的数据统计工具。 2.本质:将HQL转换成MapReduce程序 1&#…

网站如何被Google收录?

想让你的网站快速被Google收录?试试GSI快速收录服务吧,这是通过谷歌爬虫池系统来实现的。这套系统吸引并圈养Google爬虫,提高你网站的抓取频率。每天有大量Google爬虫抓取你的网站页面,大大提高了页面的收录概率,从而增…

FFmpeg源码:avio_tell函数分析

AVIOContext结构体和其相关的函数分析: FFmpeg源码:avio_r8、avio_rl16、avio_rl24、avio_rl32、avio_rl64函数分析 FFmpeg源码:avio_tell函数分析 一、avio_tell函数的定义 avio_tell函数定义在FFmpeg源码(本文演示用的FFmpeg…

算法:排序(前言)

所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。排序算法,就是如何使得记录按照要求排列的方法。排序算法在很多领域得到相当地重视,尤其是在大量数据的处理方面。一个优秀的…