第五章:多表查询

news2024/9/17 8:21:40

一、笛卡尔积的多表查询

1.案例 查询员工名为’Abel’的员工在哪个城市工作?

 2.出现笛卡尔积(交叉连接)的错误

select employee_id, department_name
from employees,departments

为什么出现2889条记录?

 

Employees 107    Departments 27

每个员工和每个部分都匹配了一遍 107*27=2889

缺少了多表连接的条件

3.多表查询的正确方式,需要有连接条件

①两个表的连接条件

select last_name,department_name
from employees e,departments d
where e.department_id = d.department_id

②两个表的字段名相同(where 条件后面的),需要指明字段的表

select last_name,department_name,e.department_id
from employees e,departments d
where e.department_id = d.department_id

③sql优化:建议多表查询时,每个字段指明其所在的表

select e.last_name,e.department_id,d.department_name
from employees e,departments d
where e.department_id = d.department_id

④可以给表起别名,可以在select和where使用表的别名。起了别名不能使用原名。

⑤n个表实现多表查询,至少n-1个连接条件

4.查询员工的department_id,last_name,department_name,city

select e.employee_id,e.last_name,d.department_name,l.city
from employees e,departments d,locations l
where e.department_id=d.department_id and d.location_id=l.location_id

二、等值连接和非等值连接,自连接和非自连接

1.多表查询的分类

角度1:等值连接 VS 非等值连接

角度2:自连接 VS 非自连接

角度3:内连接 VS 外连接

2.等值连接 VS 非等值连接

①非等值连接的举例:查询员工的工资等级

select last_name,salary,grade_level
from employees e,job_grades j
where salary between j.lowest_sal and j.highest_sal
或
select last_name,salary,grade_level
from employees e,job_grades j
where salary >= lowest_sal and salary<=highest_sal

3. 自连接 VS 非自连接

自连接:1个表。表自己连接自己

非自连接:多个表

①查询员工id,员工姓名和主管姓名

select e1.employee_id,e1.last_name,e2.last_name manager_name
from employees e1,employees e2
where e1.manager_id=e2.employee_id

 4.内连接 VS 外连接

左表:员工表employees,有些员工没有部门

右表:部门表departments,有些部门存在,没有左表的员工

①内连接:以上练习都是内连接。交集

107个人,查询106个记录。左表和右表满足查询条件的结果

select employee_id,department_name
from employees e,departments d
where e.department_id=d.department_id

②外连接:并集

左外连接:查询所有的员工的last_name,epartment_name信息(所有的就是外连接)

select employee_id,department_name
from employees e
left join departments d on e.department_id=d.department_id

 ③右外连接:

select employee_id,department_name
from employees e
right join departments d on e.department_id=d.department_id

 三、7种SQL JOINS的实现

左查询:左表

右查询:右表

 【练习题】

 

1.
select e.last_name,e.department_id,d.department_name
from employees e
left join departments d on e.department_id = d.department_id


2.
select e.employee_id,e.job_id,d.location_id
from employees e
join departments d on d.department_id = e.department_id
where e.department_id = 90


3.
select e.last_name,e.commission_pct,d.department_name,d.location_id,l.city
from employees e
join departments d on e.department_id=d.department_id
join locations l on l.location_id=d.location_id
where e.commission_pct is not null

4.
select e.last_name,e.job_id,e.department_id,d.department_name,l.city
from employees e
join departments d on e.department_id=d.department_id
join locations l on l.location_id=d.location_id
where l.city = 'Toronto'

5.
select d.department_name,l.street_address,e.last_name,e.job_id,e.salary
from employees e
join departments d on e.department_id=d.department_id
join locations l on l.location_id=d.location_id
where d.department_name='Executive'

6.
select e1.last_name "employees",e1.employee_id "Emp#",e2.last_name "manager",e2.employee_id "#Mgr"
from employees e1,employees e2
where e1.manager_id = e2.employee_id and e1.last_name='Kochhar'
或
select e1.last_name "employees",e1.employee_id "Emp#",e2.last_name "manager",e2.employee_id "#Mgr"
from employees e1
join employees e2 on e1.manager_id = e2.employee_id
where e1.last_name='Kochhar'

7.
select e.last_name,d.department_name
from employees e
right join departments d on e.department_id = d.department_id
where e.last_name is null


