数据库之多表查询

【数据库】MySQL-基础篇-多表查询 一、多表关系 1.一对多 2.多对多 3.一对一 二、多表查询概述 1.数据准备 2.概述 3.分类 三、内连接 1.隐式内连接 2.显式内连接 3.案例 四、外连接 1.左外连接 2.右外连接 五、自连接 1.自连接查询 2.联合查询 六、子查询 1.概述 1.1概念 1.2 分类 2.标量子查询 3.列子查询 4.行子查询 5.表子查询 七、多表查询案例 阅读详情

关于Struts2 + spring + hibernate进Q群: 130529143交流。
有偿技术支持Q群:
398162181 

--查询含有下划线的:

SQL> select last_name FROM employees WHERE last_name LIKE  '%\_%' ESCAPE '\';



select  last_name || '赚了' || to_char(salary, 'L999,999.999') || '但是他想赚' || to_char(salary * 2.5, 'L999,999.999') "理想的工资是实际的2.5倍"

from employees order by months_between(sysdate, hire_date) desc



select  last_name, job_id, decode(job_id, 'AD_PRES', 'A',
                                          'ST_MAN', 'B',
                                          'IT_PROG', 'C',
                                          'SA_REP', 'D',
                                          'ST_CLERK', 'F') "Grade"
from employees order by "Grade" asc



SELECT  last_name, job_id,CASE job_id WHEN 'AD_PRES'THEN 'A'
                                      WHEN 'ST_MAN' THEN 'B'
                                      WHEN 'IT_PROG' THEN 'C'
                                      WHEN 'SA_REP'THEN 'D'
                                      WHEN 'ST_CLERK' THEN 'F'
                                      ELSE 'G' END "Grade"
from employees order by "Grade" ASC



SELECT employee_id, last_name, salary, grade_level
FROM employees e, job_grades j
WHERE e.salary between j.lowest_sal AND j.highest_sal



--自连结
SELECT emp.last_name, man.last_name, man.salary, man.email
FROM  employees emp, employees man 
WHERE emp.manager_id = man.employee_id AND LOWER(emp.last_name) = 'chen'



--左外连接(在右表中加(+),除返回符合条件的行,还返左表中不符合条件的行 )
--右外连接(在左表中加(+)除返回符合条件的行,还返右表中不符合条件的行)
SELECT employee_id, last_name, department_name
FROM  employees e, departments d
WHERE e.department_id = d.department_id(+)



--满外连接
SELECT employee_id, last_name,d.department_id, department_name
FROM  employees e 
FULL OUTER JOIN departments d
ON e.department_id = d.department_id



--左外连接
SELECT employee_id, last_name,d.department_id, department_name
FROM  employees e 
LEFT OUTER JOIN departments d
ON e.department_id = d.department_id



--右外连接
SELECT employee_id, last_name,d.department_id, department_name
FROM  employees e 
RIGHT OUTER JOIN departments d
ON e.department_id = d.department_id



--两个表的  列名与数据类型  需相同
SELECT employee_id, last_name,department_id, department_name
FROM  employees join departments
USING (department_id)



--使用JOIN 多表查询
SELECT employee_id, last_name,d.department_id, department_name
FROM  employees e JOIN departments d
ON e.department_id = d.department_id



--使用JOIN 多表查询
SELECT employee_id, last_name,d.department_id, department_name, l.city 
FROM  employees e 
JOIN departments d
ON e.department_id = d.department_id
JOIN locations l 
ON d.location_id = l.location_id



select department_id, avg(salary)
from employees 
where department_id in (40,60)
group by department_id



--不是组函数的列都要出现在group by 中 
select department_id, job_id, avg(salary)
from employees 
group by department_id, job_id



--不能在where子句中使用组函数,where要紧跟 from 之后
--可以在having子句中使用组函数, having 无要求



select avg(salary), locations.city 
from employees e, departments, locations
where departments.department_id = e.department_id 
and departments.location_id = locations.location_id
group by locations.city



select manager_id, min(salary)
from employees e
where manager_id is not null 
having min(salary) >= 6000
group by e.manager_id



select department_name, d.location_id, count(employee_id), avg(salary)
from employees e, departments d, locations l
where e.department_id(+) = d.department_id and d.location_id = l.location_id
group by department_name, d.location_id



