简要描述内部连接和外部连接之间的区别_sqlserver的几种常见连接方法

感谢本文几种描述方法,让我解决了最近的一段时间的疑问,转载下来,以供后面查血使用。

本文链接:https://blog.csdn.net/huanghanqian/article/details/52847835

四种join的区别已老生常谈:

INNER JOIN(也可简写为JOIN): 如果表中有至少一个匹配,则返回行

LEFT JOIN: 即使右表中没有匹配,也从左表返回所有的行

RIGHT JOIN: 即使左表中没有匹配,也从右表返回所有的行

FULL JOIN: 只要其中一个表中存在匹配,就返回行

那么问题来了,还有一种常见的写法是将表用逗号隔开,那这个又是怎么连接的呢。

先看这两张表。

c11aa4c8ac38f856ffac37bd3b2418a6.png

使用逗号隔开的方法来连接表:

SELECT *

FROM employee,department

WHERE employee.DepartmentID = department.DepartmentID

输出结果:

a37cf7505c204954dcd61a28db755e62.png

可以很明显发现:这不就是inner join嘛!

没错,答案正是这样:sql用逗号连接多张表对应的是 inner join。

为了严谨性,我到处找sql的官方文档来证实这一点。然而搜不出来sql的文档(谁知道网址请务必发我),最后还是在维基百科上找到了可以当作论据的话。

SQL 定义了两种不同语法方式去表示"连接"。首先是"显式连接符号",它显式地使用关键字

JOIN

,其次是"隐式连接符号",它使用所谓的"隐式连接符号"。隐式连接符号把需要连接的表放到

SELECT

语句的

FROM

部分,并用逗号隔开。这样就构成了一个"交叉连接",

WHERE

语句可能放置一些过滤谓词(过滤条件)。那些过滤谓词在功能上等价于显式连接符号. SQL 89标准只支持内部连接与交叉连接,因此只有隐式连接这种表达方式;SQL 92标准增加了对外部连接的支持,这才有了

JOIN

表达式。

也就是说,

SELECT *

FROM employee

INNER JOIN department

ON employee.DepartmentID = department.DepartmentID

等价于:

SELECT *

FROM employee,department

WHERE employee.DepartmentID = department.DepartmentID

至于哪个效率高一点,其实两者是一回事,没有区别。只是内连接是由SQL 1999规则定的书写方式而已。

另外,在写sql语句测试4种join的时候,发现mysql对于full join返回的结果和inner join一模一样。经查阅资料,才发现原来mysql不支持full join啊。

见:How to do a FULL OUTER JOIN in MySQL?

————————————————

版权声明:本文为CSDN博主「huanghanqian」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/huanghanqian/article/details/52847835

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

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

相关文章

有两个python怎么停用其中一_python3.X 复学(2)-----开始了就不要停止

生命就是一种旅行,开始了就不要停止,无非就是眼前的苟且还有以后的苟且,只要还有一口气 ----------hashlinux 因为Python是跨平台的,它可以运行在Windows、Mac和各种Linux/Unix系统上。在Windows上写Python程序,放到Li…

react项目中的参数解构_一天入门React学习心得

一天入门React学习心得阅读前必读本文写的仓促,算是一个学习笔记吧,算是一个入门级的学习文章。如果你刚刚入门,那么可能一些入门的视频可能更加适合你。但如果具备一些知识,比如Vue,那么视频就不适合了。建议看完本篇…

python random函数_详细代码实战讲解:如何用 Python让自己变成天选之子

今天为大家带来的内容是:详细代码讲解:如何用 Python让自己变成天选之子话不多说直接上代码:请大家猜一猜下面这段代码的运行效果:你是不是以为这段代码运行以后,结果如下图所示?但实际上,我可以…

安卓图标_干货 | 安卓界面系统规范

众所周知,安卓系统是开源的,国内又有超多的手机厂商,小米、魅族、华为、oppo、三星等,每一个品牌有属于自己的UI设计规范,但是我们主要分析UI界面尺寸规范。1、字体安卓系统中文采用的是思源黑体,英文字体为…

pyqt安装_Win10下安装LabelImg以及使用(绝对是全网最简单的教程)

labelImg是图片标注软件,用于数据集的制作、标注等等。下面介绍labelImg的安装过程。我用的是anaconda,所以以anaconda prompt作为终端:在Anaconda Prompt中依次运行以下命令(注意大小写):pip install PyQt…

delphi listview 添加数据 慢_ListView 的缓存机制

一.前言ListView 作为一个 Android 5.x 之前的一个用于显示数据列表的控件,或许在今天都已经被 RecyclerView 完全替代,但是其中的缓存机制仍然值得我们去了解,对后面学习 RecyclerView 的缓存机制有很大的帮助。下面将根据 ListView 的三个过…

c++ 显示三维散点图_【无机纳米材料科研制图——OriginLab 0210】Origin多组柱状图3D柱状图及3D散点图...