8.
select d.department_name,l.city
from departments d
right join locations l on d.location_id = l.location_id
where department_name is null


9.
select e.employee_id,e.last_name,e.salary,d.department_name
from employees e
join departments d on d.department_id = e.department_id
where d.department_name = 'IT' or  d.department_name = 'Sales'
或
select e.employee_id,e.last_name,e.salary,d.department_name
from employees e
join departments d on d.department_id = e.department_id
where d.department_name in ('Sales','IT')


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

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

相关文章

Python 一元线性回归模型预测实验完整版

一元线性回归预测模型 实验目的 通过一元线性回归预测模型&#xff0c;掌握预测模型的建立和应用方法&#xff0c;了解线性回归模型的基本原理 实验内容 一元线性回归预测模型 实验步骤和过程 (1)第一步&#xff1a;学习一元线性回归预测模型相关知识。 线性回归模型属于…

如何高质量的提问题让chatgpt更明白我们的意图

如何更好地向 ChatGPT 提问 ChatGPT是一款基于深度学习的人工智能语言模型&#xff0c;用户可以通过文本输入向其提问并获得自然语言回答。以下是如何更好地向ChatGPT提问的几个建议&#xff1a; 确定问题类型。ChatGPT的训练数据源广泛&#xff0c;支持各种类型的问题&#x…

[INFOCOM 2019] NeuralWalk:使用神经网络的在线社交网络中的信任评估

NeuralWalk: Trust Assessment in Online Social Networks with Neural Networks | IEEE Conference Publication | IEEE Xplore 摘要&#xff1a; 评估信任社交网络&#xff08;TSN&#xff09;中用户之间的信任是许多应用中的关键问题&#xff0c;例如电影推荐&#xff0c;…

buuctf5

目录 [极客大挑战 2019]BabySQL [极客大挑战 2019]PHP 神秘龙卷风 假如给我三天光明 后门查杀 webshell后门 [极客大挑战 2019]BabySQL 1. 发现存在sql注入 2.使用bp用fuzz字典爆破一下哪些词被过滤了&#xff0c;发现or&#xff0c;select等都被过滤了 尝试双写注入 3.…

Vue.js 框架能力的官方认证

这两天Vue官方推出了Vue.js 认证计划。 即框架能力官方认证&#xff0c;即 Vue.js 框架能力证书。该认证由 Vue School 与 Vue.js 团队合作提供支持。官网&#xff1a;Vue.js - Official Certification Program 官方介绍此次的试题集和代码挑战由 Vue.js 核心团队审核&#xff…

docker 安装 datax和datax-web 之 datax-web登录时提示账号或密码错误

docker 安装docker 安装 datax和datax-web 安装教程地址&#xff1a; https://www.cnblogs.com/leihongnu/p/16612273.html 根据该博客的教程安装成功后&#xff0c;登录页面能打开&#xff0c;但是所提供的账户密码一直报错&#xff0c;这个就需要根据日志一步步去寻找原因了…

《编程思维与实践》1037.一元多项式乘法

《编程思维与实践》1037.一元多项式乘法 题目 思路 比较容易想到将步骤分为三步: 1.读取多项式每项的系数(coefficient)和对应的指数(dim); 2.进行多项式乘法; 3.输出进行多项式乘法后的非零项系数. 其中多项式乘法可以通过循环来处理,输出可以用if来判断系数是否为0,需要考虑…

多重共线性问题如何解决?

​ 一、多重共线性说明 多重共线性一般是指&#xff1a;如果有两个或者多个自变量高度相关&#xff08;相关系数大于0.8&#xff09;&#xff0c;难以区分一个自变量对因变量的影响和作用&#xff0c;将自变量相关性产生的后果定义为多重共线性&#xff0c;一般提出多重共线性…

Pytorch 安装

Pytorch PyTorch介绍 特点&#xff1a; 1.简单易用、分布式训练、服务器部署方便、移动端部署方便&#xff1b; 2.PyTorch 是基于以下两个目的而打造的python科学计算框架&#xff1a; 无缝替换NumPy&#xff0c;并且通过利用GPU的算力来实现神经网络的加速。 3.通过自动…

ubuntu-18.0.04 鸿蒙OpenHarmony系统源码(OHSP)下载