--查询公司在1995-1998年每年雇佣的人数
select count(employee_id) "Total", 
count(decode(to_char(hire_date, 'yyyy'), '1995', 1, null)) "1995",
count(decode(to_char(hire_date, 'yyyy'), '1996', 1, null)) "1996",
count(decode(to_char(hire_date, 'yyyy'), '1997', 1, null)) "1997",
count(decode(to_char(hire_date, 'yyyy'), '1998', 1, null)) "1998"
from employees e
where to_char(hire_date, 'yyyy') in ('1995', '1996', '1997', '1998')



--子查询
select last_name
from employees 
where salary > (select salary from employees where last_name = 'Abel')


--子查询
select last_name, salary, email 
from employees 
where employee_id = (select manager_id from employees where last_name = 'Chen')



--子查询:查询过滤条件是另一个查询的结果
select last_name, job_id, salary
from employees 
where job_id = (select job_id from employees where employee_id = 141)
and salary > (select salary from employees where employee_id = 143)



select last_name, job_id, salary
from employees 
where job_id = (select job_id 
                from employees 
                where employee_id = 141)
and salary > (select salary 
              from employees 
              where employee_id = 143)



select employee_id, last_name, job_id, salary
from employees 
where job_id != 'IT_PROG' 
and salary < any (
               select salary 
               from employees 
               where job_id = 'IT_PROG')




--查询平均工资最低的部门信息
select department_id, department_name, city
from departments d, locations l
where department_id = (
                      select department_id
                      from employees
                      having avg(salary) = (
                                     select min(avg(salary)) 
                                     from employees 
                                     group by department_id
                                     )
                      group by department_id 
                      )
and d.location_id = l.location_id



--3.以department_id 为条件查询部门的信息 
select d.*, (select avg(salary) from employees where department_id = d.department_id) --查询平均工资最低部门的平均工资
from departments d 
where d.department_id = (
                      --2 查询平均工资最低部门的department_id
                      select department_id
                      from employees
                      having avg(salary) = (
                                     --1.查询各部门最少的平均工资
                                     select min(avg(salary)) 
                                     from employees 
                                     group by department_id
                                     )
                      group by department_id 
                      )





select j.* 
from jobs j
where job_id = (
                select job_id
                from employees


                having avg(salary) = (
                                      select max(avg(salary)) 
                                      from employees
                                      group by job_id
                                      )
                group by job_id
               )



--查询平均工资高于公司平均工资的部门
select department_id, avg(salary) 
from employees 
group by department_id
having avg(salary) > (
                      select avg(salary)
                      from employees
                      )




select * 
from employees 
where employee_id in (
                     select manager_id
                     from  employees
                     )



select * 
from employees
where employee_id = (
                    select distinct manager_id 
                    from departments
                    where department_id=(
                                          select department_id
                                          from employees
                                          having avg(salary) = (
                                                             --查询部门的平均工资的最大值
                                                              select max(avg(salary))
                                                              from employees 
                                                              group by department_id
                                                               )
                                          group by department_id
                                          )
                    )




select  * 
from employees
where salary = (
                select max(salary)
                from employees
                where to_char(hire_date, 'yyyy') = '1999' 
                )
to_char(hire_date, 'yyyy') = '1999'




--查询各个部门中工资比本部门平均工资高的员工的信息
select e1.employee_id, e1.last_name, e1.salary
from employees e1
where salary > (
                select avg(salary)
                from employees e2
                where e1.department_id = e2.department_id
                group by department_id
               ) 





--查询在location_id 为1700的部门工作的员工的工号和姓名
select employee_id, last_name
from employees 
where department_id in (
                        select department_id
                        from departments
                        where location_id = 1700
                       ) 




--查询管理者是King 的员工姓名和工资
select employee_id, last_name, salary
from employees 
where manager_id in (
                    select employee_id
                    from employees
                    where last_name = 'King'
                    ) 


多表查询总结:



SQL语句的多表查询方式:


例如:按照department_id查询employees(员工表)和departments(部门表)
的信息。
方式一(通用型):SELECT ... FROM ... WHERE
SELECT e.last_name,e.department_id,d.department_name
FROM employees e,departments d
where e.department_id = d.department_id


方式二:SELECT ... FROM ... NATURAL JOIN ...
有局限性:会自动连接两个表中相同的列(可能有多个:department_id和manager_id)
SELECT last_name,department_id,department_name
FROM employees
NATURAL JOIN departments


方式三:SELECT ... JOIN ... USING ...
有局限性:好于方式二,但若多表的连接列列名不同,此法不合适
SELECT last_name,department_id,department_name
FROM employees
JOIN departments
USING(department_id)


