MySQL学习之连接查询

news2024/11/26 0:38:53

  1. 笛卡尔乘积现象

在表的连接查询方面有一种现象被称为:笛卡尔积现象。

笛卡尔积现象:

当两张表进行连接查询的时候,没有任何条件进行限制,最终的查询结果条数是两张表记录条数的乘积。

select ename,dname from emp,dept;

避免笛卡尔积现象:

连接时加条件,满足条件的记录筛选出来。

思考:避免了笛卡尔积现象,会减少记录的匹配次数吗?

         不会,次数还是56次。只不过显示的是有效记录。

关于表的别名:

        select e.ename,d.dname from emp e,dept d;

        表的别名有什么好处?

                第一:执行效率高。

                第二:可读性好。

mysql> select

->  e.ename,d.dname

-> from

->  emp as e,dept as d

-> where

->  e.deptno = d.deptno;

  1. 内连接:等值连接

SQL99语法结构更清晰一些:

表的连接条件和后来的where条件分离了。

SQL92语法:

mysql> select

    ->          e.ename,d.dname

    -> from

    ->          emp as e,dept as d

    -> where

->          e.deptno = d.deptno;

SQL99语法:

mysql> select

    ->          e.ename,d.dname

    -> from

    ->          emp as e

    -> join

    ->          dept as d

    -> on

    ->          e.deptno = d.deptno;

//inner 可以省略(带着inner可读性更好!!!一眼就能看出来是内连接)

SQL99语法:

Select

........

From

A

Innner jion

B

On

a和b的连接条件

Where

筛选条件

  1. 内连接:非等值连接

最大的特点是:连接条件中的关系是非等量关系

mysql> select

    ->  e.ename,e.sal,s.grade

    -> from

    ->  emp e

    ->(inner) join

    ->  salgrade s

    -> on

->  e.sal between s.losal and hisal;

  1. 内连接:自连接

最大的特点是:一张表看做两张表。自己连接自己。

mysql> select

    ->  a.ename as '员工名',b.mgr as '领导名'

    -> from

    ->  emp a

    -> join

    ->  emp b

    -> on

    -> a.mgr = b.empno;

  1. 外连接

内连接:

假设AB表进行连接,使用内连接的话,凡是A表和B表能够匹配上的记录查询出来,这就是内连接。

AB两张表没有主副之分,两张表是平等的。

外连接:

假设AB表进行连接,使用外连接的话,AB两张表中有一张表是主表,一张表是副表,主要查询主表中

的数据,捎带着查询副表,当副表中的数据没有和主表中的数据匹配上,副表自动模拟出NULL与之匹配。

外连接的分类?

左外连接(左连接):表示左边的这张表是主表。 left  (outer)  join

右外连接(右连接):表示右边的这张表是主表。  right  (outer)  join

Outer 可省略

左连接有右连接的写法,右连接也会有对应的左连接的写法。

mysql> select

    ->          e.ename,d.dname

    -> from

    ->          emp as e

    -> right (outer) join

    ->          dept as d

    -> on

    ->          e.deptno = d.deptno;

mysql> select

    ->          e.ename,d.dname

    -> from

    ->          dept as d   

-> left (outer) join

    ->          emp as e

    -> on

    ->          e.deptno = d.deptno;

连接最重要的特点是:主表的数据无条件的全部查询出来。

  1. 三张表连接/多张表连接

注意,解释一下:

     

一条SQL中内连接和外连接可以混合。都可以出现!

        表示:A表和B表先进行表连接,连接之后A表继续和C表进行连接。

  1. 子查询

where子句中使用子查询

From子句中使用子查询

注意(技巧): from后面的子查询,可以将子查询的查询结果当做一张临时表。

此时有个注意点:平均值avg()是特殊函数,需起别名使用!

在select后面嵌套子查询

mysql> select

    ->   e.ename,(select d.dname from dept d where d.deptno = e.deptno) result

    -> from

->  emp e;

  1. union (可以将查询结果集相加)

mysql> select ename,job from emp where job = 'manager' or job  = 'salesman';

mysql> select ename,job from emp where job in ('manager' ,'salesman');

mysql> select ename,job from emp where job = 'manager'

    -> union

    -> select ename,job from emp where job = 'salesman';

//union的效率更高,union 把乘法变成了加法。

表连接来说,每连接一次新表。则匹配的次数满足笛卡尔积,成倍得翻

但是union可以减少匹配的次数。

在减少匹配次数的情况下,

还可以完成两个结果集的拼接。

a连接 b 连接 C

a  10条记录

B  10条记录