如果想下载HarmonyOS中 api7里面的java 源码的&#xff0c;可以止步了。因为这一块并没有开源&#xff0c;api 7里面java的部分属于HarmonyOS&#xff0c;不是openharmony的部分… 怪不得网上找不到任何一个介绍Ability.java AbilitySlice.java这种源代码的文章。java应该只是鸿…

Cilium架构简介eBPF数据流向查看

1 环境准备 上一篇文章将 k8s 的网络插件改为 cilium 同时部署了观测平台 hubble&#xff0c;部署方式可参考上篇。 基于eBPF的k8s网络插件Cilium部署与流量治理浅尝 本篇讲一下 cilium 的架构和数据流向的查看方式。首先&#xff0c;你需要一个kubernetes集群&#xff0c;并使…

算法记录 | Day43 动态规划

1049.最后一块石头的重量 II 思路&#xff1a; 本题其实就是尽量让石头分成重量相同的两堆&#xff0c;相撞之后剩下的石头最小&#xff0c;这样就化解成01背包问题了。 本题物品的重量为stones[i]&#xff0c;物品的价值也为stones[i]。 对应着01背包里的物品重量weight[i…

[学习笔记] [机器学习] 3. KNN( K-近邻算法)及练习案例

视频链接数据集下载地址&#xff1a;《3. KNN及练习案例》配套数据集 1. K-近邻算法(KNN)概念 学习目标&#xff1a; 掌握K-近邻算法实现过程知道K-近邻算法的距离公式知道K-近邻算法的超参数 K K K值以及取值问题知道kd树实现搜索的过程应用KNeighborsClassifier实现分类知…

什么是ERP?可能是全网最权威的解读

ERP的概念定义 ERP是企业资源规划的简称。要理解ERP是什么&#xff0c;最简单的方法是先思考企业正常运营需要的核心业务流程&#xff0c;如财务、HR、制造、供应链、服务、采购等&#xff0c;而 ERP系统最基础的功能就是帮助企业在集成式系统中高效管理这些流程。因为 ERP 系…

烟火识别智能监测系统 yolov5

烟火识别智能监测系统基于pythonyolov5网络模型算法智能分析技术&#xff0c;烟火识别智能监测算法模型对现场画面进行实时分析&#xff0c;发现现场出现烟火立即抓拍实时告警。我们选择当下卷积神经网络YOLOv5来进行火焰识别检测。6月9日&#xff0c;Ultralytics公司开源了YOL…

Day956.代码现代化 -遗留系统现代化实战

代码现代化 Hi&#xff0c;我是阿昌&#xff0c;今天学习记录的是关于代码现代化的内容。 代码现代化的主要模式。 大体的脉络是这样的&#xff1a; 先对代码做可测试化重构&#xff0c;并添加测试&#xff1b;在测试的保护下&#xff0c;安全地重构&#xff1b;在测试的保…

数据链路层相关知识

文章目录 一.数据链路层简介二.MAC地址为什么有了ip地址,我们还要使用mac地址呢? 三.以太网什么是以太网以太网封装帧格式认识MTU谈谈 MTU对IP协议的影响. 一.数据链路层简介 数据链路层的位置和角色:位于物理层和网络层之间,负责实现两个直接相连的节点(主机/路由器)之间的可…

SpringCloud源码之OpenFeign

OpenFeign 基于 OpenFeign 2.2.6.RELEASE版本进行源码阅读 <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId><version>2.2.6.RELEASE</version> </dependen…

Linux_红帽8学习笔记分享_6(yum软件仓库技术)

Linux_红帽8学习笔记分享_6(yum软件仓库技术) 文章目录 Linux_红帽8学习笔记分享_6(yum软件仓库技术)1. RPM软件包的使用技巧1.1如何查询指定软件包是否安装1.2如何删除指定软件包1.3如何安装指定软件包1.5依赖关系 2. YUM软件仓库的配置及使用2.1修改YUM软件仓库的配置文件 3.…

张量、标量、向量和矩阵

张量、标量、向量和矩阵 https://github.com/bovem/publications/tree/master/Linear%20Algebra 张量是一个数据数组(数字、函数等)&#xff0c;它以任意数量(0 或更大)的维度展开。维数称为张量秩。 秩 0 张量 没有维度(0)的张量。 A 是 0 维张量 秩 1 张量 仅在一维中展开的张…