oracle 多表查询
3.6多表查询
 当查询的数据并不是来源一个表时,需要使用多表连接操作完成查询。多表连接查询通过表之间的关联字段,一次查询出多个表的数据。
 3.6.1等值连接
 等值连接也称为简单连接(Simple Joins)或者内连接(Inner Join)。通过等号来判断连接条件中的数据值是否相匹配,具体格式如下:
 Select table1_name.fieldname, 
 table2_name.fieldname
 from table1_name, table2_name
 Where 条件句
【例3-8】建立雇员表,包括字段编号、姓名、岗位名称。建立职工薪水表包括职工号、姓名、工资。需要查询出编号、姓名、岗位名称、薪水信息。具体代码如下:
 –第3章\ bdgl.sql
--建立雇员表
create table EMPLOYEE
 ( id_1 varchar2(20),
 name_1 varchar2(25),
 station varchar2(20)
 );
--建立职工薪水表
create table SALARY
 (
 id_2 varchar2(20),
 name_2 varchar2(25),
 salary NUMBER(8,2)
 );
――插入数据
 insert into employee values(‘1’,‘lily’,‘工程师’);
 insert into employee values(‘3’,‘lucy’,‘项目经理’);
 insert into employee values(‘5’,‘william’,‘人事经理’);
 insert into employee values(‘6’,‘demon’,‘行政人员’);
 insert into employee values(‘7’,‘david’,‘人事专员’);
 Commit;
 insert into salary values(‘1’,‘lily’,5000);
 insert into salary values(‘2’,‘tom’,8000);
 insert into salary values(‘3’,‘lucy’,5500);
 insert into salary values(‘4’,‘linda’,3500);
 insert into salary values(‘5’,‘william’,6000);
 Commit;
select a.id_1,a.name_1,a.station,b.salary
 from employee a,salary b
 where a.id_1=b.id_2 ;
 –也可以使用关键字inner join
 select a.id_1,a.name_1,a.station,b.salary
 from employee a
 inner join salary b 
 on a.id_1=b.id_2 ;
查询结果如图3-14所示。
图3-14使用内连接的查询结果
从查询结果上可以看出查询了雇员表和薪水表中编号相同的数据。
3.6.2外连接
 (1)左外连接:使用关键字 left join,以左表为准,返回左表的所有数据,右表满足关联条件的数据会全部显示,否则用 null 值去填充。
 【例3-9】使用左外连接查询雇员表编号、姓名、岗位名称、薪水信息,代码如下:
 –第3章\bdgl.sql
select a.id_1,a.name_1,a.station,b.salary
 from employee a
 Left join salary b
 on a.id_1=b.id_2 and a.name_1=b.name_2;
 查询结果如图3-15所示。
图3-15使用左外连接的查询结果
 该查询的主表是employee,查询记录数与employee 一致,职工号全部是employee 数据。
 (2)右外连接:和左外连接相反。使用关键 right join,以右表为准,返回右表的所有数据,左表满足 on 条件的数据会全部显示,否则用 null 值去填充。
 【例3-10】使用右连接查询出编号、姓名、岗位名称、薪水信息,代码如下:
 –第3章\bdgl.sql
select a.id_1,a.name_1,a.station,b.salary
 from employee a
 right join salary b
 on a.id_1=b.id_2 and a.name_1=b.name_2;
查询结果如图3-16所示。
图3-16使用右外连接的查询结果
 (3)完全连接:通过关键字 full join 连接两张表,返回左表和右表的所有数据,并使用空值填充缺失的数据。
 【例3-11】使用完全连接查询编号、姓名、岗位名称、薪水信息,代码如下:
 –第3章\bdgl.sql
 select a.id_1,a.name_1,b.id_2,b.name_2,a.station,b.salary
 from employee a
 full join salary b
 on a.id_1=b.id_2 and a.name_1=b.name_2;
查询结果如图3-17所示。
图3-17使用完全连接的查询结果
 最后结果为 表a和表b的所有数据。
