mysql6.10,MySQL经典50题-第6-10题

MySQL50-4-第6-10题

本文中介绍的是第6-10题,涉及到的主要知识点:

模糊匹配和通配符使用

表的自连接

in/not in

连接查询的条件筛选

3da1a621acc7

image

题目6

题目需求

查询“李”姓老师的数量

分析过程

使用通配符和like来解决

SQL实现

select count(t_name) from Teacher where t_name like "李%"; -- 通配符

3da1a621acc7

image

这题怕是最简单的吧😭

题目7

3da1a621acc7

image

题目需求

查询学过张三老师授课的同学的信息

分析过程

张三老师:Course--->t_name

课程:c_id------>Score.c_id------->Student.*

SQL实现

-- 方法1:通过张三老师的课程的学生来查找;自己的方法

select * -- 3. 通过学号找出全部学生信息

from Student

where s_id in (

select s_id -- 2.通过课程找出对应的学号

from Score S

join Course C

on S.c_id = C.c_id -- 课程表和成绩表

where C.t_id=(select t_id from Teacher where t_name="张三") -- 1.查询张三老师的课程

);

-- 方法2:通过张三老师的课程来查询

select s1.*

from Student s1

join Score s2

on s1.s_id=s2.s_id

where s2.c_id in (

select c_id from Course c where t_id=( -- 1. 通过老师找出其对应的课程

select t_id from Teacher t where t_name="张三"

)

)

-- 方法3

select s.* from Teacher t

left join Course c on t.t_id=c.t_id -- 教师表和课程表

left join Score sc on c.c_id=sc.c_id -- 课程表和成绩表

left join Student s on s.s_id=sc.s_id -- 成绩表和学生信息表

where t.t_name='张三';

自己的方法:

3da1a621acc7

image

方法2来实现:

3da1a621acc7

image

方法3实现:

3da1a621acc7

image

题目8

题目需求

找出没有学过张三老师课程的学生

分析过程

和上面👆的题目是互补的,考虑取反操作

SQL实现

select * -- 3. 通过学号找出全部学生信息

from Student

where s_id not in ( -- 2.通过学号取反:学号不在张三老师授课的学生的学号中

select s_id

from Score S

join Course C

on S.c_id = C.c_id

where C.t_id=(select t_id from Teacher where t_name ="张三") -- 1.查询张三老师的课程

);

-- 方法2:

select *

from Student s1

where s1.s_id not in (

select s2.s_id from Student s2 join Score s3 on s2.s_id=s3.s_id where s3.c_id in(

select c.c_id from Course c join Teacher t on c.t_id=t.t_id where t_name="张三"

)

);

-- 方法3

select s1.*

from Student s1

join Score s2

on s1.s_id=s2.s_id

where s2.c_id not in (

select c_id from Course c where t_id=( -- 1. 通过老师找出其对应的课程

select t_id from Teacher t where t_name="张三"

)

);

3da1a621acc7

image

方法2:

3da1a621acc7

image

题目9

3da1a621acc7

image

题目需求

查询学过编号为01,并且学过编号为02课程的学生信息

分析过程

课程编号:Score——>c_id(课程编号)

学生信息:Student——>*(学生信息)

SQL实现

-- 自己的方法:通过自连接实现

select s1.*

from Student s1

where s_id in (

select s2.s_id from Score s2

join Score s3

on s2.s_id=s3.s_id

where s2.c_id='01' and s3.c_id='02'

);

-- 方法2:直接通过where语句实现

select s1.*

from Student s1, Score s2, Score s3

where s1.s_id=s2.s_id

and s1.s_id=s3.s_id

and s2.c_id=01 and s3.c_id=02;

-- 方法3:两个子查询

-- 1. 先查出学号

select sc1.s_id

from (select * from Score s1 where s1.c_id='01') sc1,

(select * from Score s1 where s1.c_id='02') sc2

where sc1.s_id=sc2.s_id;

-- 2.找出学生信息

select *

from Student

where s_id in (select sc1.s_id -- 指定学号是符合要求的

from (select * from Score s1 where s1.c_id='01') sc1,

(select * from Score s1 where s1.c_id='02') sc2

where sc1.s_id=sc2.s_id);

先从Score表中看看哪些人是满足要求的:01-05同学是满足的

3da1a621acc7

image

通过自连接查询的语句如下:

3da1a621acc7

image

查询出学号后再匹配出学生信息:

3da1a621acc7

image

通过where语句实现:

3da1a621acc7