方式四:SELECT ... FROM ... JOIN ... ON ...
常用方式,较方式一,更易实现外联接(左、右、满)
SELECT last_name,e.department_id,department_name
FROM employees e
JOIN departments d
ON e.department_id = d.department_id



--内连接
    1)
    --等值连接
    --不等值连接
    2)
    --非自连接
    --自连接


--外连接
    --左外连接、右外连接、满外连接


多列子查询:


--传统查询
select employee_id, manager_id, department_id  
from employees e1 
where manager_id in ( 
                    select manager_id 
                    from employees 
                    where employee_id in (141, 174)
                    ) 
and department_id in ( 
                      select department_id 
                      from employees 
                      where employee_id in (141, 174)
                     )
and employee_id not in (141, 174)












--多列子查询



--传统查询
select employee_id, manager_id, department_id  
from employees e1 
where manager_id in ( 
                    select manager_id 
                    from employees 
                    where employee_id in (141, 174)
                    ) 
and department_id in ( 
                      select department_id 
                      from employees 
                      where employee_id in (141, 174)
                     )
and employee_id not in (141, 174)



--多列子查询
select employee_id, manager_id, department_id  
from employees e1 
where (manager_id, department_id) in ( 
                    select manager_id, department_id 
                    from employees 
                    where employee_id in (141, 174)
                    ) 
and employee_id not in (141, 174)

关于Struts2 + spring + hibernate进Q群: 130529143交流。
有偿技术支持Q群:
398162181 














02 - GRACE数据处理步骤简叙 本篇对GRACE数据处理的过程进行了介绍,简单叙述了进行数据各种改正的原因,可以帮助理解GRACE数据处理理论,本文借鉴了多篇优秀博士论文。希望可以对👪有所帮助。 阅读详情

相关推荐

PP-OCRv6 ONNX部署的官方和手搓方案

PP-OCRv6 基于全新设计的 PPLCNetV4 统一骨干网络,提供 tiny、small、medium 三档模型,分别面向端侧/IoT、移动端/桌面端、服务端场景。在内部多场景综合评估集上,PP-OCRv6_medium 相比 PP-OCRv5_server 识别精度提升 5.1%、检测精度提升 4.6%,同时 GPU 推理速度提升 2.37×;以仅 34.5M 参数的规模,精度超越 Qwen3-VL-235B、GPT-5.5 等大型视觉语言模型。

懒人的技术笔记 1884

Oracle数据库笔记

1、Oracle的安装: 在安装Oracle数据库的时候,请以管理员的身份运行。

朋友从陌生人开始的博客 1678

诠视MR眼镜Unity开发设置_Unity2020.3.38

请按照如下设置Android SDK 和 Gradle。打包前先将Unity切换到Android模式。Preferences 设置。

m0_71932574的博客 599

数据库中的多表查询总结

数据库在单个表里操作其实很简答,但是涉及在多张表里寻找数据的时候,难度会大大增加,这里解释一些多表联合查询常用的操作。 一、join操作 在数据库的查询中,多表连接查询是一大难点,也是多表查询里的重点。连接主要有以下四种情况: INNER JOIN(内连接):如果表中有至少一个匹配,则返回行 【在语法中可以省略INNER关键字】 LEFT JOIN(左连接):从左表返回所有的行,如果右表中...

u013044310的博客 7万+

Django Cookie/Session

Cookie是一种小型的文本文件,通常由Web服务器发送到用户浏览器,并存储在用户的本地计算机上。当用户再次访问该网站时,浏览器会将Cookie发送回服务器,从而实现用户身份验证、个性化设置等功能。Session是一种在服务器端存储用户会话信息的方式。与Cookie不同,Session数据存储在服务器上,而不是客户端。Django框架通过在客户端存储一个Session ID来实现Session的跟踪。Django框架的Cookie/Session机制为开发者提供了方便的数据存储和会话管理功能。

froginwe11的博客 467

MRI图像切片(nii格式转2D)

代码参考:将一个MRI(nii格式)数据进行切片 想要批量抽取MRI数据的几个切片,借鉴了上述代码的Python版本,原始代码抽取了全部切片。本次实验主要是抽取sMRI的横断面(axial)方向的其中30张切片,数量根据自己需求可自行设置。 import scipy, numpy, shutil, os, nibabel import sys, getopt import imageio def niito2D(filepath): inputfiles = os.listdir(filep

chs_502的博客 7548

数据库--多表查询

文章目录数据库--多表查询5.2多表查询概述5.2.1 数据准备5.2.2 概述5.2.3 分类5.3 内连接1). 隐式内连接2). 显式内连接案例:5.4 外连接1). 左外连接2). 右外连接案例:5.5 自连接5.5.1 自连接查询案例:5.5.2 联合查询union查询案例:5.6 子查询5.6.1 概述1). 概念2). 分类5.6.2 标量子查询概述案例:5.6.3 列子查询概述案例:5.6.4 行子查询概述案例:5.6.5 表子查询概述案例:5.7 多表查询案例 数据库–多表查询 5.2多表