C  10条记录

匹配次数是: 1000

a 连接 b一个结果: 10*10 --> 100次

a 连接 C一个结果: 10 * 10 --> 100次

使用union的话是: 100次 + 100次 =200

union在使用的时候有注意事项吗?

//错误的: union在进行结果集合并的时候,要求两个结果集的列数相同。

select ename ,job from emp where job =’ MANAGER’

union

select ename from emp where job = 'SALESMAN';

// MYSQL可以,oracle语法严格 ,不可以,报错。要求: 结果集合并时列和列的数据类型也需要一致。

select ename ,job from emp where job = ‘MANAGER’

union

select ename ,sal from emp where job = 'SALESMAN';

  1. Limit(重点中的重点,以后分页查询全靠它了。)
  • limit是mysql特有的,其他数据库中没有,不通用。(Oracle中有一个相同的机制,叫做rownum)
  • limit取结果集中的部分数据,这是它的作用。
  • 语法机制:

       limit startIndex, length

               startIndex表示起始位置,从0开始,0表示第一条数据。

               length表示取几个

      

  • limit是sql语句最后执行的一个环节:

        select                     5

                ...

        from                       1

                ...            

        where                    2

                ...    

        group by                3

                ...

        having                    4

                ...

        order by                6

                ...

        limit                        7

                ...;

mysql> select ename from emp order by sal desc limit 0,5;

mysql> select ename from emp order by sal desc limit 5;

  • 分页

每页显示pageSize条记录:

第pageNo页:(pageNo - 1) * pageSize, pageSize

pageSize是什么?是每页显示多少条记录

pageNo是什么?显示第几页

通用的标准分页sql?

每页显示3条记录:

第1页:0, 3

第2页:3, 3

第3页:6, 3

第4页:9, 3

第5页:12, 3

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1559005.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

力扣刷题Days28-第二题-11.盛水最多的容器(js)

目录 1,题目 2,代码 3,学习与总结 3.1思路回顾 1,如何遍历 2,算法流程 3.2剖析问题 1,题目 给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, h…

ES学习日记(四)-------插件head安装和一些配套插件下载

前言 接上节,第三方插件选择了时间久,功能丰富,长得丑的head,head 插件在ES 5版本以前开箱即用非常简单,ES 5版本以后需要运行在node环境下,所以我们要先准备一下环境 一.安装Git yum -y install git 二.安装node 安装包位置node for linux下载 解压…

省级-能源结构数据(电力消费水平)(2000-2022年)

能源结构指能源总生产量或总消费量中各类一次能源、二次能源的构成及其比例关系。它是能源系统工程研究的重要内容,直接影响着国民经济各部门的最终用能方式,并反映了人民的生活水平。能源结构主要由生产结构和消费结构组成。 本数据通过电力消费水平来…

JAVA学习笔记21(访问修饰符)

1.访问修饰符 ​ *基本介绍 ​ java提供四种访问控制修饰符号,用于控制方法和属性(成员变量)的访问权限(范围) 1.公开级别:用public修饰,对外公开 2.受保护级别:用protected修饰,对子类和同一个包中的类公开 3.默…

鸿蒙TypeScript入门学习第5天:【TypeScript 运算符】

1、TypeScript 运算符 运算符用于执行程序代码运算,会针对一个以上操作数项目来进行运算。 考虑以下计算: 7 5 12复制以上实例中 7、5 和 12 是操作数。 运算符 用于加值。 运算符 用于赋值。 TypeScript 主要包含以下几种运算: 算…

docker部署实用的运维开发手册

下载镜像 docker pull registry.cn-beijing.aliyuncs.com/wuxingge123/reference:latestdocker-compose部署 vim docker-compose.yml version: 3 services:reference:container_name: referenceimage: registry.cn-beijing.aliyuncs.com/wuxingge123/reference:latestports:…

【python从入门到精通】-- 第三战:输入输出 运算符

🌈 个人主页:白子寰 🔥 分类专栏:python从入门到精通,魔法指针,进阶C,C语言,C语言题集,C语言实现游戏👈 希望得到您的订阅和支持~ 💡 坚持创作博文…

linux命令之tput

1.tput介绍 linux命令tput是可以在终端中进行文本和颜色的控制和格式化,其是一个非常有用的命令 2.tput用法 命令: man tput 3.样例 3.1.清除屏幕 命令: tput clear [rootelasticsearch ~]# tput clear [rootelasticsearch ~]# 3.2.…

HarmonyOS实战开发-一次开发,多端部署-视频应用