image

方法3的实现:

3da1a621acc7

image

题目10

题目需求

查询学过01课程,但是没有学过02课程的学生信息(注意和上面👆题目的区别)

分析过程

使用的表和字段是相同的:

课程编号:Score——>c_id(课程编号)

学生信息:Student——>*(学生信息)

SQL实现

首先看看哪些同学是满足要求的:只有06号同学是满足的

3da1a621acc7

image

错误思路1

直接将上面一题的结果全部排出,导致那些没有学过01课程的学生也出现了:07,08

select s1.*

from Student s1

where s_id not in ( -- 直接将上面一题的结果全部排出,导致那些没有学过01课程的学生也出现了:07,08

select s2.s_id from Score s2

join Score s3

on s2.s_id=s3.s_id

where s2.c_id='01' and s3.c_id ='02'

);

3da1a621acc7

image

错误思路2

将上面题目中的02课程直接取反,导致同时修过01,02,03或者只修01,03的同学也会出现

select s1.*

from Student s1

where s_id in (

select s2.s_id from Score s2

join Score s3

on s2.s_id=s3.s_id

where s2.c_id='01' and s3.c_id !='02' -- 直接取反是不行的,因为修改(01,02,03)的同学也会出现

);

3da1a621acc7

image

正确思路

-- 方法1:根据两种修课情况来判断

select s1.*

from Student s1

where s1.s_id in (select s_id from Score where c_id='01') -- 修过01课程,要保留

and s1.s_id not in (select s_id from Score where c_id='02'); -- 哪些人修过02,需要排除

3da1a621acc7

3da1a621acc7

image

!!!!!方法2:先把06号学生找出来

select * from Student where s_id in (

select s_id

from Score

where c_id='01' -- 修过01课程的学号

and s_id not in (select s_id -- 同时学号不能在修过02课程中出现

from Score

where c_id='02')

);

select s_id

from Score

where c_id='01' -- 修过01课程的学号

and s_id not in (select s_id -- 同时学号不能在修过02课程中出现

from Score

where c_id='02')

3da1a621acc7

image

3da1a621acc7

image

如何找出06号学生😃

如何Score中找出06号学生

3da1a621acc7

image

3da1a621acc7

image

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

增加系统右键菜单

本文介绍添加系统右键菜单,效果如下图: 原理很简单就是给注册表添加值,以下是添加系统右键菜单所要涉及的值。 KEY值:HKEY_CLASSES_ROOT\*\shell(所有文件的右键菜单)HKEY_CLASSES_ROOT\directory\shell&am…

Nginx-ingress部署及使用

目录 一 手动部署-官网版 1.1 获取资源1.2 安装RBAC1.3 安装基础资源1.4 安装ingress controllers1.5 创建ingress controllers service二 手动部署-github社区版(推荐) 2.1 获取资源2.2 创建default backend2.3 确认验证三 ingress使用 3.1 创建demo环境3.2 创建i…

转:数字对讲机常识介绍

一、国内外数字对讲机发展动态 从整个移动通信的应用来划分,通信网络可分为公众移动通信和专业移动通信两大类,其中公众移动通信就是社会上广大消费者正在使用的2G、3G移动手机,它是为广大公众提供移动通信服务的,任何人都有权购买…

mac 启动php70 fpm,mac 启动php-fpm

Mac OS X 10.9已经自带有php-fpm,对于有干净系统强迫症的人,或者原装控来说,用brewhome重装一遍总感觉心里会有小兔子,下面把原装的php-fpm配置起来。直接运行,有报错找不到配置文件。$ php-fpm[11-Jan-2014 16:03:03]…

