【SQL】轻松判断SQL什么时候用JOIN

  • INNER JOIN如果表中有至少一个匹配,则返回行。例如返回有学号且参加了考试的学生信息+分数表;
  • LEFT JOIN即使右表中没有匹配,也从左表返回所有的行。例如返回全部学生的成绩,不管是否参加考试;
  • RIGHT JOIN即使左表中没有匹配,也从右表返回所有的行。比如返回全部的成绩信息,不管成绩是否挂钩了学生的学号;
  • FULL JOIN只要其中一个表中存在匹配,则返回行。比如返回全部学生和成绩,不管学生是否参加考试,也不管成绩是否挂钩学生的学号。

一、下面是例子(有如下4张表):

1、学生表 Student(SId,Sname,Sage,Ssex) SId 学生编号,Sname 学生姓名,Sage 出生年月,Ssex 学生性别

2、课程表 Course(CId,Cname,TId) CId 课程编号,Cname 课程名称,TId 教师编号

3、教师表 Teacher(TId,Tname) TId 教师编号,Tname 教师姓名

4、成绩表 SC(SId,CId,score) SId 学生编号,CId 课程编号,score 分数 

二、写出以下SQL:

1、查询" 01 "课程比" 02 "课程成绩高的学生的信息及课程分数

2、查询所有同学的学生编号、学生姓名、选课总数、所有课程的总成绩(没成绩的显示为 null )

3、查询学过「张三」老师授课的同学的信息

4、查询没有学全所有课程的同学的信息

5、查询每门功成绩最好的前两名

三、SQL解答:

1、查询" 01 "课程比" 02 "课程成绩高的学生的信息及课程分数
SELECT s.*, a.cid, a.score, b.cid, b.score
FROM student s JOIN sc a ON s.sid = a.sid and a.cid = '01'
               JOIN sc b ON s.sid = b.sid and b.cid = '02'
WHERE a.score > b.score;

2、查询所有同学的学生编号、学生姓名、选课总数、所有课程的总成绩(没成绩的显示为 null )
SELECT s.sid, s.sname, count(sc.cid), sum(sc.score)
FROM student s LEFT JOIN sc ON s.sid = sc.sid
GROUP BY s.sid, s.sname;


3、查询学过「张三」老师授课的同学的信息
SELECT s.* 
FROM student s JOIN sc ON s.sid = sc.sid
           JOIN course c ON sc.cid = c.cid
               JOIN teacher t ON c.tid = t.tid
WHERE t.tname = '张三';


4、查询没有学全所有课程的同学的信息
SELECT s.*
FROM student s LEFT JOIN sc ON s.sid = sc.sid
           LEFT JOIN course c ON sc.cid = c.cid
GROUP BY s.sid
HAVING COUNT(s.sid) < (SELECT count(*) FROM course);



5、查询每门功成绩最好的前两名
SELECT a.*
FROM sc a LEFT JOIN sc b ON a.cid = b.cid and a.score < b.score
GROUP BY a.sid, a.cid
HAVING count(b.score)+1 < 3
ORDER BY a.cid, a.sid;

PS:其他SQL见连接:https://www.cnblogs.com/greatLong/p/11466853.html

四、编写SQL查询语句的技巧

  1. 明确你要查询的数据(精确到列)        提示:先把所有的形容词去掉
  2. 确定这些列来自哪些表       提示:把形容词一个一个的加入进去
  3. 根据表的数量,来确定使用单表查询还是多表查询(联合查询,子查询,连接查询)
  4. 99%的情况下,只要看到“每”字,就一定要想到分组(GROUP BY)分组的依据是“每”字后面的词(having)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/496341.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

StartAI修图实例教程之海报修图

发现AI的另一种用法——AI修图。想必许多电商小伙伴都会遇到海报修图问题&#xff0c;今天我们就来看看怎么处理&#xff01; 原图&#xff1a; 1.我们用PS自带的魔法棒工具进行选区&#xff0c;选择海报中需要修改的区域。我们今天是已“2024”两个字为例 效果图&#xff1…

每日必学Linux命令:cd命令

1.命令格式&#xff1a; cd [目录名]2.命令功能 切换当前目录至 [目录名]3. 常用范例 1.进入系统根目录 命令&#xff1a; cd / 说明&#xff1a;进入系统根目录,上面命令执行完后拿ls命令看一下&#xff0c;当前目录已经到系统根目录了 输出&#xff1a; hchc-virtu…

【YOLOv5改进系列(5)】高效涨点----添加密集小目标检测NWD方法

文章目录 &#x1f680;&#x1f680;&#x1f680;前言一、1️⃣ 修改loss.py文件1.1 &#x1f393; 修改11.2 ✨ 修改21.3 ⭐️相关代码的解释 二、2️⃣NWD实验2.1 &#x1f393; 实验一&#xff1a;基准模型2.2 ✨实验二&#xff1a;NWD权重设置0.52.3 ⭐️实验三&#xf…

开了抖店还不知道怎么下手操作的,建议把这篇文章看完!

大家好&#xff0c;我是电商小布。 我们都知道&#xff0c;抖音这个平台可以说是当前短视频行业中&#xff0c;最主流的项目了。 而这其中发展的电商&#xff0c;也是逐渐成为了行业内的头部。 对于一些想要在其中享受到优势的小伙伴&#xff0c;就抓住这个机会&#xff0c;…

基于Java仓库管理系统设计与实现(源码+部署文档+论文)

博主介绍&#xff1a; ✌至今服务客户已经1000、专注于Java技术领域、项目定制、技术答疑、开发工具、毕业项目实战 ✌ &#x1f345; 文末获取源码联系 &#x1f345; &#x1f447;&#x1f3fb; 精彩专栏 推荐订阅 &#x1f447;&#x1f3fb; 不然下次找不到 Java项目精品实…

