一文完整MySQL连接查询,笛卡尔乘积,内连接外连接交叉连接

文章目录

    • 笛卡尔乘积
    • 连接查询分类
    • 等值连接
    • 非等值连接
    • 自连接
    • 外连接
    • 交叉连接


连接查询又称为多表查询,当查询的字段来自于多个表时,使用连接查询。


笛卡尔乘积

笛卡尔乘积现象:表1有m行,表2有n行,结果有m*n行

发生原因:没有有效的连接条件

避免:添加有效的连接条件

SELECT `name`,`boyName`
FROM `beauty`,`boys`
WHERE `beauty`.`boyfriend_id`=`boys`.`id`;

在这里插入图片描述


连接查询分类

按年代分:92标准(①),99标准(①②中的左右③)

按照功能分类:

①内连接:等值连接,非等值连接,自连接

②外连接:左外连接,右外连接,全外连接

③交叉连接

MySQL支持内连接,外连接(左外和右外),交叉连接


等值连接

1、92标准

①多表等值连接的结果为多表的交集部分
②n表连接,至少需要n-1个连接条件
③多表的顺序没有要求
①一般需要为表起别名
⑤可以搭配前面介绍的所有子句

SELECT1中字段,2中字段
FROM1,2 (表顺序可以换)
WHERE1.依据的字段=2.依据的字段; (连接条件)
SELECT `name`,`boyName`
FROM `beauty`,`boys`
WHERE `beauty`.`boyfriend_id`=`boys`.`id`;

字段有歧义时,可以用表.限制,如果表面太长,可以给表起别名,而起别名后就不能用原表名了,需要使用别名。

SELECT `name`,`boyName`
FROM `beauty` AS a,`boys` As o
WHERE a.`boyfriend_id`=o.`id`;

可以添加筛选条件。

SELECT `last_name`,`department_name`,`commission_pct`
FROM `departments` AS d,`employees` AS e
WHERE d.`department_id`=e.`department_id`
AND `commission_pct` IS NOT NULL;

组合分组查询。

#查询每个城市有多少个部门
SELECT COUNT(*) AS 个数,`city`
FROM `departments` AS d,`locations` AS l
WHERE d.`location_id`=l.`location_id`
GROUP BY `city`;

2、99标准

SELECT `last_name`,`department_name`
FROM `employees` AS e
INNER JOIN `departments` AS d           #inner为内连接类型标识
ON e.`department_id`=d.`department_id`; #连接条件
#多表
SELECT `last_name`,`department_name`,`city`
FROM `employees` AS e
INNER JOIN `departments` AS d ON e.`department_id`=d.`department_id`
INNER JOIN `locations` AS l ON d.`location_id`=l.`location_id`
ORDER BY `department_name` DESC;

①可以添加排序、分组、筛选等子句
②inner可以省略
③筛选条件放在where后面, 连接条件放在on后面,提高分离性,便于阅读
④inner join连接和sq192语法中的等值连接效果是一样的,都是查询多表的交集


非等值连接

区别于等值连接在于连接条件不是=

1、92标准

SELECT salary,grade_level
FROM employees AS e,job_grades AS g
WHERE salary BETWEEN g.lowest_sal AND g.highest_sal;

也可以组合前面讲到的子句。

2、99标准

SELECT `salary`,`grade_level`
FROM `employees` AS e
INNER JOIN `job_grades` AS j
ON `salary` BETWEEN `lowest_sal` AND `highest_sal`;

也可以组合前面讲到的子句。


自连接

相当于是一张表里面的等值连接,即一张表里面的某两个字段相等。

1、92标准

SELECT e.`employee_id`,e.`last_name`,m.`employee_id`,m.`last_name`
FROM `employees` AS e,`employees` AS m
WHERE e.`manager_id`=m.`employee_id`

2、99标准

SELECT e.`last_name` AS 员工,m.`last_name` AS 领导
FROM `employees` AS e
INNER JOIN `employees` AS m
ON e.`manager_id`=m.`employee_id`;

同样可以组合其他子句。


外连接

应用场景:用于查询一个表中有,另一个表没有的记录