Android应用开发工程师 1万+

小红书UID泄露风险揭秘:如何防止你的手机号被社工库关联(附防护指南)

本文揭示了小红书UID泄露的严重风险,详细解析了UID与手机号关联后被社工库利用的完整链条。通过分析黑产的数据整合技术,提供从基础到进阶的防护策略,包括密码管理、账号隔离和应急响应措施,帮助用户有效防范个人信息泄露风险。

ol789012345的博客 1501

DB - 多表查询

多表查询一、基本概念二、多表查询分类1. 内连接查询2. 外连接查询3. 子查询子查询示例子查询的不同情况 一、基本概念 多表查询语法 SELECT 字段列表 FROM 表名列表 WHERE 约束条件 ; 笛卡尔积现象:有两个集合 A,B,取这两个集合的所有组成情况。MySQL的多表查询结果就是以笛卡尔积的结果形式返回,这样的结果通常伴随一些无效结果。要完成多表查询,需要采用相应的手段消除无效结果。 二、多表查询分类 案例:结合对以下数据表的查询语句理解多表查询 # 创建部门表 CREATETABL

xing123456jl的博客 2098

记录一次小项目中的重放攻击与解决方案

文章目录1、重放攻击简介2、重放攻击演示3、解决方案4、重放攻击验证 欢迎各位 前(提)来(出)讨(意)论(见)。 1、重放攻击简介 重放攻击(Replay Attacks)又称重播攻击、回放攻击,是指攻击者发送一个目的主机已接收过的包,来达到欺骗系统的目的,主要用于身份认证过程,破坏认证的正确性。 举个简单的小例子。 我们往系统里面插入一条数据,如果此次操作的数据包被攻击者获取,又恰巧后台没有对重复内容进行验证,那么攻击者就可以利用该数据包重复的发起请求,无限制的往数据库插入数据,即使请求包是加密的也

fiveSix 8725

【CANdelaStudio编辑CDD】-21.2-创建OBD诊断$03,$07,$0A和$04服务以及OBD DTC

案例背景(共11页精讲):创建OBD诊断$03,$07,$0A和$04服务;以及OBD DTC。 在《【ISO15031_OBD诊断】-3.1-$03服务Request emission-related diagnostic trouble codes理论部分https://blog.youkuaiyun.com/qfmzhu/article/details/122157513》, 《【ISO15031_OBD诊断】-7.1-$07服务Request emission-related diagnostic trou

「汽车电子助手」的博客 1697

Oracle 数据库查询:多表查询

想把分散在多个表里的数据拼起来看?核心就靠JOIN(连接)和子查询。可以用INNER JOIN找到两边都匹配的记录,或用OUTER JOIN查看单边也存在的数据。一个非常强大的技巧,是把一个查询结果当成临时表来用,能让复杂的统计分析变得清晰。再结合新版本里简洁的分页语法,跨表取数和展示就得心应手了。

专注于 Agent 工程、AI 产品、Harness Engineering、LLM 算法等方向,OpenMathModel、Nivik 等开源项目作者 7万+

复旦微FMSH_Procise安装全流程详解:从环境配置到实战避坑指南

通过本文的全流程解析+实战技巧,开发者可快速掌握Procise在复旦微芯片开发中的核心应用。未来随着AKConv轻量级架构(参考往期文章)等创新技术的融入,国产芯片开发生态将更加完善。立即关注本专栏,获取最新多镜像切换指南与Linux SDK实战教程!扩展阅读复旦微在线升级BOOT.BIN全解析H7-TOOL实现复旦微脱机烧录(注:本文实验环境为Windows 10 x64 + FMQL45T-CORE开发板,部分操作可能因版本更新调整)立即行动下载本文配套配置文件:[GitHub链接]加入技术交流群。

QQ_778132974的博客 3231

数据库 多表查询

内连接 外连接 子查询

小旺财的博客 3601

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

数据库基础--多表查询

