一、创建表与插入数据
create table PilotSkills
( pilot char ( 15 ) not null,
plane char ( 15 ) not null,
primary key ( pilot , plane ))
insert into PilotSkills
values ( 'Celko' , 'Piper Cub' ),
( 'Higgins' , 'B-52 Bomber' ),
( 'Higgins' , 'F-14 Fighter' ),
( 'Higgins' , 'Piper Cub' ),
( 'Jones' , 'B-52 Bomber' ),
( 'Jones' , 'F-14 Fighter' ),
( 'Smith' , 'B-1 Bomber' ),
( 'Smith' , 'B-52 Bomber' ),
( 'Smith' , 'F-14 Fighter' ),
( 'Wilson' , 'B-1 Bomber' ),
( 'Wilson' , 'B-52 Bomber' ),
( 'Wilson' , 'F-14 Fighter' ),
( 'Wilson' , 'F-17 Fighter' )
create table Hangar
( plane char ( 15 ) primary key )
insert into Hangar
values ( 'B-1 Bomber' ),
( 'B-52 Bomber' ),
( 'F-14 Fighter' )
二、查询数据
1、解惑一
select pilot
from PilotSkills as p1
where not exists ( select *
from Hangar
where not exists ( select *
from PilotSkills as p2
where ( p1 . pilot = p2 . pilot )
and ( p2 . plane = Hangar . plane )))
(1)from PilotSkills as p1语句
选择表PilotSkills的数据,语句中主要选择匹配的是pilot
(2)from Hangar语句
选择表Hangar的数据,语句中主要起作用的是plane
(3)from PilotSkills as p2语句
选择表PilotSkills的数据,语句主要是选择数据与前面的p1和hangar的飞行员和飞机进行匹配
(4)where (p1.pilot = p2.pilot) and (p2.plane = Hangar.plane)语句
将表PilotSkills的数据与前面的p1和hangar的飞行员和飞机进行匹配,按飞行员+现有Hangar表中的飞机进行分配,匹配PilotSkills表中是否存在这样的数据,如果有则select *
(5)select * from Hangar where not exists (... )语句
按飞行员+现有Hangar表中的飞机进行分配,并与PilotSkills表中匹配。如果存在任一数据esists中则返回True,同时又由于not关键字则转换为False,即代表在Hangar表中不选择该飞行员不会驾驶的飞机。如果不存在符合的数据esists中则返回False,同时又由于not关键字则转换为True,即代表在Hangar表中选择到了该飞行员不会驾驶的飞机。
(6)select * from PilotSkills where not exists (... )语句
如果前面该飞行员在Hangar表中所有飞机都会驾驶,那么exists中则会返回False,又由于关键字not,则变成了True,则代表会选中表PilotSkills中的该名飞行员的这行记录。
如果前面该飞行员在Hangar表中存在某架飞机不会驾驶,那么exists中则会返回True,又由于关键字not,则变成了False,则查询语句的时候,该名飞行员在表PilotSkills中会由于这架不会驾驶的飞机全部都返回False,导致在表PilotSkills中的该名飞行员的所有记录都不会被选到。、
以下是过程:
(1)Higgins与Plane表匹配,然后其中的B-1 Bomber在PilotSkills表中没有找到数据,对于所有的PilotSkills表中的Higgins返回的结果都是一样的。
(2)Wilson与Plane表匹配后,所有的都能找到数据,因此在exists中则不会返回True。
2、解惑二
(1)将PilotSkills表与hangar表的飞机进行匹配,再按pilot飞行员字段分组,只有满足分组内的数量等于hangar表的飞机数则代表该飞行员能否驾驶该飞机表中的所有飞机。
select pilot
from Pilotskills as p1 , hangar as h1
where p1 . plane = h1 . plane
group by p1 . pilot
having COUNT ( p1 . plane ) = ( select COUNT (*) from Hangar )
3、解惑三
(1)精确匹配
书中的这个语句将leftjoin前的数据与leftjoin后的数据统计的数量来跟Hangar表进行匹配。
select p1 . pilot
from PilotSkills as p1
left outer join Hangar as h1
on p1 . plane = h1 . plane
group by p1 . pilot
having COUNT ( p1 . plane ) = ( select COUNT ( plane ) from Hangar )
and COUNT ( h1 . plane ) = ( select COUNT ( plane ) from Hangar )
(2)模糊匹配
只要飞行员能够驾驶的飞机满足飞机表的飞机即可筛选到。
select p1 . pilot
from PilotSkills as p1
left outer join Hangar as h1
on p1 . plane = h1 . plane
group by p1 . pilot
having COUNT ( h1 . plane ) = ( select COUNT ( plane ) from Hangar )
【SQL解惑】谜题21:飞机与飞行员相关推荐
- oracle延时盲注如何防止,【原创】WEB安全第四章SQL注入篇21 oracle 延时注入
WEB安全第四章SQL注入篇21 oracle 延时注入 1.简介 DBMS_LOCK.SLEEP()函数可以让一个过程休眠很多秒,但使用该函数存在许多限制.首先,不能直接将该函数注入子查询中,因为O ...
- 最新版 SQL 8.0.21 安装与初次运行全攻略
最新版 SQL 8.0.21 安装与初次运行全攻略 SQL 8.0.21 从官网下载SQL dmg 文件 电脑端安装 SQL的密码设置问题 SQL 8.0.21 SQL软件两年前曾在旧电脑上安装过一次 ...
- 谜题21:我的类是什么?
下面的程序所要做的事情正是前一个谜题所做的事情,但是它没有假设斜杠符号就是分隔文件名组成部分的符号.相反,该程序使用的是java.io.File.separator,它被指定为一个公共的String域 ...
- SQL解惑-有趣的数值累加游戏-orastar
1.问题描述 Target列的计算方法:以id为顺序累计value,但是只累计相同符号(+ -,0作为负数处理)的,且碰到不同的符号后从0开始累计.请问这个用sql怎么计算? 2.方法一, from ...
- 数据分析初学入门——22本SQL学习书籍推荐
很多数据分析初学者都被推荐学SQL,SQL是最基础且是必备的技能之一,但是不知道该从何学起,很多课程讲了很多知识点,但是初学的朋友没有对这一领域整体框架的认识,不知道该学哪些知识.有哪些知识.实际工作 ...
- Java解惑 电子书
--表达式谜题 Java 谜题 1--表达式谜题 谜题 1:奇数性 下面的方法意图确定它那唯一的参数是否是一个奇数.这个方法能够正确运转 吗? public static boolean isOdd( ...
- JAVA解惑你的不可能
谜题1:奇数性 下面的方法意图确定它那唯一的参数是否是一个奇数.这个方法能够正确运转吗? public static boolean isOdd(int i){ return i % 2 == 1; ...
- SQL Server之路必读的N本书(不定期持续更新)(ZZ)
ID Name ISBN 1 SQL应用重构 9787111263586 2 SQL 必知必会(第3版) 9787115162601 3 SQL Server 2005高级程序设计 978711517 ...
- SQL Server之路必读的N本书(不定期持续更新)
ID Name ISBN 1 SQL应用重构 9787111263586 2 SQL 必知必会(第3版) 9787115162601 3 SQL Server 2005高级程序设计 978711517 ...
- 像优秀的SQL程序员一样思考
像优秀的SQL程序员一样思考 --<SQL编程风格> 本书详细信息请点击:http://www.china-pub.com/209168 数据库作为现代软件应用的核心之一,正在发挥越来越重 ...
最新文章
- Linux初学(Linux命令行的使用)
- 纯CSS实现下拉菜单及下拉容器等(纯CSS实现导航条及导航下拉容器)
- Linux入门——文件管理
- 【学术相关】西湖大学教授:都说不唯论文,那我们发表论文是为了什么?
- CF666E-Forensic Examination【广义SAM,线段树合并】
- JQuery Mobile中特有事件和方法
- 图像处理与计算机视觉经典文章
- 细说php完美分页类
- rrt matlab算法,rrt算法matlab代码
- C语言网络编程——基础
- stm32开发环境:vs201x+visualGDB+cubemx开发stm32程序
- Python requests常用的浏览器头部
- php百度蜘蛛劫持,技术教程:php伪造ip访问一个网站,可以伪造百度蜘蛛ip
- 解决error while accessing a target resource. resource is perhaps not available or a wrong access was
- vim 从嫌弃到依赖(20)——global 命令
- autocad.net 设置指定图层为当前图层
- 中关村翠湖科技园:高端产业聚集区 (zz.IS2120@BG57IV3.T752270541 .K)
- Cocos2D开发的iPhone游戏的教程
- Zotero——实现多台电脑上云端同步
- java计算机毕业设计学籍管理系统源码+mysql数据库+lw文档+系统+调试部署
热门文章
- canvas微信图片生成海报
- 顶尖人才!小红书2024届REDstar技术提前批招聘正式启动!
- css3 rotate360度自转
- open esb 开源_加入Open Jam 2019打造开源独立游戏
- ctfshow 网络迷踪-窗外风景
- 诚诚富众在校学生投资理财的技巧
- matlab 画图 分数线,2010大连中考录取分数线
- 一小只支付接口的自动化
- jzoj 模拟赛总结(2017.07.15)
- 《算法概论》8.3题