title: SQL 训练题目
date: 2023-7-15 01:45:50
tags: - SQL 训练

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

解题思路:要查询的是两个课程的成绩,而且还要显示学生的信息。所以需要用到两张表,SC,Student 这两张表。

问题拆分:

  1. 怎么查找两个课程的成绩呢?
  2. 如何把课程表和学员信息表连接起来呢?

那么用到哪些知识呢?

  1. 子查询
  2. join

语句实现:先找到两门课的成绩

-- 课程1的成绩
SELECT
sid,
score AS class1
FROM
sc
WHERE
sc.cid = '01';
-- 课程2的成绩
SELECT
sid,
score AS class2
FROM
sc
WHERE
sc.cid = '02';

两个子查询结束了以后,下一步就是使用 join 把这两个查询的结果连接起来:

SELECT
*
FROM
Student
RIGHT JOIN (
SELECT
t1.sid,
class1,
class2
FROM
( SELECT sid, score AS class1 FROM sc WHERE sc.cid = '01' ) t1,
( SELECT sid, score AS class2 FROM sc WHERE sc.cid = '02' ) t2
WHERE
t1.sid = t2.sid
AND t1.class1 > t2.class2
) r ON Student.sid = r.sid;

二. 查询存在 "01" 课程但可能不存在 "02" 课程的情况(不存在时显示为 null)

思路:首先要查询所有的学生的选课情况,然后找到选择课程 01 和选择课程 02 的学生

解决方法:使用 join

选择两个分别选择课程 01 和课程 02 的学员表,然后把这两个表 join 起来

SELECT
*
FROM
( SELECT * FROM sc WHERE sc.cid = '01' ) t1
LEFT JOIN ( SELECT * FROM sc WHERE sc.cid = '02' ) t2 ON t1.sid = t2.sid;

三. 查询同时存在 01 和 02 课程的情况

思路:要求同时选择了 01 和 02 课程的情况,则需要使用 where 链接起来,这一题和上一题相比就是多了一个去除选了 01 但是没有选择 02 课程的这一部分

知识点:子查询,where语句

SELECT
*
FROM
( SELECT * FROM sc WHERE sc.cid = '01' ) t1,
( SELECT * FROM sc WHERE sc.cid = '02' ) t2
WHERE
t1.sid = t2.sid;

SQL 训练题目的更多相关文章

  1. 几道经典的SQL笔试题目

      几道经典的SQL笔试题目(有答案) (1)表名:购物信息 购物人      商品名称     数量 A            甲          2 B            乙        ...

  2. sql基础题目测试及正确答案

    在网上做了一套基本的sql题目,以下是我的写的答案,适合基础人员练练 --创建测试数据 use test create table Student(S# varchar(10),Sname nvarc ...

  3. sql 一些题目

    这道SQL笔试题你会怎么写(转) 最近面试了一些Senior BI的候选人,行业经验三年到七年不等,起初觉得这个Level的无需准备笔试题,碍于领导执念,就在真实项目中提取5道SQL题目,这里仅单说其 ...

  4. PL/SQL 训练09--面向对象

    ---对象基本声明.实现.使用--对象类型,类似与JAVA中的类,通俗的讲,就是捆绑了相关函数和过程的记录类型. ---对象声明 --create type 创建一个对象类型的规范部分 create ...

  5. Oracle sql 复习题目总结

    sql 题目一 表结构 1.表名:g_cardapply 字段(字段名/类型/长度): apply_no varchar8; //申请单号(关键字) apply_date date; //申请日期 s ...

  6. sql常见题目

    1 --student学生表(sno,sname,sex,birthday,tel) 2 --Course课程表(cno,cname) 3 --Sc 学生成绩表(sno,cno,score) 4 1. ...

  7. 一道关于比赛胜负的Sql查询题目

    以前做过一道题目,一直没有来得及总结下来.贴图: 记得以前曾经找到了两种方法,今天试了一下,还是可以的,贴出过程: 下面是具体的查询方法: 原来放的是图片,今天又练习了一下,附代码: create T ...

  8. PL/SQL 训练13--plsql 优化

    --数据缓存技术 --PGA和SGA---SGA:系统全局区域--PGA:Process Global Area是为每个连接到Oracle的用户进程保留的内存. ---PLSQL从PGA获取信息的速度 ...

  9. PL/SQL 训练12--动态sql和绑定变量

    --什么是动态SQL?动态PL/SQL--动态SQL是指在运行时刻才构建执行的SQL语句--动态PL/SQL是指整个PL/SQL代码块都是动态构建,然后再编译执行 --动态SQL来可以用来干什么? - ...

  10. PL/SQL 训练11--包

    --所谓包,就是把一组PL/SQL的代码元素组织在一个命名空间下.--一种可以把程序或者其他的PL/SQL元素比如游标.类型.变量的组织结构在一起的结构(包括逻辑结构和物理结构)--包提供了非常重要的 ...

随机推荐

  1. [IM002]Navicat ODBC驱动器管理器 未发现数据源名称并且未指定默认驱动程序

    数据库 SQL SERVER 2008,连接时报:[IM002]Navicat ODBC驱动器管理器 未发现数据源名称并且未指定默认驱动程序 到安装目录下找到 sqlncli_x64.mis 双击安装 ...

  2. 如何在 Unity 游戏中集成 AI 语音识别?

    简介 语音识别是一项将语音转换为文本的技术,想象一下它如何在游戏中发挥作用?发出命令操纵控制面板或者游戏角色.直接与 NPC 对话.提升交互性等等,都有可能.本文将介绍如何使用 Hugging Fac ...

  3. 【JAVA基础】MySQL配置

    mySQL配置 数据库连接 初始化配置 --创建用户 并授权 create user 'injasup'@'%' identified by 'supplier@2023#!'; GRANT SELE ...

  4. 【第三方库】从编译到运行,轻松学会gflags库

    gflags是Google开源的一个库,可以很方便地定义一些全局变量,并且可以从命令行设置他们的值,广泛应用于各个项目中以及自己平时的开发中.本期参考gflags的官方文档,简单直接介绍下怎么使用这个 ...

  5. 3D编程模式:介绍设计原则

    大家好~本文介绍6个设计原则的定义 系列文章详见: 3D编程模式:开篇 目录 单一职责原则(SRP) 依赖倒置原则(DIP) 接口隔离原则(ISP) 迪米特法则(LoD) 合成复用原则(CARP) 开 ...

  6. vue-awesome-swiper swiper/dist/css/swiper.css 报not found错误

    解决办法删除package-lock.json文件写死package.json版本号  "vue-awesome-swiper": "^3.1.3", 删除no ...

  7. C#实现斐波拉切数列求和

    C#实现斐波拉切数列求和 private void button1_Click(object sender, EventArgs e) { listBox1.Items.Clear();//清空Lis ...

  8. java进阶(27)--HashSet与TreeSet

    一.HashSet: 1.特点:无序不可重复,实际上为放入HashMap中的key部分. 2.举例说明:

  9. java基础-运算符--day03

    目录 1. 算数运算符 2.+号 3. ++ 4. = 赋值操作 5. 关系运算 6. 逻辑运算 7. 三元运算 8 位运算 1. 算数运算符 / 处以 % 取余 public class TestO ...

  10. Go socket 编程源码解析(下)

    在上一节中介绍了 socket 的 Listen 方法,这里进一步介绍 Accept 和 Read,Write 方法. 1. Accept Accept 的核心逻辑在于: func (ln *TCPL ...