首页 > 数据库 >MySQL数据库:8、多表查询的方法与思路

MySQL数据库:8、多表查询的方法与思路

时间:2022-11-28 16:44:39浏览次数:46  
标签:多表 表格 笛卡尔 dep 数据库 查询 emp MySQL id

目录

一、多表查询思路

​ 指需要处理多张具有关系的表数据时,可以通过多表查询方法来加快数据的处理和查询时间

数据准备

创建部门表:

create table dep(
  id int primary key auto_increment,
  name varchar(20) 
);

创建员工信息表:

create table emp(
  id int primary key auto_increment,
  name varchar(20),
  sex enum('male','female') not null default 'male',
  age int,
  dep_id int
);

插入数据:

insert into dep values
(200,'技术'),
(201,'人力资源'),
(202,'销售'),
(203,'运营'),
(205,'财务');

insert into emp(name,sex,age,dep_id) values
('jason','male',18,200),
('dragon','female',48,201),
('kevin','male',18,201),
('nick','male',28,202),
('owen','male',18,203),
('jerry','female',18,204);

1、笛卡尔积

  • 介绍:
    • 笛卡尔积是一种多表查询的方法名称,通过笛卡尔其可以对两张有对应关系的表格进行拼接(通过select 方法一次性读出两张表)
  • 缺点:
    • select 方法一次性读出了两张表,但是表的数据发生了错乱,字段发生了冲突,这种查询方式非常浪费资源,此种查询方式称为‘笛卡尔积’

1、1.代码实践

select * from emp,dep;

1、2.笛卡尔积进阶操作

  • 介绍
    • 通过对笛卡尔其将两张关系表进行连接时,可通过设置条件的方式来使数据进行匹配,通过此种方式可以节省笛卡尔积浪费的空间
  • 缺点:
    • 此种方式可以解决笛卡尔积浪费资源的问题,但是这种方法针对大数据的处理非常耗费时间
select * from emp,dep where emp.dep_id=dep.id;

2、连表操作

连表操作可以将两张有对应关系的表格进行拼接,为程序员在处理数据时提供了方便快捷的方法

通过学习了连表操作就可以连接N多张表

思路:将拼接之后的表格通过起别名的方式再去与另一张表格进行拼接,往复此操作就可以连接多张表格

2、1.内连接

  • 关键词:inner jion

  • 功能:可以拼接两张有对应关系表格的共有部分

SELECT * FROM emp INNER JOIN dep ON emp.dep_id=dep.id;

2、2.左连接

  • 关键词:left jion

  • 功能:可以拼接两张有对应关系的表格,关键词左边的表格为主表,若主从表中没有主表中对应的数据,则主表中该部分数据对应字段名下结果以Null填充

SELECT * FROM emp LEFT JOIN dep ON emp.dep_id=dep.id;

image

2、3.右连接

  • 关键词:right jion

  • 功能:可以拼接两张有对应关系的表格,关键词右边的表格为主表,若主从表中没有主表中对应的数据,则主表中该部分数据对应字段名下结果以Null填充

SELECT * FROM emp RIGHT JOIN dep ON emp.dep_id=dep.id;

2、4.全连接

  • 关键词:union

  • 功能:以左右表为基准 展示所有的数据 各自没有的全部NULL填充

select * from emp LEFT JOIN dep ON emp.dep_id=dep.id
UNION
SELECT * FROM emp RIGHT JOIN dep ON emp.dep_id=dep.id;

3、子查询

子查询的思路是将一条SQL语句用括号括起来当成另一条SQL语句的查询条件

很多时候表查询需要结合实际情况判断需要用那种,更多的时候其实是连表操作结合子操作进行使用

3、1.子查询代码实践

  • 题目:求姓名jason的员工的部门名称
子查询类似于生活中解决问题的方式>>>:分布操作
推导流程
	步骤1:先根据jason获取部门的编号
		SELECT id FROM emp WHERE name='jason';
	步骤2:在根据获取到部门编号去获取部门名称
		SELECT name FROM dep WHERE id IN (SELECT dep_id FROM emp WHERE name='jason');

标签:多表,表格,笛卡尔,dep,数据库,查询,emp,MySQL,id
From: https://www.cnblogs.com/kangssssh/p/16932589.html

相关文章

  • 什么数据库这么猛?5.6版本刚开源一个半月,8.0版本竟然就要启动了?| StoneDB社区答疑第二
    好吧,或许你觉得这是在标题党,但就是这么猛,你没想到吧,小编我也没想到。这是真的,8.0iscoming~先说一下标题,StoneDBforMySQL在6月底开源出来的,确实是5.6版本,但在开源的同时,......
  • MySQL多表查询及pymysql简单使用
    目录多表查询的两种方法小知识点补充说明可视化软件Navicat多表查询练习题python操作MySQLpymysql补充说明多表查询的两种方法方式一:连表操作innerjoin内连接 selec......
  • 关于页面输入框的字段限长问题,查询数据库字符集
    关于页面输入框的字段限长如果开发文档或者接口文档没有明确给出字段的限制长度,我们在写页面的时候需要自己去数据库查看字段长度以Oracle数据库为例如果Oracle的字符集......
  • 基于图数据库的复杂网络分析能力
    基于图数据库的复杂网络分析能力概览​​一、社交网络与图数据库技术​​​​二、搜索排名与图数据库技术​​​​三、评分系统与图数据库技术​​​​四、自然语言处理与图......
  • 图数据库ONgDB Release v-1.0.2
    图数据库ONgDBReleasev-1.0.2​​图数据库ONgDBReleasev-1.0.2​​​​一、升级内容​​​​二、其它补充​​Here’sthetableofcontents:图数据库ONgDBReleasev......
  • 世界领先的图数据库Neo4j AuraDB Free
    世界领先的图数据库Neo4jAuraDBFree​​世界领先的图数据库Neo4jAuraDBFree​​​​一、Neo4jAuraDBFree现已在亚太地区发行​​​​二、快速使用Neo4jAuraDBFree​......
  • DTCC | 2021中国图数据库技术大会链接分享
    DTCC|2021中国图数据库技术大会链接分享​​DTCC|2021中国图数据库技术大会链接分享​​​​一、新一代分布式架构​​​​二、数据流通与数据交易​​​​三、业务模型......
  • 人工智能与图数据库技术
    图数据库技术在人工智能应用中的核心能力决策类算法提供上下文支持增强算法学习效率提高算法准确性通过AI得到的结论更加具有可解释性完整翻译​​原文地址​​以下文章为N......
  • SpringSecurity多表验证
    在开始之前我想感叹一句,技术久了不回头看看真的会忘记的,这次公司让我重新开发一个程序,项目架构为单体多模块开发,其中有个需求就是需要不同用户表进行登录,且不同表的用户名......
  • day43MySQL基础(5)
    多表查询的两种方式方式1:连表操作innerjoin内连接 select*fromempinnerjoindeponemp.dep_id=dep.id;只连接两张表中公有的数据部分leftjoin......