IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> 【MySQL】多表连接查询 -> 正文阅读

[大数据]【MySQL】多表连接查询

在数据量庞大的数据库中,为了发挥数据库的作用,便开发了多种数据库操作语言来查询数据,其中多表连接查询就是常用的一个模块。

多表连接查询,顾名思义,就是将多张表的信息数据进行归纳查询,从而得到我们想要的的数据。

接下来我们便来学习常用的查询方式吧。

笛卡尔集:

笛卡尔集就是在查询数据时简单的将表关联在一起,数据以m*n的形式组合,类似于矩阵相乘,造成了大量重复的无逻辑的数据,丧失了最初筛选数据的初衷。

造成笛卡尔集的原因:

* 产生条件:
??????? 1. 省略连接条件
??????? 2. 连接条件无效
??????? 3. 所有表中所有行互相连接
?? ?* 解决方案:
?? ??? ?添加有效筛选条件

内连接:

??? * SQL92语法:
?? ???

  SELECT 查询列表
        FROM 表名1 别名1 ,表名2 别名2
        WHERE 连接条件                 
        AND 筛选条件                
        GROUP BY 分组列表            
        HAVING 分组后筛选条件          
        ORDER BY 排序列表    


?? ?* SQL99语法:
?? ???

  select 字段列表
        from 表名1
        [inner] join 表名2 on 条件
        where 筛选条件
        group by 分组条件
        having 分组后的筛选条件
        order by 排序字段


* 注意:
?? ?1. 使用表名前缀在多个表中区分相同的列
?? ?2. 在不同表中具有相同列名的列可以用表的别名加以区分
?? ?3. 如果使用了表别名,则在select语句中需要使用表别名代替表名
?? ?4. 表别名最多支持32个字符长度,但建议越少越好

外连接(常用):

?左外连接

    * 语法:
        select 字段列表
        from 表1
        left [outer] join 表2 on 条件
        ...


?? ?* 注意:
?? ??? ?左外连接查询的是左表所有数据以及其交集部分,表1为查询主表
-------------------------------------------------------------------------
5. 右外连接
?? ?* 语法:
?? ?

    select 字段列表
        from 表1
        right [outer] join 表2 on 条件
        ...


?? ?* 注意:
?? ??? ?右外连接查询的是右表所有数据以及其交集部分,表2为查询主表

子查询:查询中嵌套查询,称嵌套查询为子查询

简单来说就是将复杂的查询要求拆分实现,括号内为拆分的查询结果或者内容。

?特点:
?? ?1、子查询都放在小括号内
??? 2、子查询可以放在from后面、select后面、where后面、having后面,但一般放在条件的右侧
??? 3、子查询优先于主查询执行,主查询使用了子查询的执行结果
??? 4、子查询根据查询结果的行数不同分为以下两类:
??????? ① 单行子查询
??????????? 结果集只有一行

??????????? 一般搭配单行操作符使用:> < = <> >= <=
??????????? 非法使用子查询的情况:
????????????? ? a、子查询的结果为一组值
??????????????? b、子查询的结果为空
????? ??? ?② 多行子查询
??????????? 结果集有多行
??????????? 一般搭配多行操作符使用:any、all、in、not in
??????????? in: 属于子查询结果中的任意一个就行
??????????? any和all往往可以用其他查询代替

???

分页查询:顾名思义,就是将查询结果的显示做出页数上的调整。

* 语法:
?

   select 字段|表达式,...
    from 表
    where 条件
    group by 分组字段
    having 条件
    order by 排序的字段
    limit 起始的条目索引,条目数;
* 示例:每页显示3条记录
        * SELECT * FROM student LIMIT 0,3; -- 第1页
        
        * SELECT * FROM student LIMIT 3,3; -- 第2页
        
        * SELECT * FROM student LIMIT 6,3; -- 第3页


* 特点:
?? ?1.起始条目索引从0开始

?? ?2.limit子句放在查询语句的最后

?? ?3.公式:select * from? 表 limit (page-1)*sizePerPage,sizePerPage
?? ?假如:
?? ??? ?每页显示条目数sizePerPage
?? ??? ?要显示的页数 page

联合查询:

* 语法:

    select 字段|常量|表达式|函数 from 表 where 条件 union 【all】
    select 字段|常量|表达式|函数 from 表 where 条件 union 【all】
    select 字段|常量|表达式|函数 from 表 where 条件 union 【all】
    .....
    select 字段|常量|表达式|函数 from 表 where 条件


* 特点:
?? ?1、多条查询语句的查询的列数必须是一致的
?? ?2、多条查询语句的查询的列的类型几乎相同
?? ?3、union代表去重,union all代表不去重

一点小思考:如何不使用max函数查询数据,以最高工资为例:

方法一:利用排序和分页查询:

SELECT employee_id,salary
FROM employees
ORDER BY salary DESC
LIMIT 1;

方法二:子查询

SELECT
	employee_id,salary 
FROM
	employees e 
WHERE
	e.salary NOT IN (
	SELECT DISTINCT
		a.salary 
	FROM
		employees a
	JOIN employees b ON a.salary < b.salary 
	)

? ??? ?
?? ????

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-06-29 19:08:56  更:2022-06-29 19:11:14 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 13:42:13-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码