现有两张表

tablea 和 tableb

   

各种连接

1、笛尔卡积

SELECT * FROM TabA a,TabB b where a.id = b.id /*笛尔卡积乘积*/

返回的结果为两表中所有满足a.id=b.id的记录。b表中id 为1的有两条记录,a表中有一条,返回的结果中可以看出,a表中又自动补齐了一条id为1的记录。

一般的笛尔卡积SELECT * FROM TabA a,TabB 返回的数据为15条。a表中有m条记录,b表中有n条记录,则一般的笛尔卡积返回的数据为m*n条记录。记录之间的组合是随意的。

2、inner join

select * FROM TabA a INNER JOIN TabB b ON a.id=b.id /*inner join*/

inner join的返回结果和笛尔卡积是相同的。

SELECT * FROM TabA a,TabB b where a.id = b.id /*笛尔卡积乘积*/

select * FROM TabA a INNER JOIN TabB b ON a.id=b.id /*inner join*/

区别:执行方式  第一条语句将表a和表b的记录组合起来,然后考察满足条件的,并返回记录。

第二条语句是参照表a中的记录,一条一条到表b中去找符合记录的,符合则连在一起,否则转到a中下一条

inner join 是笛尔卡积的特殊形式。一般情况下,我们选用inner join,内连接的效率要高于笛卡尔积的效率。

3、left join

select * FROM TabA a LEFT JOIN TabB b ON a.id=b.id /*left join*/

返回的为a表中所有的记录,即使在b表中没有匹配到。

4、right join

SELECT * FROM TabA a RIGHT JOIN TabB b ON a.id=b.id /*right join*/

返回的为b表中所有的记录,即使在a表中没有匹配到满足条件的记录。

5、full join

在mysql中,不支持full join操作。我们使用

select * from TabA a left join TabB b on a.id = b.id
union
select *
from TabA a right join TabB b on a.id = b.id /*返回左右表所有的行 相当于full join mysql不支持full join*/

full join:等于left join和right join的并集

6、从两张表中查询出id字段相同,name字段不同的所有记录

SELECT * FROM TabA a WHERE a.id in(SELECT id FROM TabB)
UNION
SELECT * FROM TabB b WHERE b.id in(SELECT id FROM TabA) ORDER BY id /*UNION 去重 UNINSTALL 不去重*/

SELECT * FROM TabA a WHERE EXISTS (SELECT id FROM TabB b WHERE a.id=b.id)
UNION ALL
SELECT * FROM TabB b WHERE EXISTS (SELECT id FROM TabA a WHERE a.id=b.id)

后面的语句性能比第一要好点。

sql——sql中的各种连接的更多相关文章

  1. SQL Server中多表连接时驱动顺序对性能的影响

    本文出处:http://www.cnblogs.com/wy123/p/7106861.html (保留出处并非什么原创作品权利,本人拙作还远远达不到,仅仅是为了链接到原文,因为后续对可能存在的一些错 ...

  2. sql语句中的join连接(左连接、右连接、全连接、内连接)

    内部连接(inner join): select * from d_user a inner join D_ORGANIZATION b on a.COMPANY_XID=b.ID  内部链接也是排他 ...

  3. 清晰讲解SQL语句中的外连接,通用于Mysql和Oracle,全是干货哦

    直入主题: 我们做一个操作,将员工SCOTT的部门去掉,再次通过内连接查看数据,看看会产生什么现象? 使用内连接,查询数据 问题:找不到SCOTT员工了,只有13条数据,这显然不合理:这就是内连接的缺 ...

  4. 清晰讲解SQL语句中的内连接,通用于Mysql和Oracle,全是干货哦

    本文章目的:力求清晰明了讲解SQL语句的内连接的各种应用,没有深奥的理解! 前奏:这篇文章和下篇文章会将内连接和外连接讲解清楚SQL语句的多表查询常用的有以下几种:两表联合查询(1)内连接(2)外连接 ...

  5. 回想sql语句中的各种连接

    1. 内连接(Inner Join) 内连接是最常见的一种连接,它页被称为普通连接,而E.FCodd最早称之为自然连接. 以下是ANSI SQL-92标准 select * from    t_ins ...

  6. sql server中的左连接与右连接的简便写法

    左连接 *=(左表中的数据全部显示出来,右表中没有相关联的数据显示null) select Users.*,Department.name as DepartmentName from Users,D ...

  7. SQL语句中不同的连接JOIN

    为了从两个表中获取数据,我们有时会用JOIN将两个表连接起来.通常有以下几种连接方式: JOIN  or  INNER JOIN(内连接) : 这两个是相同的,要求两边表同时有对应的数据,返回行,任何 ...

  8. SQL Server中的完全连接(full join)

    一.建库和建表 create database scort use scort create table emp ( empno int primary key, ename ), sal int, ...

  9. 在Oracle SQL Developer中创建新连接

    步骤: 1.如下图 2.点击“测试”,如果左下角的状态出现“成功”,说明OK

  10. SQL中的内连接与外连接

    关于关系代数连接运算的介绍请查看下面链接 http://www.cnblogs.com/xidongyu/articles/5980407.html 连接运算格式 链接运算由两部分构成:连接类型和连接 ...

