文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

MySQL中的多表联合查询功能怎么使用

2023-07-05 02:16

关注

本篇内容介绍了“MySQL中的多表联合查询功能怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

一.介绍

多表查询就是同时查询两个或两个以上的表,因为有的时候用户在查看数据的时候,需要显示的数据来自多张表.多表查询有以下分类:

数据准备

-- 创建部门表create table if not exists dept3(  deptno varchar(20) primary key ,  -- 部门号  name varchar(20) -- 部门名字);-- 创建员工表create table if not exists emp3(  eid varchar(20) primary key , -- 员工编号  ename varchar(20), -- 员工名字  age int,  -- 员工年龄  dept_id varchar(20)  -- 员工所属部门);-- 给dept3表添加数据insert into dept3 values('1001','研发部');insert into dept3 values('1002','销售部');insert into dept3 values('1003','财务部');insert into dept3 values('1004','人事部');-- 给emp3表添加数据insert into emp3 values('1','乔峰',20, '1001');insert into emp3 values('2','段誉',21, '1001');insert into emp3 values('3','虚竹',23, '1001');insert into emp3 values('4','阿紫',18, '1001');insert into emp3 values('5','扫地僧',85, '1002');insert into emp3 values('6','李秋水',33, '1002');insert into emp3 values('7','鸠摩智',50, '1002'); insert into emp3 values('8','天山童姥',60, '1003');insert into emp3 values('9','慕容博',58, '1003');insert into emp3 values('10','丁春秋',71, '1005');

交叉连接查询

格式

MySQL中的多表联合查询功能怎么使用

实现

MySQL中的多表联合查询功能怎么使用

结果

MySQL中的多表联合查询功能怎么使用

MySQL中的多表联合查询功能怎么使用

 内连接查询

内连接查询求多张表的交集

MySQL中的多表联合查询功能怎么使用

 格式

MySQL中的多表联合查询功能怎么使用

操作

MySQL中的多表联合查询功能怎么使用

 inner可以省略

操作

MySQL中的多表联合查询功能怎么使用

-- 查询研发部门的所属员工-- 隐式内连接select * from emp3 e ,dept3 d where e.dept_id =d.deptno and name ='研发部';-- 显式内连接select * from dept3 d join emp3 e on d.deptno =e.dept_id and name ='研发部'; -- 查询研发部和销售部的所属员工select * from dept3 a join emp3 b on a.deptno = b.dept_id and (name = '研发部' or name = '销售部') ; select * from dept3 a join emp3 b on a.deptno = b.dept_id and name in('研发部' ,'销售部') ;  -- 查询每个部门的员工数,并升序排序 select a.name,a.deptno,count(1) from dept3 a    join emp3 b on a.deptno = b.dept_id group by   a.deptno,name;  -- 查询人数大于等于3的部门,并按照人数降序排序 select  a.deptno,  a.name,  count(1) as total_cntfrom dept3 ajoin emp3 b on a.deptno = b.dept_idgroup by   a.deptno,a.namehaving   total_cnt >= 3order by   total_cnt desc;

外连接

外连接分为左外连接(left outer join)、右外连接(right outer join),满外连接(full outer join)。注意: oracle里面有full join,可是在mysql对full join支持的不好。我们可以使用unjion来达到目的。

 格式

左外连接: left outer join
        select* from A left outer join B on条件;
右外连接: right outer join
        select* from A right outer join B on条件;
满外连接: full outer join
        select * from A full outer join B on 条件;

MySQL中的多表联合查询功能怎么使用

 操作

MySQL中的多表联合查询功能怎么使用

 直接用fulljion会报错

-- 外连接查询-- 查询哪些部门有员工,哪些部门没有员工select * from dept3 left outer join emp3 on dept3.deptno = emp3.dept_id;-- 查询员工有对应的部门,哪些没有select * from dept3 right outer join emp3 on dept3.deptno = emp3.dept_id;-- 使用union关键字实现左外连接和右外连接的并集select * from dept3 left outer join emp3 on dept3. deptno = emp3.dept_idunionselect * from dept3 right outer join emp3 on dept3.deptno = emp3.dept_id;

子查询

