1 .Where子句中使用的连接语句,在数据库语言中,被称为隐性连接。Inner join……on子句产生的连接称为显性连接。(其他Join参数也是显性连接)Where 和Inner join产生的连接关系,没有本质区别,结果也一样。但是!隐性连接随着数据库语言的规范和发展,已经逐渐被淘汰,比较新的数据库语言基本上已经抛弃了隐性连接,全部采用显性连接了。

  2 .无论怎么连接,都可以用Join子句,但是连接同一个表的时候,注意要定义别名,否则产生错误!

  > Inner join:理解为“有效连接”,两张表中都有的数据才会显示left join:理解为“有左显示”,比如on a.field=b.field,则显示a表中存在的全部数据及a\\b中都有的数据,A中有、B没有的数据以null显示。

  > Right join:理解为“有右显示”,比如on a.field=b.field,则显示B表中存在的全部数据及a\\b中都有的数据,B中有、A没有的数据以null显示。

  > Full join:理解为“全连接”,两张表中所有数据都显示,实际就是inner +(left-inner)+(right-inner)。

  3 .Join可以分主次表,外联接有三种类型:完全外联,左联,右联。

  完全外联包含两张表的所有记录。

  左联是以左边的表为主,右边的为辅,右联则相反。

  4.一般要使得数据库查询语句性能好点遵循一下原则:

  在做表与表的连接查询时,大表在前,小表在后。

  不使用表别名,通过字段前缀区分不同表中的字段。

  查询条件中的限制条件要写在表连接条件前。

  尽量使用索引的字段做为查询条件。

  在 SQL-92 标准中,内联接可在 FROM 或 WHERE 子句中指定。这是 WHERE 子句中唯一一种 SQL-92 支持的联接类型。WHERE 子句中指定的内联接称为旧式内联接。

下面的 Transact-SQL 查询是内联接的一个示例:

  USE pubs

  SELECT *

  FROM authors AS a INNER JOIN publishers AS p

  ON a.city = p.city

  ORDER BY a.au_lname DESC

  此内联接称为相等联接。它返回两个表中的所有列,但只返回在联接列中具有相等值的行。

  下面是结果集:

  au_id       au_lname au_fname  phone             address        city

  ----------- -------- -------- ------------     --------------- --------

  238-95-7766 Carson Cheryl     415 548-7723 589    Darwin Ln.    Berkeley

  409-56-7008 Bennet Abraham    415 658-9932 6223   Bateman St.   Berkeley

  state  zip   contract pub_id     pub_name          city    state country

  ----- ----- -------- ------ --------------------- -------- ----- -------

  CA    94705    1      1389   Algodata Infosystems Berkeley  CA    USA

  CA    94705    1      1389   Algodata Infosystems Berkeley  CA    USA

  (2 row(s) affected)

  在结果集中,city 列出现两次。由于重复相同的信息没有意义,因此可以通过更改选择列表消除两个相同列中的一个。其结果称为自然联接。可以重新表述前面的 Transact-SQL 查询以形成自然联接。例如:

  USE pubs

  SELECT p.pub_id, p.pub_name, p.state, a.*

  FROM publishers p INNER JOIN authors a

  ON p.city = a.city

  ORDER BY a.au_lname ASC, a.au_fname ASC

  下面是结果集:

  pub_id   pub_name            state    au_id       au_lname au_fname

  ------ ---------------      -------- -----------  -------- --------

    1389    Algodata Infosystems  CA     409-56-7008   Bennet  Abraham

  1389    Algodata Infosystems  CA      238-95-7766  Carson  Cheryl

  phone               address       city     state  zip  contract

  ---------------    ------------- --------  ----- ----- ---------

  415 658-9932 6223   Bateman St.  Berkeley   CA    94705  1

  415 548-7723 589    Darwin Ln.   Berkeley   CA    94705  1

  (2 row(s) affected)

  本示例中,publishers.city 没有出现在结果中。