3.7表的集合运算
 一个查询就是一个集合:查询的结果集一条记录就是一个元素。
 集合运算是用来把两个或多个查询的结果集做并、交、查的集合运算,包含集合运算的查询称为复合查询。
 Select 基本语法如下:
 SELECT
 column_1,
 column_2,
 …
 FROM
 table_name
 WHERE
 search_condition
 ORDER BY
 column_1,
 column_2;
 3.7.1常用集合运算方式的应用
 (1)联合运算: 联合运算实际是结果集1加上结果集2的纪录。
 将两个表或多个表数据合并到一起,只有所选出的列数据类型匹配的查询才可以进行逻辑运算。
 联合运算语法如下:
 select 字段列表1 from 表1
 UNION
 select 字段列表2 from 表2
 字段列表1 和字段列表2 数据类型一致,长度可以不一致,但字段个数必须一致。
 在合并多个集合(表)的过程中,去掉表的重复记录。
 (2)全联合运算:是从每个查询返回包括所有重复的结果。
 注意:使用union all会比union的速度快,因为省去了去除重复记录的时间。
 语法如下:
 select 字段列表1 from 表1
 UNION all
 select 字段列表2 from 表2
 (3)相交运算(intersect),该运算不去重,默认升序。
 该运算取两个集合的交集,该运算返回多个查询中所有相同的行。
 语法如下:
 select 字段列表1 from 表1
 INTERSECT
 select 字段列表2 from 表2
 (4)MINUS:结果集1中有,结果集2中没有的纪录。
 语法如下:
 select 字段列表1 from 表1
 MINUS
 select 字段列表2 from 表2
 使用该操作时,注意以下加点:
 ① 选择的列数必须相同;
 ② 所选列的数据类型必须有相同的数据类型;
 ③ 列的名称不必相同。
 【例3-12】建立职工表,包括员工编号、姓名、薪水、电话号码。建立职工性别表,包括员工编号、姓名、薪水、电话、性别,然后插入测试数据。
 要求:取两个表的并集,有重复的记录也保留;
 取两个表的并集,重复的记录需要去掉;
 取两个表的交集;
 取两个表的差集。
 建表,插入数据,代码如下:
 –第3章\bdgl.sql
–建立职工表
 create table SM_EMP
 ( empid varchar2(30),
 name varchar2(30),
 salary NUMBER(6,2),
 telno CHAR(8)
 );
 –建立职工性别表
 create table SM_EMP_SEX
 ( empid varchar2(30) not null,
 name varchar2(30),
 salary NUMBER(6,2),
 telno CHAR(8),
 sex CHAR(2)
 );
 INSERT INTO sm_emp VALUES(‘0000000001’,‘张飞飞’,5500,'6678562 ');
 INSERT INTO sm_emp VALUES(‘0000000002’,‘关庭’,4500,‘87825626’);
 INSERT INTO sm_emp VALUES(‘0000000003’,‘孙海’,6200,‘87783617’);
 Commit;
INSERT INTO sm_emp_sex VALUES(‘000000001’,‘张飞飞’,5500,'6678562 ',‘男’);
 INSERT INTO sm_emp_sex VALUES(‘000000002’,‘关庭’,4500,‘87825626’,‘女’);
 INSERT INTO sm_emp_sex VALUES(‘000000006’,‘王兴悦’,6200,‘87783617’,‘女’);
 Commit;
 1.取两个表的并集,有重复的记录保留,代码如下:
 select a.empid,a.name,a.salary,a.telno from sm_emp a
 union all
 select b.empid,b.name ,b.salary,b.telno from sm_emp_sex b;
 查询结果如图3-18所示。
图3-18职工表和性别表取并集的查询结果
2.取两个表的并合,重复的记录需要删除,代码如下:
 select a.empid,name from sm_emp a
 union
 select b.empid,b.name from sm_emp_sex b;
 查询结果如如图3-19所示。
图3-19职工表和性别表取并集并去重的查询结果
 3.取两个表的交集,代码如下:
 select a.empid,name,salary,a.telno from sm_emp a
 INTERSECT
 select b.empid,b.name ,salary,b.telno from sm_emp_sex b;
 查询结果如图3-20下:
图3-20职工表和性别表取并交集的查询结果
 4.取两个表的差集,代码如下:
 select a.empid,name,salary,a.telno from sm_emp a
 MINUS
 select b.empid,b.name ,salary,b.telno from sm_emp_sex b
 查询结果如图3-21所示。
图3-21职工表和性别表取差集的查询结果
相关文章:
oracle 多表查询
3.6多表查询 当查询的数据并不是来源一个表时,需要使用多表连接操作完成查询。多表连接查询通过表之间的关联字段,一次查询出多个表的数据。 3.6.1等值连接 等值连接也称为简单连接(Simple Joins)或者内连接(Inner Join)。通过等号来判断连接条件中的数据…...
layui 可以使点击图片放大
layui可以使图片点击放大,不用在写jquyery了真是很方便。 操作示例 引入 <link rel"stylesheet" href"https://cdn.jsdelivr.net/npm/layui-layer3.1.1/dist/layui.css" /> <script src"https://cdn.bootcdn.net/ajax/libs/jqu…...
 