介绍

子查询就是指的在一个完整的查询语句之中,嵌套若干个不同功能的小查询,从而一起完成复杂查询的一种编写形式,通俗一点就是包含select嵌套的查询。

特点

子查询可以返回的数据类型一共分为四种:

单行单列:返回的是一个具体列的内容,可以理解为一个单值数据;单行多列:返回一行数据中多个列的内容;多行单列:返回多行记录之中同一列的内容,相当于给出了一个操作范围;多行多列:查询返回的结果是一张临时表

操作

-- 查询年龄最大的员工信息,显示信息包含员工号、员工名字,员工年龄select * from emp3 where age=(select max(age) from emp3 ); select eid,ename ,age from emp3 where age = (select max (age) from emp3);-- 查询年研发部和销售部的员工信息,包含员工号、员工名字select  * from emp3 where emp3.dept_id in (select deptno from dept3 d where d.name='研发部' or d.name='销售部'); select eid,ename , t.name from emp3 where dept_id in (select deptno, name from dept3where name ='研发部'or name ='销售部');-- 查询研发部20岁以下的员工信息,包括员工号、员工名字,部门名字 -- 方式一:关联查询select * from dept3 d join emp3 e on d.deptno =e.dept_id and (d.name='研发部' and e.age<20); -- 方式二:子查询select eid,age ,ename , name from (select * from dept3 where name = '研发部')t1 , (select * from emp3 where age <20) t2 where  t1.deptno =t2.dept_id ; select eid,age ,ename , name from (select * from dept3 where name = '研发部')t1 join  (select * from emp3 where age <20) t2 on t1.deptno =t2.dept_id ;

子查询关键字

在子查询中,有一些常用的逻辑关键字,这些关键字可以给我们提供更丰富的查询功能,主要关键字如下:

1.ALL关键字
2.ANY关键字
3.SOME关键字
4.IN关键字
5.EXISTS关键字

all关键字

格式

MySQL中的多表联合查询功能怎么使用

特点

操作

MySQL中的多表联合查询功能怎么使用

any关键字和some关键字

格式

MySQL中的多表联合查询功能怎么使用

特点

操作

MySQL中的多表联合查询功能怎么使用

in关键字

格式

MySQL中的多表联合查询功能怎么使用

 特点

操作

MySQL中的多表联合查询功能怎么使用

exists关键字

格式

MySQL中的多表联合查询功能怎么使用

特点

操作

MySQL中的多表联合查询功能怎么使用

 自关联查询

概念

MySQL有时在信息查询时需要进行对表自身进行关联查询,即一张表自己和自己关联,一张表当成多张表来用。注意自关联时表必须给表起别名。

格式

MySQL中的多表联合查询功能怎么使用

操作

数据准备

-- 创建表,并建立自关联约束create table t_sanguo (    eid int primary key ,    ename varchar (20) ,    manager_id int,    foreign key (manager_id) references t_sanguo (eid) -- 添加自关联约束);--添加数据insert into t_sanguo values (1,'刘协',NULL) ,                             (2,'刘备',1),                             (3,'关羽',2),                            (4,'张飞',2),                             (5,'曹操',1),                            (6,'许褚',5),                             (7,'典韦',5),                             (8,'孙权',1) ,                             (9,'周瑜',8),                            (10,'鲁肃',8) ;
-- 进行关联查询-- 1.查询每个三国人物及他的上级信息,如:关羽刘备select * from t_sanguo ts ,t_sanguo ts2 where ts .manager_id  =ts2.eid  ;select ts.ename ,ts2.ename  from t_sanguo ts ,t_sanguo ts2 where ts .manager_id  =ts2.eid  ;-- 2.查询所有人物及上级(刘协(没有上级)也输出)select a.ename,b.ename from t_sanguo a left join t_sanguo b on a.manager_id = b.eid;-- 3.查询所有人物、上级,上上级比如:张飞刘备刘协selecta.ename,b.ename,c.enamefrom t_sanguo aleft join t_sanguo b on a.manager_id = b.eidleft join t_sanguo c on b.manager_id = c.eid;

“MySQL中的多表联合查询功能怎么使用”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-数据库
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