特点:
①外连接的查询结果为主表中的所有记录
②如果从表中有和它匹配的,则显示匹配的值
③如果从表中没有和它匹配的,则显示null
④外连接查询结果=内连接结果+主表中有而从表没有的记录

左外连接,left join左边的是主表
右外连接,right join右边的是主表
左外和右外交换两个表的顺序,可以实现同样的效果

#左外连接
SELECT be.`name`,bo.`boyName`
FROM `beauty` AS be
LEFT JOIN `boys` AS bo
ON be.`boyfriend_id`=bo.`id`;
#右外连接
SELECT be.`name`,bo.`boyName`
FROM `boys` AS bo
RIGHT JOIN `beauty` AS be
ON be.`boyfriend_id`=bo.`id`;

MySQL不支持全外连接
全外连接=内连接的结果+表1中有但表2没有的+表2中有但表1没有的


交叉连接

SELECT be.`name`,bo.`boyName`
FROM `boys` AS bo
CROSS JOIN `beauty` AS be;

相当于就是99标准的笛卡尔乘积

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

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

相关文章

android 自定义表单,Android实现Ant Design 自定义表单组件

Ant Design 组件提供了Input,InputNumber,Radio,Select,uplod等表单组件,但实际开发中这是不能满足需求,同时我们希望可以继续使用Form提供的验证和提示等方法(使用起来确实很爽),这时需要自己动…

逆向行驶!数据结构双向链表DoubleLinkedList,Java实现增删改查

文章目录节点类链表类测试类双向链表也叫双链表,是链表的一种,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱。所以,从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点。 节点类…

【PostmanJMeter】使用Postman和JMeter进行signature签名

一、前言 ​ 有些接口的请求会带上sign(签名)进行请求,各接口对sign的签名内容、方式可能不一样,但一般都是从接口的入参中选择部分内容组成一个字符串,然后再进行签名操作, 将结果赋值给sign; 完整规范的接口文档都会…

詹金斯搭建_詹金斯的Maven报告

詹金斯搭建代码质量是一个敏感的话题。 它会影响您的维护成本以及客户满意度。 更不用说您的开发人员使用代码的动力了。 谁想要修复难看的代码,对吗? 讨论代码质量总是需要事实和数字! 因此,这是一个简短的教程,介绍…

android tcp判断服务器是否断开,Android tcp客户端连接,然后从java服务器断开连接...

我在我的电脑上执行java服务器并让我的android设备连接到它。我可以连接它,但一旦连接就会断开连接。我确信在android方面我需要做一些事情,但我很少迷失它。我有互联网许可,所以很好。Android tcp客户端连接,然后从java服务器断开…

Oracle应用容器云的自由

在这篇博客文章中,我将介绍如何部署CloudEE封装在杜克大学应用自由尤伯杯罐子Oracle应用集装箱云端 。 在Oracle Application Container Cloud中进行部署所需的部署工件是一个ZIP归档文件,其中包含应用程序ber-jar和清单文件(manifest.json&…

android已经点击,【已解决】android中点击其他的(如Button等)但是EditText却没有失去焦点...

【问题】android的app中,在对于EditText已经实现了:OnFocusChangeListener mFocusChangedListener;EditText variableValueView (EditText) variableLayout.findViewById(R.id.variableValue);EditText variableValueView (EditText) variableLayout.f…

简洁明了!Java实现单向环形链表以解决约瑟夫环Josepfu问题

文章目录简单介绍代码实现简单介绍 如果把单链表的最后一个节点的指针指向链表头部,而不是指向NULL,那么就构成了一个单向循环链表,通俗讲就是让尾节点指向头结点。 单向环形链表应用场景:Josephu(约瑟夫、约瑟夫环)问题&#xf…

荣耀v10Android9新功能,荣耀10、荣耀V10开启安卓9.0内测 日常领跑行业

【PConline 资讯】今天(8月9日)早上10点,荣耀总裁赵明发微博宣布荣耀已经有四款机型面向少部分用户推送安卓9.0内部测试版本。实际上,在8月8日晚上,花粉论坛就已经公布华为4款机型内测安卓 9.0 版本,荣耀手机两款旗舰进入升级名单…

状态模式 设计模式_设计模式:状态

状态模式 设计模式本文将介绍状态设计模式 。 它是行为设计模式之一 。 您无需了解许多理论即可了解模式的主要概念。 该文章将分为几个部分,在其中我将提供有关需要应用该模式的情况,它所具有的利弊以及用法示例的信息。 有时,当对象的内部…

字符串得结果!Java数组模拟栈以实现中缀表达式综合计算器,字符串表达式计算器

文章目录数组模拟栈类中缀表达式计算器类(测试类)数组模拟栈类 主要实现栈的一些基本功能,以及在该场景下的功能。 //先创建一个栈 class AStack {private int maxSize; //栈的大小private int[] stack; //数组模拟栈private int top -1; …

android webview javascript不执行,WebView中的JavaScript为什么不执行?

浏览器未开启javascript使用的js代码有问题,webview不兼容该代码。1) 第一个坎:WebSettingsWebSettings webSettings mWebView.getSettings();webSettings.setJavaScriptEnabled(true);2) 第二个坎: 有物在运行脚本前,要有docume…