使用等号以外的运算符的联接

  也可以联接两个不相等的列中的值。用于内联接的运算符和谓词同样也可用于不相等联接。有关联接中可用的运算符和谓词的更多信息,请参见在表达式中使用运算符和 WHERE。

  下面的 Transact-SQL 示例是一个大于 (>) 联接,可用于查找住在 Massachusetts 之后(按字母顺序排列)的州的 New Moon 作家,Massachusetts 是 New Moon Books 的所在地。

  USE pubs

  SELECT p.pub_name, p.state, a.au_lname, a.au_fname, a.state

  FROM publishers p INNER JOIN authors a

  ON a.state > p.state

  WHERE p.pub_name = 'New Moon Books'

  ORDER BY au_lname ASC, au_fname ASC

  下面是结果集:

  pub_name            state    au_lname              au_fname          state

  ----------------   ------- -------------------- -------------------- -----

  New Moon Books       MA    Blotchet-Halls           Reginald           OR

  New Moon Books       MA    del Castillo             Innes              MI

  New Moon Books       MA    Greene                   Morningstar        TN

  New Moon Books       MA    Panteley                 Sylvia             MD

  New Moon Books       MA    Ringer                   Albert             UT

  New Moon Books       MA    Ringer                   Anne               UT

  (6 row(s) affected)

  使用不等运算符的联接

  很少使用不等联接 (< >)。通常不等联接只有与自联接同时使用才有意义。例如,可以使用下面的不等 Transact-SQL 联接和自联接查找包含不同价格的两本或多本廉价(低于 $15)书的类别:

  USE pubs

  SELECT DISTINCT t1.type, t1.price

  FROM titles t1 INNER JOIN titles t2

  ON t1.type = t2.type

  AND t1.price <> t2.price

  WHERE t1.price < $15 AND t2.price < $15

  说明 表达式 NOT column_name = column_name 与表达式 column_name < > column_name 等效。

下面的 Transact-SQL 示例中,使用不等联接和自联接的组合查找 titleauthor 表中的所有行,在该表中有两行或多行具有相同的 title_id 但 au_id 号不同(即一本书有多个作者):

  USE pubs

  SELECT DISTINCT t1.au_id, t1.title_id

  FROM titleauthor t1 INNER JOIN titleauthor t2

  ON t1.title_id = t2.title_id

  WHERE t1.au_id <> t2.au_id

  ORDER BY t1.au_id

  下面是结果集:

  au_id       title_id

  ----------- --------

  213-46-8915 BU1032

  267-41-2394 BU1111

  267-41-2394 TC7777

  409-56-7008 BU1032

  427-17-2319 PC8888

  472-27-2349 TC7777

  672-71-3249 TC7777

  722-51-5454 MC3021

  724-80-9391 BU1111

  724-80-9391 PS1372

  756-30-7391 PS1372

  846-92-7186 PC8888

  899-46-2035 MC3021

  899-46-2035 PS2091

  998-72-3567 PS2091