制作网上3D展馆需要什么技术并投入多少费用?
制作网上3D展览馆项目,需要考虑以下技术和预算方面的信息: 技术需求: 1、三维建模技术:利用3D软件(3ds max、maya、blender、c4d等)制作展馆和展品的3D模型 2、Web3D技术:如WebGL,…...
 
C++标准库容器类——string类
引言 在c中,string类的引用极大地简化了字符串的操作和管理,相比 C 风格字符串(char*或cahr[]),std::string 提供了更高效和更安全的字符串操作。接下来让我们一起来深入学习string类吧! 1.string 的构造…...
 
Qt --- 常用控件的介绍 --- 其他控件
一、QPushButton QWidget中设计到的各种属性/函数/使用方法,针对接下来要介绍的Qt的各种控件都是有效的。 使用QPushButton表示一个按钮,这也是当前我们最熟悉的一个控件了。这个类继承了QAbstractButton,这个类是一个抽象类,是…...
 
spark读取数据性能提升
1. 背景 spark默认的jdbc只会用单task读取数据,读取大数据量时,效率低。 2. 解决方案 根据分区字段,如日期进行划分,增加task数量提升效率。 /*** 返回每个task按时间段划分的过滤语句* param startDate* param endDate* param …...
一次使用threading.Thread来实现Pytorch多个模型并发运行的失败案例
文章目录 背景我的做法(但证明不起效果) 背景 我有多个pytorch GPU模型,他们有不同的参数(也就是说不是共享的),但是相同的数据输入,想要并发运行。 不并发运行,当然就是循环喽。 …...
HashMap源码
简介 HashMap 是一种基于哈希表的 Map 接口实现,它存储键值对(key-value pairs),并允许使用键来快速检索值。在 Java 中,HashMap 是 java.util 包的一部分,它不是同步的,这意味着它不是线程安全…...
 
探索 Web Speech API:实现浏览器语音识别与合成
引言 Web Speech API 是一项由 W3C 开发的 Web 标准,为开发者提供了在 Web 应用程序中实现语音识别和语音合成的能力。通过 Web Speech API,我们可以让网页与用户进行语音交互,实现更加智能化和便捷的用户体验。本文将深入探讨 Web Speech A…...
python基础题练习
1.可否定义一个sum函数呢?返回指定区间的值的和?例如,区间[1,4]的和为123410返回指定区间值的平方的和呢?立方呢? 代码: # 计算从start到end(包括end)的所有整数的和。 def sum_ra…...
 
工业交换机如何保证数据的访问安全
在现代工业自动化环境中,工业交换机作为关键的网络设备,扮演着数据传输和信息交互的重要角色。为了确保数据的访问安全,工业交换机不仅具备高效的转发性能,还集成了多层次的安全防护机制,以抵御各种潜在的网络威胁。 首…...
 
jmeter得到的文档数据处理
通过前面jmeter得到的输出文档,这里是txt文档,里面包含了很多条数据,每条数据的结构如下: 【request】 uuid:xxxxxxx timestamp:xxxxxxxx No.x question:xxxxxxx 【response】 code&#…...
12- 【JavaWeb】校园快递管理系统-数据库建设
项目概述 开发一个Javaweb校园快递管理系统,包含以下功能: 数据库设计 首先,我们需要设计数据库的表结构。主要包括以下表: 学生表: 存储学生的基本信息,姓名、手机号。快递表: 存储快递的信息,快递单号、收件人、收件人手机号、…...
 
Windows本地连接远程服务器并创建新用户详细记录
前提可知: (1)服务器IP地址:x.x.x.x (2)服务器名称:root(一般默认为root,当然也有别的名称) (3)服务器登陆密码:**** 一、…...
 
【kaggle竞赛】毒蘑菇的二元预测题目相关信息和思路求解代码
毒蘑菇的二元预测 您提供了很多关于不同二元分类任务的资源和链接,看起来这些都是Kaggle竞赛中的参考资料和高分解决方案。为了帮助您更好地利用这些资源,这里是一些关键点的总结: Playground Season 4 Episode 8 主要关注的竞赛: 使用银行…...
Pytest-allure如何在测试完成后自动生成完整报告?
一、完整步骤 常规allure报告的生成方法是在pytest全部用例执行完成后,手动在命令行执行如 allure generate ./temps -o ./report --clean每次用例执行完成后都要重复如此的操作,十分繁琐。 可以使用如下方式让用例执行完成后自动生成报告到当前目录下…...
 
数据结构-树(基础,分类,遍历)
数据结构-树 1.什么是树? 在计算机科学中,树是一种常用的非线性数据结构,用于表示具有层次关系的数据。与线性数据结构(如数组和链表)不同,树结构以节点(Nodes)和边(Ed…...
 
CodeGeeX4:程序员的高效助手,多语言代码生成神器!
你是否曾在编写代码时,为复杂的语法、逻辑错误而绞尽脑汁?或是在面对多个编程语言的切换时,感觉脑子快要爆炸?别担心!一款全新的多语言代码生成神器——CodeGeeX4,正悄然成为程序员们的“救命稻草”。它不仅…...
 
小程序组件间通信
文章目录 父传子子传父获取组件实例兄弟通信 父传子 知识点: 父组件如果需要向子组件传递指定属性的数据,在 WXML 中需要使用数据绑定的方式 与普通的 WXML 模板类似,使用数据绑定,这样就可以向子组件的属性传递动态数据。 父…...
Homebrew安装与切换下载源
一、安装 1.Homebrew的官网地址 https://brew.sh/zh-cn/ 2.执行命令行安装 /bin/bash -c “$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)” 3.无法连接到https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh的地址 解决…...
 
Linux应用开发之网络套接字编程(实例篇)
服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …...
 
Zustand 状态管理库:极简而强大的解决方案
Zustand 是一个轻量级、快速和可扩展的状态管理库,特别适合 React 应用。它以简洁的 API 和高效的性能解决了 Redux 等状态管理方案中的繁琐问题。 核心优势对比 基本使用指南 1. 创建 Store // store.js import create from zustandconst useStore create((set)…...
 
智慧工地云平台源码,基于微服务架构+Java+Spring Cloud +UniApp +MySql
智慧工地管理云平台系统,智慧工地全套源码,java版智慧工地源码,支持PC端、大屏端、移动端。 智慧工地聚焦建筑行业的市场需求,提供“平台网络终端”的整体解决方案,提供劳务管理、视频管理、智能监测、绿色施工、安全管…...
FastAPI 教程:从入门到实践
FastAPI 是一个现代、快速(高性能)的 Web 框架,用于构建 API,支持 Python 3.6。它基于标准 Python 类型提示,易于学习且功能强大。以下是一个完整的 FastAPI 入门教程,涵盖从环境搭建到创建并运行一个简单的…...
vue3 字体颜色设置的多种方式
在Vue 3中设置字体颜色可以通过多种方式实现,这取决于你是想在组件内部直接设置,还是在CSS/SCSS/LESS等样式文件中定义。以下是几种常见的方法: 1. 内联样式 你可以直接在模板中使用style绑定来设置字体颜色。 <template><div :s…...
 
cf2117E
原题链接:https://codeforces.com/contest/2117/problem/E 题目背景: 给定两个数组a,b,可以执行多次以下操作:选择 i (1 < i < n - 1),并设置 或,也可以在执行上述操作前执行一次删除任意 和 。求…...
oracle与MySQL数据库之间数据同步的技术要点
Oracle与MySQL数据库之间的数据同步是一个涉及多个技术要点的复杂任务。由于Oracle和MySQL的架构差异,它们的数据同步要求既要保持数据的准确性和一致性,又要处理好性能问题。以下是一些主要的技术要点: 数据结构差异 数据类型差异ÿ…...
【git】把本地更改提交远程新分支feature_g
创建并切换新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “实现图片上传功能” 推送到远程 git push -u origin feature_g...
Matlab | matlab常用命令总结
常用命令 一、 基础操作与环境二、 矩阵与数组操作(核心)三、 绘图与可视化四、 编程与控制流五、 符号计算 (Symbolic Math Toolbox)六、 文件与数据 I/O七、 常用函数类别重要提示这是一份 MATLAB 常用命令和功能的总结,涵盖了基础操作、矩阵运算、绘图、编程和文件处理等…...
【python异步多线程】异步多线程爬虫代码示例
claude生成的python多线程、异步代码示例,模拟20个网页的爬取,每个网页假设要0.5-2秒完成。 代码 Python多线程爬虫教程 核心概念 多线程:允许程序同时执行多个任务,提高IO密集型任务(如网络请求)的效率…...