随机推荐

  1. servlet和jsp页面过滤器Filter的作用及配置

    刚刚有个朋友问我,Servlet的过滤器有什么作用? 现在发个帖子说明一下,            过滤器是一个对象,可以传输请求或修改响应.它可以在请求到达Servlet/JSP之前对其进行预处理, ...

  2. 类与接口(五)java多态、方法重写、隐藏

    一.Java多态性 面向对象的三大特性:封装.继承.多态. 多态的类型,分为以下两种: 编译时多态: 指的是 方法重载.编译时多态是在编译时确定调用处选择那个重载方法,所以也叫 静态多态,算不上真正的 ...

  3. [WPF 基础知识系列] —— 绑定中的数据校验Vaildation

    前言: 只要是有表单存在,那么就有可能有对数据的校验需求.如:判断是否为整数.判断电子邮件格式等等. WPF采用一种全新的方式 - Binding,来实现前台显示与后台数据进行交互,当然数据校验方式也 ...

  4. VirtualBox安装Mac OS 10.11——虚拟机安装黑苹果

    由于需要安装mac环境跑IOS应用,所以在虚拟机装个黑苹果. 一.下载虚拟机安装包,VirtualBox是官网下的最新版:  5.0.6 for Windows hosts x86/amd64  官网 ...

  5. 在 Azure 中的 Windows 虚拟机上使用 SSL 证书保护 IIS Web 服务器

    若要保护 Web 服务器,可以使用安全套接字层 (SSL) 证书来加密 Web 流量. 这些 SSL 证书可存储在 Azure Key Vault 中,并可安全部署到 Azure 中的 Windows ...

  6. PHP支付宝支付开发流程

    支付宝开发流程   1.首先我们先谈谈第三方支付 所谓第三方支付就是和一些各大银行签约,并具备一定实力和信誉保障的第三方独立机构提供的交易平台 目前市面上常见的有支付宝,财付通,网银,易宝支付等,网站 ...

  7. ndroid动态创建按钮并添加事件

    public class MyActivity extends Activity { /** * Called when the activity is first created. */ @Over ...

  8. nginx 添加虚拟主机 支持php 伪静态

    1添加虚拟主机 进入 /usr/local/nginx/conf/vhost 目录, 创建虚拟主机配置文件 demo.neoease.com.conf ({域名}.conf). 2. 打开配置文件, ...

  9. c++ ActiveX基础1:使用VS2010创建MFC ActiveX工程项目

    1.ActiveX的基本概念 ActiveX控件可以看作是一个极小的服务器应用程序,它不能独立运行,必须嵌入到某个容器程序中,与该容器一起运行.这个容器包括WEB网页,应用程序窗体等... Activ ...

  10. k8s mongodb 集群配置

    service.yaml apiVersion: v1 kind: Service metadata: name: mongo labels: name: mongo spec: ports: - p ...