Oracle中Inner join和Where的区别的更多相关文章

  1. Oracle中Union与Union All的区别(适用多个数据库)

    Oracle中Union与Union All的区别(适用多个数据库) 如果我们需要将两个select语句的结果作为一个整体显示出来,我们就需要用到union或者union all关键字.union(或 ...

  2. Oracle中执行存储过程call和exec区别

    Oracle中执行存储过程call和exec区别 在sqlplus中这两种方法都可以使用: exec pro_name(参数1..); call pro_name(参数1..); 区别: 1. 但是e ...

  3. Oracle中Blob和Clob类型的区别与操作

    Oracle中Blob和Clob类型 1.Oracle中Blob和Clob类型的区别 BLOB和CLOB都是大字段类型,BLOB是按二进制来存储的,而CLOB是可以直接存储文字的.其实两个是可以互换的 ...

  4. Oracle中rank() over, dense_rank(), row_number() 的区别

    摘自:http://www.linuxidc.com/Linux/2015-04/116349.htm Oracle 中 rank() over, dense_rank(), row_number() ...

  5. Oracle中varchar,varchar2,nvarchar,nvarchar2的区别及其它数据类型描述

    --varchar,varchar2 联系: 1.varchar/varchar2用于存储可变长度的字符串 比如varchar(20),存入字符串'abc',则数据库中该字段只占3个字节,而不是20个 ...

  6. oracle中int类型和number类型区别

    INT类型是NUMBER类型的子类型.下面简要说明:(1)NUMBER(P,S)该数据类型用于定义数字类型的数据,其中P表示数字的总位数(最大字节个数),而S则表示小数点后面的位数.假设定义SAL列为 ...

  7. oracle中left join,right join,inner join的坑

    本文主要是记录一下实际使用oracle中join查询遇到的坑 1.用到两张表,学生表和学年分数表,先建立 2.普通连接查询 INNER JOIN,查询每个学年有成绩的学生以及分数情况 LFET JOI ...

  8. SQL中的Join和Where的区别

    一.sql语句中left join.inner join中的on与where的区别 0.各种join操作的概念和作用 left join :左连接,返回左表中所有的记录以及右表中连接字段相等的记录. ...

  9. Oracle中Null与空字符串' '的区别

    含义解释: 问:什么是NULL? 答:在我们不知道具体有什么数据的时候,也即未知,可以用NULL,我们称它为空,ORACLE中,含有空值的表列长度为零. ORACLE允许任何一种数据类型的字段为空,除 ...

随机推荐

  1. Python 输出百分比的两种方式

    Python 输出百分比的两种方式 注: 在python3环境下测试. 方式1:直接使用参数格式化:{:.2%} {:.2%}: 显示小数点后2位 显示小数点后2位: >>> pri ...

  2. 通用Mapper相关

    1.通用Mapper中,用@Table来映数据表与实体,其中 name:指定表的名称,例如@Table(name="ls_post") catalog: 指定数据库名称,默认为当前 ...

  3. 《深入理解mybatis原理4》 MyBatis缓存机制的设计与实现

    <深入理解mybatis原理> MyBatis缓存机制的设计与实现 本文主要讲解MyBatis非常棒的缓存机制的设计原理,给读者们介绍一下MyBatis的缓存机制的轮廓,然后会分别针对缓存 ...

  4. 搞懂分布式技术21:浅谈分布式消息技术 Kafka

    搞懂分布式技术21:浅谈分布式消息技术 Kafka 浅谈分布式消息技术 Kafka 本文主要介绍了这几部分内容: 1基本介绍和架构概览 2kafka事务传输的特点 3kafka的消息存储格式:topi ...

  5. 解决SecureCRT下spark-shell中scala无法删除问题

    转自:http://blog.csdn.net/huanbia/article/details/51318278 问题描述 当使用SecureCRT来打开Spark-shell的时候,有时会出现如下问 ...

  6. 几款必备LINUX的命令行神器

    Dstat & sar iostat, vmstat, ifstat 三合一的工具,用来查看系统性能(我在<性能调优攻略>中提到过那三个xxstat工具). 官方网站:http:/ ...

  7. 禁用iPhone手机浏览器上给电话号码自动加上的link样式(苹果手机自动给手机号加样式)

    原文地址:http://blog.csdn.net/atec2000/article/details/44631633 iPhone手机上的浏览器(如Safari),在解析网页的时候会自动给 像是电话 ...

  8. 【zzuli-1923】表达式求值

    题目描述 假设表达式定义为:1. 一个十进制的正整数 X 是一个表达式.2. 如果 X 和 Y 是 表达式,则 X+Y, X*Y 也是表达式; *优先级高于+.3. 如果 X 和 Y 是 表达式,则 ...

  9. ES获取磁盘使用率情况

    private void diskUage() { ClusterStateResponse stateResponse = client.admin().cluster().prepareState ...

  10. WIN7不能上网

    http://zhidao.baidu.com/link?url=lYL0Sti_nX3JDz3pA3cVh49nyYDEQBJ6P5fxwB4La0FurHlgmWGMdgfMGjQSWxj17sH ...