首页 > 数据库 >MySQL数据库语法(五-->多表查询)

MySQL数据库语法(五-->多表查询)

时间:2024-05-28 09:32:56浏览次数:35  
标签:多表 收入 -- 员工 dept 部门 名称 MySQL 列出

多表查询

1. inner join:代表选择的是两个表的交差部分。
 内连接就是表间的主键与外键相连,只取得键值一致的,可以获取双方表中的数据连接方式。语法如下:
 SELECT 列名1,列名2... FROM 表1 INNER JOIN 表2 ON 表1.外键=表2.主键 WhERE 条件语句;
 
2. left join:代表选择的是前面一个表的全部。
左连接是以左表为标准,只查询在左边表中存在的数据,当然需要两个表中的键值一致。语法如下:
SELECT 列名1 FROM 表1 LEFT OUTER JOIN 表2 ON 表1.外键=表2.主键 WhERE 条件语句;

3. right join:代表选择的是后面一个表的全部
同理,右连接将会以右边作为基准,进行检索。语法如下:
SELECT 列名1 FROM 表1 RIGHT OUTER JOIN 表2 ON 表1.外键=表2.主键 WhERE 条件语句;

4.自连接
自连接顾名思义就是自己跟自己连接,参与连接的表都是同一张表。(通过给表取别名虚拟出)

5.交叉连接:不适用任何匹配条件。生成笛卡尔积


联合查询

说明:一般情况下,我们会将 IN 或者 OR 语句 改写成 UNION ALL,来提高性能
UNION   去重复
UNION ALL 不去重复
-- 中国或美国城市信息
SELECT * FROM city
WHERE countrycode IN ('CHN' ,'USA');
SELECT * FROM city WHERE countrycode='CHN'
UNION ALL
SELECT * FROM city WHERE countrycode='USA'
新增员工表emp和部门表dept
create table dept (dept1 int ,dept_name varchar(11)) charset=utf8;
create table emp (sid int ,name varchar(11),age int,worktime_start date,incoming int,dept2 int) charset=utf8;

insert into dept values
(101,'财务'),
(102,'销售'),
(103,'IT技术'),
(104,'行政');

insert into emp values
(1789,'张三',35,'1980/1/1',4000,101),
(1674,'李四',32,'1983/4/1',3500,101),
(1776,'王五',24,'1990/7/1',2000,101),
(1568,'赵六',57,'1970/10/11',7500,102),
(1564,'荣七',64,'1963/10/11',8500,102),
(1879,'牛八',55,'1971/10/20',7300,103);

1.找出销售部门中年纪最大的员工的姓名
2.求财务部门最低工资的员工姓名
3.列出每个部门收入总和高于9000的部门名称
4.求工资在7500到8500元之间,年龄最大的人的姓名及部门
5.找出销售部门收入最低的员工入职时间
6.财务部门收入超过2000元的员工姓名
7.列出每个部门的平均收入及部门名称
8.IT技术部入职员工的员工号
9.财务部门的收入总和;
10.找出哪个部门还没有员工入职;
11.列出部门员工收入大于7000的部门编号,部门名称;
12.列出每一个部门的员工总收入及部门名称;
13.列出每一个部门中年纪最大的员工姓名,部门名称;
14.求李四的收入及部门名称
15.列出每个部门中收入最高的员工姓名,部门名称,收入,并按照收入降序

1.找出销售部门中年纪最大的员工的姓名


2.求财务部门最低工资的员工姓名

select name from emp
where dept2=(select dept1 from dept where dept name='财务')and incoming=(select min(incoming) from empwhere dept2=(select dept1 from dept where dept name='财务'))


3.列出每个部门收入总和高于9000的部门名称


4.求工资在7500到8500元之间,年龄最大的人的姓名及部门


5.找出销售部门收入最低的员工入职时间


6.财务部门收入超过2000元的员工姓名


7.列出每个部门的平均收入及部门名称


8.IT技术部入职员工的员工号


9.财务部门的收入总和;


10.找出哪个部门还没有员工入职;


11.列出部门员工收入大于7000的部门编号,部门名称;


12.列出每一个部门的员工总收入及部门名称;