WinRAR(WinZip)压缩与解压实现(C#版Window平台)

本文的原理是借助Windows平台安装的WinRAR(WinZip)实现C#程序的调用(注:WinRAR压缩解压WinZip同样适用)。 先来看WinRAR(WinZip)自身的支持调用命令: 压缩命令:a {0} {1} -r 【{0}:…

Docker Consul 安装及使用服务发现

更多配置和原理:https://blog.csdn.net/liuzhuchen/article/details/81913562 从2016年起就开始接触Consul,使用的主要目的就是做服务发现,后来逐步应用于生产环境,并总结了少许使用经验。最开始使用Consul的人不多,为…

Visual Studio扩展工具添加与卸载

简介:vs 作为主流的开发工具之一,其强大的功能无可厚非,但日益增加的需求就使得vs的扩展工具成为优秀dev所必备的利器之一。 Visual Studio扩展工具添加 Visual Studio扩展工具的添加很简单,只需要选择需要的扩展工具然后一般安装…

python代码风格检查工具──pylint

pylint是一个python代码检查工具,可以帮助python程序员方便地检查程序代码的语法和风格,通过这个工具,可以使你的python代码尽量保持完美,哈哈。具体可以检查什么东西呢?比如你写了 from XXX import * 了,它…

php充值注入,PHP注入一路小跑

PHP注入一路小跑[ 2006-04-20 14:16:55 | 作者: 承諾 ]字体大小: 大 | 中 | 小很老的了,我是给我自己看的。忘了好多,补习一下‘ or ‘11‘/*‘%23‘ and password‘mypassid-1 union select 1,1,1id-1 union select char(97),char(97),char(97)id1 unio…

Visual Studio 扩展包(.vsix)制作

前言:上篇介绍了 Visual Studio扩展工具添加与卸载,本编要介绍的是Visual Studio 扩展包(.vsix)的制作。 方法: ①、下载并安装Visual Studio 2010 SDK。 vs 2010 开发工具下载SDK安装包官方下载地址:http://www.microsoft.com/d…

php5..6中文帮助,6.5. IDE integration

IDE 集成理想情况下,应用程序代码不应直接使用DI容器:应首选依赖项注入。但是,在某些情况下,可能会直接调用容器:编写根应用程序类(前端控制器等)或更通用的框架时编写工厂时维护或迁移旧版应用程序时编写功能测试时..…

公主病 - 百度百科

http://wapbaike.baidu.com/view/287227.htm?ssid0&from844b&uid3151E6C0905477A13653132D762BB6FB&pusz%401320_1001%2Cta%40iphone_2_4.1_3_537%2Cusm%403&bd_page_type1&tjXk_1_0_10_title

CDH6.2 Linux离线安装

1.概述 CDH,全称Clouderas Distribution, including Apache Hadoop。是Hadoop众多分支中对应中的一种,由Cloudera维护,基于稳定版本的Apache Hadoop构建,提供了Hadoop的核心(可扩展存储、分布式计算)&#…

vs怎么调试php程序,vscode如何调试运行c#程序

前提条件:安装.NET Core SDK安装vscode步骤:安装c#extension插件创建第一个项目,手动创建workspace文件夹在vscode中使用快捷键CTRLKCTRLO选择刚才创建的文件夹使用快捷键CTRLSHIFITY打开控制台使用下面的命令在打开的终端里面创建一个基础的…

Openshift 4.4 静态 IP 离线安装系列:准备离线资源

本系列文章描述了离线环境下以 UPI (User Provisioned Infrastructure) 模式安装 Openshift Container Platform (OCP) 4.4.5 的步骤,我的环境是 VMware ESXI 虚拟化,也适用于其他方式提供的虚拟机或物理主机。离线资源包括安装镜像、所有样例 Image Str…

[转]Install Windows Server 2012 in VMware Workstation

本文转自:http://kb4you.wordpress.com/2012/06/28/install-windows-server-2012-in-vmware-workstation-2/ This procedure describes how to install Windows Server 2012 in VMware Workstation. The following versions are used: VMware Workstation Technolog…

生成文件的另一种思路——共享文件同步

背景 由于网站访问量大,需要多台服务器生成静态文件,然后多机负载,所有生成成了头等大事,一是方式所需,二是生成环节消耗CPU与内存操作太大,经常出问题。常用的生成方式:1.多台服务器&#xff…

php window.onload,tp_window.onload+相应操作

[php]代码库window.οnlοadfunction(){if(0){document.getElementsByName(sex)[1].checkedchecked;}else{document.getElementsByName(sex)[0].checkedchecked;}}class UserAction extends Action{public function index(){$mM(User);$arr$m->select();//var_dump($arr);$t…

Openshift 4.4 静态 IP 离线安装系列:初始安装

Openshift 4.4 静态 IP 离线安装系列:初始安装 上篇文章准备了离线安装 OCP 所需要的离线资源,包括安装镜像、所有样例 Image Stream 和 OperatorHub 中的所有 RedHat Operators。本文就开始正式安装 OCP(Openshift Container Platform&…

【JavaScript学习】JavaScript对象创建

1.最简单的方法,创建一个对象,然后添加属性 1 var person new Object();2 person.age 23;3 person.name "David";4 person.job "student";5 person.sayName function ()6 {7 alert(this.name);8 };9 10 //类似于定义键…