无服务数据库是未来的趋势吗?

无服务数据库是未来的趋势吗&#xff1f; 无服务器数据库是未来的趋势吗&#xff1f;无服务器数据库与传统云数据库有何不同&#xff1f; Amazon Aurora Serverless&#xff08;如下图所示&#xff09;是 Amazon Aurora 的一种配置方式&#xff0c;可以按需自动扩展。 Aurora…

ChatGPT 商业金矿(上)

原文&#xff1a;ChatGPT Business Goldmines 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 第一章&#xff1a;为什么我写这本书 欢迎阅读《ChatGPT 多源收入&#xff1a;20 个利润丰厚的业务&#xff0c;任何人都可以在一周内使用 ChatGPT 开始》。我很高兴分享我…

谷歌上架,账号高风险被封,一定是账号问题吗?

最近&#xff0c;很多开发者反馈&#xff0c;开发者账号总是被谷歌官方以“高风险行为”封号。封号邮件如图&#xff1a; 我们都清楚&#xff0c;账号被封的主要原因无非是账号本身质量问题和程序代码的问题。但目前大多数开发者普遍认为&#xff0c;如果账号是因为“高风险”被…

m4r是什么文件格式?用什么软件打开?

m4r文件格式的诞生伴随着移动设备智能化的崛起。这个格式最初是苹果公司为其iPhone设计的一种特殊的铃声格式。在这个数字音频领域&#xff0c;用户对于个性化铃声的需求逐渐升温&#xff0c;m4r文件格式因此迎来了时代的机遇。这个独特的音频格式的产生&#xff0c;旨在为用户…

UE RPC 外网联机(1)

技术&#xff1a;RPC TCP通信 设计&#xff1a;大厅服务<---TCP--->房间服务<---RPC--->客户端&#xff08;Creator / Participator&#xff09; 1. PlayerController 用于RPC通信控制 2.GameMode 用于数据同步 3.类图 4. 注意 &#xff08;1&#xff09;RPC&a…

Advisor 被重复代理问题排查

问题场景 项目中存在多个 AbstractAdvisorAutoProxyCreator 且其持有的 Advisor Bean 重复 问题复现 相关代码 ResponseBodyRequiresPermissions(PermissionConstant.****)GetMapping(value "/query****.json", name "")public List<***> query…

处理 Oracle 数据库表空间满的问题

处理 Oracle 数据库表空间满的问题 1、诊断表空间满的问题2、处理表空间满的问题3、设置表空间自增结论 在 Oracle 数据库管理中&#xff0c;表空间是一个重要的概念&#xff0c;用于存储数据库对象和数据。当表空间满了时&#xff0c;可能会导致数据库的运行受到影响&#xff…

计算机网络知识

第一章 局域网广播技术&#xff1b;广域网交换技术 n-SDUn-PCIn-PDU TCP/IP网络层无连接&#xff0c;传输层有链接和无连接&#xff1b;OSI传输层有链接和无连接&#xff0c;网络层有链接 TCP/IP没有明确区分服务&#xff0c;接口&#xff0c;协议&#xff0c;OSI明确区分 OSI…

实验7 内置对象response

编写代码&#xff0c;掌握request、response的用法。【参考课本4.6.2】 三、源代码以及执行结果截图&#xff1a; input.jsp <% page language"java" contentType"text/html; charsetutf-8" pageEncoding"utf-8"%> <!DOCTYPE html>…

微信小程序开发之常用组件解释

1 基础内容组件 1.1text组件 text的功能主要是用于内联文本&#xff0c;与网页中的span有点类似。 主要属性有 例子&#xff1a;页面上添加一个可以选中的文本 在wxml文件中添加&#xff1a; <view> <text user-select>17544456565</text> </view>…

ReentrantLock 原理

(一)、非公平锁实现原理 1、加锁解锁流程 先从构造器开始看&#xff0c;默认为非公平锁实现 public ReentrantLock() {sync new NonfairSync(); } NonfairSync 继承自 AQS 没有竞争时 加锁流程 构造器构造&#xff0c;默认构造非公平锁(无竞争&#xff0c;第一个线程尝试…

Jmeter使用BeanShell保存数据到文件

1、目的 在使用jmeter压测时&#xff0c;业务上下连贯&#xff0c;需要对一些编号进行关联操作。这里使用‘JSON提取器’将值提取出来&#xff0c;后面请求可以直接使用。其它业务想要使用就只能把值保存到文件&#xff0c;再使用文件做参数化了。 2、JSON提取器 提取请求值 提…

MongoDB副本集环境搭建(以单机Windows为例)

前言 近期有搭建MongoDB副本集的需求,简单记录一下搭建过程(以本地Windows环境为例)。 一、副本集选型 1 Primary节点、1 Secondary 节点、1 Arbiter节点模式副本集环境搭建。 二、搭建过程 1. 安装MongoDB服务 下载地址:https://www.mongodb.com,如下图所示: 选择…

1.排列数组奇数在前偶数在后

文章目录 大家好&#xff0c;我是晓星航。今天为大家带来的是 排列数组奇数在前偶数在后 相关的讲解&#xff01;&#x1f600; public static void swap(int[] array) {int left 0;int right array.length - 1;while (left < right) {while (left < right &&…

SQLAlchemy常用数据类型

Integer &#xff1a;整形&#xff0c;映射到数据库中是 int 类型。 Float &#xff1a;浮点类型&#xff0c;映射到数据库中是 float 类型。他占据的 32 位。 Double &#xff1a;双精度浮点类型&#xff0c;映射到数据库中是 double 类型&#xff0c;占 据64 位 (SQLALCHEM…
最新文章