select * from dept left JOIN(select dept2,SUM(incoming) 
from emp GROUP BY dept2
on dept.dept1=new1.dept2


13.列出每一个部门中年纪最大的员工姓名,部门名称;


14.求李四的收入及部门名称


15.列出每个部门中收入最高的员工姓名,部门名称,收入,并按照收入降序

标签:多表,收入,--,员工,dept,部门,名称,MySQL,列出
From: https://blog.csdn.net/duoba_an/article/details/139243413

相关文章

  • 利用大型语言模型轻松打造浪漫时刻
    当情人节年年如约而至,每每都需费尽心思为对方营造一场令人难忘的仪式,却因缺乏创意与思路而倍感困扰。今天,我决定让大型语言模型为我们提供一些灵感和建议,让我们能够轻松实现这一目标。让我们开始行动吧!此前,我曾撰写一篇关于如何与大型语言模型建立基本对话的文章。如果您感兴趣,不......
  • 滑动窗口-java
    主要通过单调队列来解决滑动窗口问题,得到滑动窗口中元素的最大值和最小值。目录前言一、滑动窗口二、算法思路1.滑动窗口 2.算法思路3.代码详解三、代码如下1.代码如下2.读入数据3.代码运行结果总结前言主要通过单调队列来解决滑动窗口问题,得到滑动窗口中......
  • JAVA------基础篇
    java基础1.JDKJDK:javadevelopmentkitJRE:javaruntimeenvironmentJDK包含JREjava跨平台:因为java程序运行依赖虚拟机,虚拟机需要有对应操作系统的版本,而jre中有虚拟机。当你想要在Linux系统下运行,则需要安装对应的虚拟机,及对应的jdk版本,而对应的jdk版本中的jre有对......
  • Cadence allegro PCB添加层叠
    点击Setup→Cross-section或者直接点击工具栏如图所示图标,打开叠层页面。这个页面一开始可能固定在最上面无法拉动,这时我们只需要点击右下角缩放一下该页面,即可拖动。选中想添加的位置,点击右键出现如图所示页面,常用在下面添加。直接双击层叠名字也可以直接命名......
  • 【秒杀系统】秒杀系统实战(四):缓存与数据库双写一致性深度分析
    【秒杀系统】秒杀系统实战(四):缓存与数据库双写一致性深度分析前言微笑挖坑,努力填坑。————已经拥有黑眼圈,但还没学会小猪老师时间管理学的蛮三刀同学本文是秒杀系统的第四篇,我们来讨论秒杀系统中缓存热点数据的问题,进一步延伸到数据库和缓存的双写一致性问题,并且给......
  • 2023广东省大学生程序设计竞赛
    A题:签到提直接模拟就行了//A#include<iostream>#include<algorithm>#include<map>#defineintlonglongusingnamespacestd;intt,a,b,c,d,sum=0;signedmain(){ cin>>t; while(t--) { sum=0; map<int,int>ma; cin>>a>>d......
  • C语言---指针
    概念:指针就是指地址,指针是一种数据类型,专门用来存储地址这种数据的数据类型。指针变量的定义:基类型*变量名;eg:inta=10;int*p=&a;*p运算:1、首先拿出p中地址,到内存中定位2、定位到之后,从定位处开始,偏移出sizeof(基类型)的一块空间3、将这块空间当作一个基类......
  • 回顾二分答案 例题分析(D. Fast and Fat 和 I.Path Planning)
    对于二分答案的引述来自:二分查找&二分答案万字详解,超多例题,带你学透二分。_c++二分答案怎么确定是l<r还是l<=r-CSDN博客概念:二分答案:答案有一个区间,在这个区间中二分,直到找到最优答案。什么时候用二分答案?答案属于一个区间,当这个区间很大时,暴力超时。但重要的是——这......
  • python容器,字符串,列表,元组,字典介绍和常规操作
    在Python中,常见容器有:(1)字符串:str(2)列表:list(3)元组:tuple(4)字典:dict#容器#列表[]#list1=[1,2,3,4,5,6,7,8,9]可以增删改查#元组()#tuple1=(1,2,3,4,5,6,7,8,9)只能查,不能改#字典{}#dict1={1:1,2:2,3:3,4:4,5:5,6:6,7:7}#集合{}#set1={1,2,3,4,5,6,7,8,9}......
  • 【Linux】22. 线程控制
    Linux线程控制POSIX线程库与线程有关的函数构成了一个完整的系列,绝大多数函数的名字都是以“pthread_”打头的要使用这些函数库,要通过引入头文<pthread.h>链接这些线程函数库时要使用编译器命令的“-lpthread”选项线程创建pthread_create函数功能:创建一个新的线程......