介绍 随着智能设备类型的不断丰富,用户可以在不同的设备上享受同样的服务,但由于设备形态不尽相同,开发者往往需要针对具体设备修改或重构代码,以实现功能完整性和界面美观性的统一。OpenHarmony为开发者提供了“一次开发&#x…

vue watch 深度监听

vue2文档&#xff1a;API — Vue.js vue3文档&#xff1a;侦听器 | Vue.js watch 可以用来监听页面中的数据&#xff0c;但如果监听的源是对象或数组&#xff0c;则使用深度监听&#xff0c;强制深度遍历源&#xff0c;以便在深度变更时触发回调。 一&#xff0c;监听 <t…

RecyclerView 调用 notifyItemInserted 自动滚动到底部的问题

项目中发现一个奇怪的现象 RecyclerView 加载完数据以后&#xff0c;调用 notifyItemInserted 方法&#xff0c;RecyclerView 会滑动到底部。 简化后的效果图&#xff1a; 因为这个 RecyclerView 的适配器有一个 FootViewHolder&#xff0c;所以怀疑是 FootViewHolder 的问题…

选择排序---算法

1、算法概念 首先在未排序列中找到最小(大)元素&#xff0c;存放到排序序列的起始位置&#xff0c;然后&#xff0c;再从剩余未排序元素中继续寻找最小(大)元素&#xff0c;然后放到已排序序列的末尾。以此类推&#xff0c;直到所有元素均排序完毕。 选择排序的思想其实和冒泡排…

LLaMA-Factory参数的解答

打开LLaMA-Factory的web页面会有一堆参数 &#xff0c;但不知道怎么选&#xff0c;选哪个&#xff0c;这个文章详细解读一下&#xff0c;每个参数到底是什么含义这是个人写的参数解读&#xff0c;我并非该领域的人如果那个大佬看到有参数不对请反馈一下&#xff0c;或者有补充的…

【网络安全】常见的网站攻击方式及危害

常见的网站攻击方式多种多样&#xff0c;每一种都有其独特的特点和危害。以下是一些常见的网站攻击方式&#xff1a; 跨站脚本攻击&#xff08;XSS&#xff09;&#xff1a;攻击者通过在目标网站上注入恶意脚本&#xff0c;当用户浏览该网站时&#xff0c;恶意脚本会在用户的浏…

类的函数成员(二):析构函数

一.定义 析构函数(destructor) 与构造函数相反&#xff0c;当对象结束其生命周期&#xff0c;如对象所在的函数已调用完毕时&#xff0c;系统自动执行析构函数。析构函数往往用来做“清理善后” 的工作。 例如&#xff0c;在建立对象时用new开辟了一片内存空间&#xff0c;dele…

单链表就地逆置

算法思想&#xff1a;构建一个带头结点的单链表L&#xff0c;然后访问链表中的每一个数据结点&#xff0c;将访问到的数据结点依此插入到L的头节点之后。 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> typedef int ElemType; typedef s…

Mysql重点思考(上)--mysql的索引优化

mysql的索引优化 expalin关键字的用法explain索引优化示例 type列用法执行查询的顺序类型概述 索引概念索引的定义索引的分类主键&唯一区别 唯一索引的创建和查询创建一个唯一索引查询一个唯一索引 场景题合集唯一索引的场景题主键索引的场景题&#xff08;B树&#xff09;…

蓝桥备赛——矩阵读入

题目描述 如上图所示&#xff0c;是一道有关二维前缀和的问题&#xff0c;因为涉及到二维&#xff0c;肯定就是以矩阵的形式进行读入的。 为此&#xff0c;针对矩阵的读入形式进行总结&#xff0c;可以大致总结出两种类型如下&#xff1a; 二维列表推导式 n, m, k map(int…

HTML教程(详细汇总)

目录 前言&#xff1a; Sublime Text(收费): VS Code(免费): HBuilderX(免费): Dreamweaver(免费): Webstorm(收费): 一.网站的概念&#xff1a; 1.什么是网页&#xff1a; 2.什么是网站&#xff1a; 3.服务器&#xff1a; 总结&#xff1a; 二.HTML简介&#xff…

【JavaEE初阶系列】——CAS

目录 &#x1f388;什么是 CAS &#x1f4dd;CAS 伪代码 &#x1f388;CAS 是怎么实现的 &#x1f388;CAS 有哪些应用 &#x1f6a9;实现原子类 &#x1f308;伪代码实现: &#x1f6a9;实现自旋锁 &#x1f308;自旋锁伪代码 &#x1f388;CAS 的 ABA 问题 &#…