中缀转后缀表达式,带括号的后缀表达式综合计算器,Java栈数据结构实现

文章目录中缀表达式转后缀表达式思路逆波兰表达式计算思路代码实现中缀表达式转后缀表达式思路 1、初始化两个栈:运算符栈s1和储存中间结果的栈s2 2、从左至右扫描中缀表达式 3、遇到操作数时,将其压入s2 4、遇到运算符时,比较其与s1栈顶…

Java中的AES加密和解密(CBC模式)

通过有线方式传输诸如纯文本密码之类的机密数据总是容易受到安全性的影响,始终建议对此类信息进行加密并使用SSL传输这些机密数据.Java为此提供了多种加密算法。在本文中,我们将讨论Java中具有CBC模式的AES(高级加密标准)对称加密…

hiti打印机android驱动,HiTi 打印机 驱动程序下载——更新 HiTi 软件

HiTi 打印机驱动程序下载如何手动下载和更新:你可以通过 %%os%% 或通过执行 Windows 更新获取基本的 HiTi Printer 驱动程序。 内置驱动程序将支持Printer的基本功能,但通常不支持更高级的功能。以下是手动更新这些 HiTi 设备驱动程序的完整指南。程序员: HiTi 类别…

Java实现最小二乘法线性拟合,传感与检测,单臂半桥全桥实验,江南大学自动化

因为作为资源上传不方便我们获取且我想免费分享给有需要的小伙伴,以后所有实验报告都通过文章形式记录输出了,仅供参考,欢迎交流。(最小二乘法代码在文末) 电桥特性曲线: Java实现最小二乘法线性拟合及计算…

android task详解,Android AsyncTask的使用详解

当然,我们在进行耗时操作或者更新UI时,是可以使用匿名线程的,但是此种方式是存在缺陷的:第一,线程的开销较大,如果每个任务都要创建一个线程,那么应用 程序的效率要低很多;第二&…

【Error】IDEA报错:org.jetbrains.jps.builders.java.dependencyView.TypeRepr$PrimitiveType cannot be cast t

错误日志: org.jetbrains.jps.builders.java.dependencyView.TypeRepr$PrimitiveType cannot be cast to org.jetbrains.jps.builders.java.dependencyView.TypeRepr$ClassType 解决方法:

ReSQL的?

大约在2009年创造出来的NoSQL名字标志着从“传统”关系模型的转变。 在2009年之前,有相当多的非关系数据库,但是在最近几年中,我们看到了许多新产品(例如, 我在上一篇文章中可以看到“ NoSQL格局” )。 一般…

数据结构,Java实现递归回溯,寻找出迷宫路线,解决迷宫问题

/*** Author: Yeman* Date: 2021-10-28-22:52* Description:*/ public class Labyrinth {public static void main(String[] args) {//七行八列的迷宫地图int[][] map new int[8][7];//设置墙for (int i 0; i < 7; i) {map[0][i] 1;map[7][i] 1;}for (int i 0; i < …