本文系统介绍了数据库多表关系及其查询方法。主要内容包括:1)三种多表关系实现方式(一对多、多对多、一对一);2)多表查询分类:内连接(隐式/显式)、外连接(左/右)、自连接、联合查询和子查询(标量/列/行/表);3)各类查询语法及实际应用案例。重点阐述了通过外键建立表间关联,以及如何消除笛卡尔积。最后总结了多表关系设计和查询的核心要点。

weixin_74062380的博客 2170

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

数据库多表查询总结

数据库多表查询总结

m0_58725148的博客 2691

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

MySQL数据库之多表查询

项目开发中,在进行数据库表结构涉及时,会根据业务需求及业务模块之间的关系,分析并涉及表结构,由于业务之间相互关联,所以各个表结构之间也存在着各种联系,基本上分为三种。

new9232的博客 980

达梦数据库多表查询

达梦数据库(DM数据库)的多表查询是一个重要的功能,它允许用户从多个表中获取数据。

wyy_2023的博客 2569

数据库基础-多表查询

数据准备1). 删除之前 emp, dept表的测试数据2). 执行如下脚本,创建emp表与dept表并插入测试数据创建emp以及dept表name varchar(50) not null comment '部门名称')comment '部门表';INSERT INTO dept (id, name) VALUES (1, '研发部'), (2, '市场部'),(3, '财务部'), (4,'销售部'), (5, '总经办'), (6, '人事部');

2401_87689651的博客 937

【MySQL数据库】- 多表查询

项目开发中,在进行数据库表结构设计时,会根据业务需求及业务模块之间的关系,分析并设计表结构,由于业务之间相互关联,所以各个表结构之间也存在着各种联系。

知足上进,不负野心。 2494

数据库多表关联查询

数据库多表关联查询一、JOIN的使用二、JOIN等同于INNER JOIN等同于WHERE二、多表关联查询 一、JOIN的使用 数据库表之间的关联查询使用“join … on …” 关键字。 JOIN分为: JOIN INNER JOIN LEFT JOIN RIGHT JOIN FULL JOIN 五种JOIN查询的区别: JOIN: 在表中存在至少一个匹配时,则返回行; INNER JOIN:在表中存在至少一个匹配时,则返回行。 LEFT JOIN: 即使右表中没有匹配,也从左表返回所有的行 ; RIG

1万+

数据库单表查询和多表查询练习

数据库单表查询和多表查询练习

yangzhi_emo的博客 805

数据库学习中,多表关联,复杂查询

在数据库操作的广袤天地里,SQL 语句犹如一把万能钥匙,开启了数据存储、检索与管理的高效之门。

mhjnmh的博客 1543

数据库表多表的查询

开发工具与关键技术:vs 多表查询 作者:黄海峰 撰写时间:2019.05. 数据库多表的查询是建立在单表的基础上连接多张表进行数据查询的方法,连接的依据就是数据表中的外键,我们的通过一张表的主键和另一张表的的外键,这样就可以把数据连接起来,比如员工表中的外键ID:部门ID,这个外键ID是部门表的主键ID这是两张表连接的依据,这样子两张表就是关系表了。我们通过A表外键ID和B表主键ID相等然后把...

weixin_44550096的博客 344

MySQL数据库—多表查询

关系: 一对一关系,多用于单表拆分,将一张表的基础字段放在一张表中,其他详情字段放在另一张表中,以提升操作效率。子查询返回的结果是单个值(数字、字符串、日期等),最简单的形式,这种子查询称为标量子查询。实现: 在任意一方加入外键,关联另外一方的主键,并且设置外键为唯一的(UNIQUE)子查询返回的结果是一列(可以是多行),这种子查询称为列子查询。子查询返回的结果是一行(可以是多列),这种子查询称为行子查询。子查询返回的结果是多行多列,这种子查询称为表子查询。实现: 在多的一方建立外键,指向一的一方的主键。

Java技术加油站的博客 758

数据库单表查询与多表查询

1.查询EMP表中部门号为20的员工的姓名、职位、参加工作时间、工资。2.计算每个员工的年薪,要求输出员工姓名,年薪。3.查询每个员工每个月拿到的总金额(sal为工资,comm为补助)。4.显示职位是主管(manager)的员工的姓名,工资。5.显示第三个字任为大写R的所有员工的姓名及工资6.显示职为销售员(SALESMAN) 或主管(MANAGER)的员工的姓名,工资,职位。7显示所有没有补助的员工的姓名。8.最示有补助的员工的姓名、工资、补助。9.查询出部门编号30的所有员工。

2301_78884634的博客 635
上一篇: Struts2环境的搭建
下一篇: 数据库之用户权限管理
eplusing
博客等级 码龄12年 45粉丝 118原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值