- 浏览: 588147 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (231)
- JAVA (64)
- Oracle (50)
- JAVA IDE (10)
- AJax (8)
- Spring (12)
- hibernate (10)
- Struts (9)
- Jquery (7)
- EXT js (9)
- Tomcat (2)
- MySql (13)
- SQLServer 2005 (3)
- java script (10)
- DB2 (6)
- Linux (15)
- solaris (3)
- 开发模式 (16)
- windows (15)
- 硬件 (2)
- PHP (3)
- 框架整合 (17)
- Weblogic (12)
- JBOSS (1)
- 协议 (7)
- 云计算 (6)
- JSF (1)
- richfaces (1)
- python (1)
最新评论
-
woshiicesky:
怎么使用的?
解决jdk1.7 不支持TLS1.2的问题 -
sunzbking:
哇!大佬谢谢分享解决问题啦
解决jdk1.7 不支持TLS1.2的问题 -
doren:
谢谢,很好解决我们的问题
解决jdk1.7 不支持TLS1.2的问题 -
贝塔ZQ:
PageOffice插件,挺好使得,可以试试
POI解析Excel 文件读取,修改,另存等功能 -
程俊2009:
需要用哪些jar,可以说下吗
jdom读写XMl文件
内联:
a inner join b on a.id=b.id
查两张表都有的id记录
左外联:
a left join b on a.id=b.id
只要表a有的id,表a有,b没有的b字段为NULL
右外联:
a right join b on a.id=b.id
只要表b有记录,与左相反
1 关系代数
合并数据集合的理论基础是关系代数,它是由E.F.Codd于1970年提出的。
在关系代数的形式化语言中:
用表、或者数据集合表示关系或者实体。
用行表示元组。
用列表示属性。
关系代数包含以下8个关系运算符
选取――返回满足指定条件的行。
投影――从数据集合中返回指定的列。
笛卡尔积――是关系的乘法,它将分别来自两个数据集合中的行以所有可能的方式进行组合。
并――关系的加法和减法,它可以在行的方向上合并两个表中的数据,就像把一个表垒在另一个表之上一样。
交――返回两个数据集合所共有的行。
差――返回只属于一个数据集合的行。
连接――在水平方向上合并两个表,其方法是:将两个表中在共同数据项上相互匹配的那些行合并起来。
除――返回两个数据集之间的精确匹配。
此外,作为一种实现现代关系代数运算的方法,SQL还提供了:
子查询――类似于连接,但更灵活;在外部查询中,方式可以使用表达式、列表或者数据集合的地方都可以使用子查询的结果。
本章将主要讲述多种类型的连接、简单的和相关的子查询、几种类型的并、关系除以及其他的内容。
2 使用连接
2.1 连接类型
在关系代数中,连接运算是由一个笛卡尔积运算和一个选取运算构成的。首先用笛卡尔积完成对两个数据集合的乘运算,然后对生成的结果集合进行选取运算,确保只把分别来自两个数据集合并且具有重叠部分的行合并在一起。连接的全部意义在于在水平方向上合并两个数据集合(通常是表),并产生一个新的结果集合,其方法是将一个数据源中的行于另一个数据源中和它匹配的行组合成一个新元组。
SQL提供了多种类型的连接方式,它们之间的区别在于:从相互交叠的不同数据集合中选择用于连接的行时所采用的方法不同。
连接类型 定义
内连接 只连接匹配的行
左外连接 包含左边表的全部行(不管右边的表中是否存在与它们匹配的行),以及右边表中全部匹配的行
右外连接 包含右边表的全部行(不管左边的表中是否存在与它们匹配的行),以及左边表中全部匹配的行
全外连接 包含左、右两个表的全部行,不管另外一边的表中是否存在与它们匹配的行。
(H)(theta)连接 使用等值以外的条件来匹配左、右两个表中的行
交叉连接 生成笛卡尔积-它不使用任何匹配或者选取条件,而是直接将一个数据源中的每个行与另一个数据源的每个行都一一匹配
在INFORMIX中连接表的查询
如果FROM子句指定了多于一个表引用,则查询会连接来自多个表的行。连接条件指定各列之间(每个表至少一列)进行连接的关系。因为正在比较连接条件中的列,所以它们必须具有一致的数据类型。
SELECT语句的FROM子句可以指定以下几种类型的连接
FROM子句关键字 相应的结果集
CROSS JOIN 笛卡尔乘积(所有可能的行对)
INNER JOIN 仅对满足连接条件的CROSS中的列
LEFT OUTER JOIN 一个表满足条件的行,和另一个表的所有行
RIGHT OUTER JOIN 与LEFT相同,但两个表的角色互换
FULL OUTER JOIN LEFT OUTER 和 RIGHT OUTER中所有行的超集
2.2 内连接(Inner Join)
内连接是最常见的一种连接,它页被称为普通连接,而E.FCodd最早称之为自然连接。
下面是ANSI SQL-92标准
select *
from t_institution i
inner join t_teller t
on i.inst_no = t.inst_no
where i.inst_no = "5801"
其中inner可以省略。
等价于早期的连接语法
select *
from t_institution i, t_teller t
where i.inst_no = t.inst_no
and i.inst_no = "5801"
2.3 外连接
2.3.1 左外连接(Left Outer Jion)
select *
from t_institution i
left outer join t_teller t
on i.inst_no = t.inst_no
其中outer可以省略。
2.3.2 右外连接(Rigt Outer Jion)
select *
from t_institution i
right outer join t_teller t
on i.inst_no = t.inst_no
2.3.3 全外连接(Full Outer)
全外连接返回参与连接的两个数据集合中的全部数据,无论它们是否具有与之相匹配的行。在功能上,它等价于对这两个数据集合分别进行左外连接和右外连接,然后再使用消去重复行的并操作将上述两个结果集合并为一个结果集。
在现实生活中,参照完整性约束可以减少对于全外连接的使用,一般情况下左外连接就足够了。在数据库中没有利用清晰、规范的约束来防范错误数据情况下,全外连接就变得非常有用了,你可以使用它来清理数据库中的数据。
select *
from t_institution i
full outer join t_teller t
on i.inst_no = t.inst_no
2.3.4 外连接与条件配合使用
当在内连接查询中加入条件是,无论是将它加入到join子句,还是加入到where子句,其效果是完全一样的,但对于外连接情况就不同了。当把条件加入到 join子句时,SQL Server、Informix会返回外连接表的全部行,然后使用指定的条件返回第二个表的行。如果将条件放到where子句中,SQL Server将会首先进行连接操作,然后使用where子句对连接后的行进行筛选。下面的两个查询展示了条件放置位子对执行结果的影响:
条件在join子句
select *
from t_institution i
left outer join t_teller t
on i.inst_no = t.inst_no
and i.inst_no = “5801”
结果是:
inst_no inst_name inst_no teller_no teller_name
5801 天河区 5801 0001 tom
5801 天河区 5801 0002 david
5802 越秀区
5803 白云区
条件在where子句
select *
from t_institution i
left outer join t_teller t
on i.inst_no = t.inst_no
where i.inst_no = “5801”
结果是:
inst_no inst_name inst_no teller_no teller_name
5801 天河区 5801 0001 tom
5801 天河区 5801 0002 david
2.4 自身连接
自身连接是指同一个表自己与自己进行连接。这种一元连接通常用于从自反关系(也称作递归关系)中抽取数据。例如人力资源数据库中雇员与老板的关系。
下面例子是在机构表中查找本机构和上级机构的信息。
select s.inst_no superior_inst, s.inst_name sup_inst_name, i.inst_no, i.inst_name
from t_institution i
join t_institution s
on i.superior_inst = s.inst_no
结果是:
superior_inst sup_inst_name inst_no inst_name
800 广州市 5801 天河区
800 广州市 5802 越秀区
800 广州市 5803 白云区
2.5 交叉(无限制) 连接
交叉连接用于对两个源表进行纯关系代数的乘运算。它不使用连接条件来限制结果集合,而是将分别来自两个数据源中的行以所有可能的方式进行组合。数据集合中一的每个行都要与数据集合二中的每一个行分别组成一个新的行。例如,如果第一个数据源中有5个行,而第二个数据源中有4个行,那么在它们之间进行交叉连接就会产生20个行。人们将这种类型的结果集称为笛卡尔乘积。
大多数交叉连接都是由于错误操作而造成的;但是它们却非常适合向数据库中填充例子数据,或者预先创建一些空行以便为程序执行期间所要填充的数据保留空间。
select *
from t_institution i
cross join t_teller t
在交叉连接中没有on条件子句
发表评论
-
oracle vatchar2 转换成clob方法
2017-06-08 17:38 1282create table cssc_result1 as ... -
oracle 回滚某个表的数据到指定时间点
2017-05-04 16:45 1903alter table 表名 enable row move ... -
oracle 监控常用sql
2017-04-19 10:08 679select * from V$process; SE ... -
ORACLE查询表修改时间
2016-10-11 09:20 16541、select uat.table_name from u ... -
oracle恢复误删除drop掉的表
2016-09-25 09:28 1304--查看回收站中表 select object_nam ... -
Oracle 快速创建全局dblink
2016-09-08 10:26 989-- 如果创建全局 dblink,必须使用 systm 或 ... -
Oracle substr 截取nvarchar2 问题
2016-04-20 10:50 997-- 查询业务类型 -- 数据内容为:2, ... -
Oracle 11g ORA-12514 解决办法
2016-03-12 14:58 35651. 找到listener.ora监听文件,具体位置: ... -
oracle em 启动问题
2015-06-01 16:34 1053一、em 常用命令 emca -repos create ... -
ORACLE查询树型关系
2014-02-19 17:05 709oracle中的select语句可以用START WITH ... -
Oracle 修改用户密码180天限制的问题
2013-09-16 15:22 887Oracle11g中,为了让客户在半年时间内更改数据库用户密 ... -
oracle 导出sequences
2013-06-29 17:27 1098如下脚本,可以将某个用户的全部sequence查询出来,并拼 ... -
oracle11g更改字符集AL32UTF8为ZHS16GBK
2013-06-24 12:00 1685Database character set (AL32UT ... -
常用的一些rman备份恢复命令
2013-02-20 13:17 1476Oracle的官方文档中有rman命令的比较完整的说明,我们 ... -
Oracle 查询所有表id大于10000的数据表名和数据
2013-01-29 13:41 2577-- 查询所有表id大于10000的数据以及对应表名称 ... -
Oracle系统表查询
2012-12-20 14:03 1025oracle查询用户下的所有表 select ... -
Oracle Weblogic 10.X、11.X、12.X各个版本对应的系统、JDK、数据库版本
2012-12-19 09:47 10063压缩包中包含Oracle weblogic 10. ... -
关于数据库性能优化方面的一些总结之三
2012-06-14 09:58 1192(21) 避免在索引列上使用NOT 通常, 我们要避免在索引列 ... -
关于数据库性能优化方面的一些总结之二
2012-06-13 16:43 1148(11) 用Where子句替换HAVING子句:避免使用HAV ... -
关于数据库性能优化方面的一些总结之一
2012-06-13 16:39 1164(1) 选择最有效率的表名顺序(只在基于规则的优化器 ...
相关推荐
在电子商务系统中,SQL语句的内联外联可以用来连接多个表,例如订单表、客户表、产品表等,以便进行订单管理和客户管理。 四、SQL语句的内联外联经典面试题 4.1 什么是SQL语句的内联外联? 答案:SQL语句的内联...
数据库的外联和内联知识是关系数据库管理系统中的一种基本操作,它们用于从多个表中提取相关数据,生成新的结果集合。在关系代数中,连接运算是由一个笛卡尔积运算和一个选取运算构成的。首先用笛卡尔积完成对两个...
本文主要讨论了数据库中的连接类型,包括内联(Inner Join)、外联(Outer Join)以及它们的变体,如左外联(Left Outer Join)、右外联(Right Outer Join)和全外联(Full Outer Join)。这些概念对于理解和优化...
数据库外联内联.pdf 本文档主要讲述数据库外联内联的相关知识点,涵盖自联、...本文档总结了数据库外联内联的相关知识点,涵盖自联、关系代数、连接类型、子查询等内容,为读者提供了系统的了解数据库外联内联的方法。
y由于编程需要各种不同功能的数据库连接,这里整理了常用的数据库内联,外联,交叉连接等代码,直接复制就可以
右外连接正好与左外连接相反,它会在两个表中查找所有B表中的记录,以及A表中符合条件的记录。如果A表中没有符合条件的记录,则返回null值。 #### 实例说明 如果我们想要查看所有在表B中出现过的卡号及其得分,并...
内联函数有两种形式:**内联版本**和**外联版本**。 1. **内联版本**:当内联功能被启用,并且函数体简单到足以被内联时,编译器会在函数调用位置直接展开函数体。 2. **外联版本**:当内联功能被禁用或者函数体...
数据库面试题目(基础) 数据库面试题目是数据库开发人员面试时经常被问到的问题,...本文对数据库面试题目进行了分类解释,涵盖了存储过程、内联和外联、触发器等重要知识点,为数据库开发人员提供了有价值的参考。
在数据库查询中,连接操作是将两个或多个表格的数据结合在一起的关键方法,使得我们可以从不同表格中获取相关信息。本文将详细解析五种不同的连接类型:内连接、左外连接、右外连接、全连接和交叉连接。 1. 内连接...
本教程主要介绍了如何在SQL中进行多表联接,包括表的别名、内联接、外联接和自联接等关键知识点。 首先,使用表的别名可以简化SQL语句,提高可读性。别名的设定有两种方式:一是直接在表名后跟AS,如`SELECT * FROM...
在SQL(结构化查询语言)中,外联查询是数据库操作中的重要概念,它用于从多个表中检索数据,特别是当这些数据分布在不同的表中时。外联查询分为三种主要类型:左外联(LEFT JOIN)、右外联(RIGHT JOIN)和全外联...
9. **多表关联与JOIN操作**:通过实例学习如何处理多表关联查询,包括内联JOIN、外联JOIN以及自联JOIN。 10. **数据库设计原则**:在某些案例中,可能涉及数据库模式设计,如ER模型转换为关系模式,以及索引优化等...
- 右联接(外联接):`SELECT * FROM 表1 RIGHT JOIN 表2 ON 表1.连接列 = 表2.连接列` 以上只是SQL Server 2000数据库管理的一些基础操作,实际应用中还有更多复杂的查询、事务处理、备份恢复、安全性设置等内容...
在IT行业中,外联接(Outer Join)是数据库查询中的一种关键操作,它允许我们从一个或多个表中检索数据,即使某些记录在另一个表中没有匹配。这与内联接(Inner Join)不同,内联接只返回两个表中都有匹配记录的结果...
外联接(如左联接、右联接)涉及两个表,返回所有匹配和非匹配的记录。 11. **删除操作**:删除数据库使用 `DROP DATABASE` 命令,删除表使用 `DROP TABLE`,删除视图使用 `DROP VIEW`。 12. **主键**:主键是表中...
内联接是指保证两个表中所有的行都要满足连接条件的连接,外联接则不然,它可以显示出不满条件的列。 本文档总结了数据库管理系统的基本概念和技术,涵盖了数据抽象、SQL 语言、视图、完整性约束、第三范式、ER ...
### MySQL多表联接查询...通过内联接、左外联接等不同的联接方式,我们可以灵活地从多个表中提取所需的数据,这对于日常的数据库管理与数据分析工作非常重要。希望本文能够帮助读者更好地掌握多表联接查询的技术要点。
内联接是指连接两个表时,两个表的所有行都要满足连接条件,例如,Select * From Table1 Inner Join Table2 On Table1.col = Table2.col。外联接是指连接两个表时,只限制其中一个表的行,例如,Select * From Table...
SQL Server 多表联接查询 SQL Server 是一个功能...左(右)外联接可以从两个表中返回符合联接条件的记录,同时也将返回左(右)边不符合联接条件的记录。使用外联接可以从多个表中检索数据,以满足复杂的业务需求。