此篇,我们来分享Origin绘制多组柱状图、立体柱状图和三维散点图。一、多组柱状图1)准备数据。准备数据,并点击Plot——》Column/Bar/Pie——》Column进行绘制。结果如下。2)带有误差棒的绘图。如果想绘制带有误差棒的直方图&#…

保存文件_wps文件保存在哪里

我们经常使用WPS进行文本、表格的编辑,有时候顺手点击保存之后,文件就会根据默认文件路径保存,如果您不知道默认的文件保存路径,怎么才能够找到刚刚保存的文件,下面就为大家介绍一下wps文件保存在哪里,希望…

linux 内核io操作,关于Linux内核中的异步IO的使用

我们都知道异步IO的作用,就是可以提高我们程序的并发能力,尤其在网络模型中。在linux中有aio的一系列异步IO的函数接口,但是这类函数都是glibc库中的函数,是基于多线程实现,不是真正的异步IO,在内核中有真正…

linux内核模块实验,linux内核模块实验(2学时).doc

第一个内核模块实验一: 预习要求:( 1 ) 做本实验之前,请复习相关内核模块知识。( 2 ) 请了解内核模块的编写、编译及安装与卸载方法。( 3 ) 请学习内核打印函数 printk() 的用法。( 4 ) 请复习 Makefile 文件的编写。二:实验目的&…

mobi格式电子书_进阶能力 | 了解常见的电子书格式

静读君是初中开始接触电子书的,那个时候以为电子书就是TXT,到后来渐渐地接触到了PDF、DOC、CAJ 才知道原来电子书还分这么多的格式,那个时候还在想,为什么要弄这么多不同的格式呢?那不是自找麻烦吗?接触的…

python的pass在函数中的作用_Pass Share:Python / Julia 中函数变量的传递机制

从 C / MATLAB 过来的同学注意!Julia / Python 中使用的参数传递变量方式是不一样的。(以C的眼光看)在语法上细微的差别就会产生完全不一样的内容。(至少我被坑了很多次)。这篇文章的主要作用是逃坑以及方便各种从不同语言过来的人投奔我们Julia!/狗头变…

linux启动keepalived服务,llinux企业常用服务---HA+keepalived双机热备

部署前准备:iptables和selinux没配置,关掉挂载系统镜像作为本地yum源,修改yum文件源码包准备keepalived-1.2.13.tar.gz环境介绍:2台centos6.5虚拟机,主服务器ip:192.168.100.150;从服务器ip&…

python 日志不会按照日期分割_python 按照日期切分大日志文件(重点)和按照指定大小切分日志文件...

#! /usr/bin/env python # -*- coding:utf8 -*- # 切分nginx 按照日期切分日志文件 from __future__ import division import os,sys big_file‘/data/logs/media.net.error.log‘ # 按照文件大小拆分 def split_by_filesize(fromfile,todir,chunksize0): """ c…

c++ udp通信_Web 通信协议,你还需要知道:SPDY 和 QUIC

一、开拓者:SPDY1. 简介:spdy 是由google推行的,改进版本的HTTP1.1 (那时候还没有HTTP2)。它基于TCP协议,在HTTP的基础上,结合HTTP1.X的多个痛点进行改进和升级的产物。它的出现使web的加载速度有极大的提高。HTTP2也借…

linux退出windows域,删除Windows AD域控制器的三种方法

一、域控可以正常工作1、删除辅助域控:单击“开始”,单击“运行”,然后键入以下命令:dcpromo /forceremoval然后按提示操作。2、删除主域控:1)打开Active Directory 用户和计算机 ->Domain Controllers,右键点击所要…

查看 rabbitmq 启动websocket 提示404_RabbitMQ 部署记录

erlang与rabbitmq版本对应关系:https://www.rabbitmq.com/which-erlang.html安装erlang下载地址:http://www.erlang.org/downloads11.安装依赖 2yum install -y gcc gcc-c ncurses ncurses-base ncurses-devel ncurses-libs ncurses-static ncurses-term…

react如何卸载组件_reactjs – 如何删除/卸载嵌套的反应组件

是的,你建议的解决方案render: function () {var home this.state.remove_home ? null : return ({home}),handleNavbarClick: function () {this.setState({remove_home: true});}或多或少是使用React处理此问题的“正确”方法.请记住,渲染的目的是描述组件在任何给定点上的…

linux远程windows执行cmd,Linux服务器远程连接window服务器并执行cmd命令

前段时间,要给一个分布式调度系统写一个运维脚本,这个分布式调度系统部分子系统部署在window服务器上,这个时候就要想办法用Linux远程来连接window服务器,并执行cmd命令。下面是我的解决方法:1、在Linux服务器上的处理…

python函数式编程读取数据时出现错误_Python编程中,函数遇到问题是抛出错误好还是约定返回值好?...

这其实是一个编码规范的问题,没有任何场景都适用的解决方案,就好比有了 list,但是还是需要 tuple,所以对于抛出异常好,还是返回值好,是需要具体情况看的。 在 C 语言中,通用的做法是函数返回一个…