- 浏览: 971760 次
- 性别:
- 来自: 山西
文章分类
最新评论
-
白小默:
你好 可以提供下源码DEMO吗,不知为何,我导出来的excel ...
jxls 使用模板文件导出生成excel -
zkzqzzz:
博主威武!
让微信二维码扫描您的APK -
zkzqzzz:
感谢博主 原来那些类都不是必须的 或者自己写!!博主真棒 ...
抢红包插件实现原理浅析 -
zkzqzzz:
博主 请问你的其他类在哪里呢?
抢红包插件实现原理浅析 -
zkzqzzz:
其他类在哪呢?
抢红包插件实现原理浅析
连接可以在SELECT 语句的FROM子句或WHERE子句中建立,似是而非在FROM子句中指出连接时有助于将连接操作与WHERE子句中的搜索条件区分开来。所以,在Transact-SQL中推荐使用这种方法。
SQL-92标准所定义的FROM子句的连接语法格式为:
FROM join_table join_type join_table
[ON (join_condition)]
其中join_table指出参与连接操作的表名,连接可以对同一个表操作,也可以对多表操作,对同一个表操作的连接又称做自连接。行表间某(些)列数据的比较操作,并列出这些表中与连接条件相匹配的数据行。根据所使用的比较方式不同,内连接又分为等值连接、自然连接和不等连接三种。
外连接分为左外连接(LEFT OUTER JOIN或LEFT JOIN)、右外连接(RIGHT OUTER JOIN或RIGHT JOIN)和全外连接(FULL OUTER JOIN或FULL JOIN)三种。与内连接不同的是,外连接不只列出与连接条件相匹配的行,而是列出左表(左外连接时)、右表(右外连接时)或两个表(全外连接时)中所有符合搜索条件的数据行。
交叉连接(CROSS JOIN)没有WHERE 子句,它返回连接表中所有数据行的笛卡尔积,其结果集合中的数据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数。
连接操作中的ON (join_condition) 子句指出连接条件,它由被连接表中的列和比较运算符、逻辑运算符等构成。
无论哪种连接都不能对text、ntext和image数据类型列进行直接连接,但可以对这三种列进行间接连接。例如:
SELECT p1.pub_id,p2.pub_id,p1.pr_info
FROM pub_info AS p1 INNER JOIN pub_info AS p2
ON DATALENGTH(p1.pr_info)=DATALENGTH(p2.pr_info)
(一)内连接
内连接查询操作列出与连接条件匹配的数据行,它使用比较运算符比较被连接列的列值。内连接分三种:
1、等值连接:在连接条件中使用等于号(=)运算符比较被连接列的列值,其查询结果中列出被连接表中的所有列,包括其中的重复列。
2、不等连接: 在连接条件使用除等于运算符以外的其它比较运算符比较被连接的列的列值。这些运算符包括>、>=、<=、<、!>、!<和<>。
3、自然连接:在连接条件中使用等于(=)运算符比较被连接列的列值,但它使用选择列表指出查询结果集合中所包括的列,并删除连接表中的重复列。
例,下面使用等值连接列出authors和publishers表中位于同一城市的作者和出版社:
SELECT *
FROM authors AS a INNER JOIN publishers AS p
ON a.city=p.city
又如使用自然连接,在选择列表中删除authors 和publishers 表中重复列(city和state):
SELECT a.*,p.pub_id,p.pub_name,p.country
FROM authors AS a INNER JOIN publishers AS p
ON a.city=p.city
(二)外连接
内连接时,返回查询结果集合中的仅是符合查询条件( WHERE 搜索条件或 HAVING 条件)和连接条件的行。而采用外连接时,它返回到查询结果集合中的不仅包含符合连接条件的行,而且还包括左表(左外连接时)、右表(右外连接时)或两个边接表(全外连接)中的所有数据行。
如下面使用左外连接将论坛内容和作者信息连接起来:
SELECT a.*,b.* FROM luntan LEFT JOIN usertable as b
ON a.username=b.username
下面使用全外连接将city表中的所有作者以及user表中的所有作者,以及他们所在的城市:
SELECT a.*,b.*
FROM city as a FULL OUTER JOIN user as b
ON a.username=b.username
(三)交叉连接
交叉连接不带WHERE 子句,它返回被连接的两个表所有数据行的笛卡尔积,返回到结果集合中的数据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数。
例,titles表中有6类图书,而publishers表中有8家出版社,则下列交叉连接检索到的记录数将等于6*8=48行。
SELECT type,pub_name
FROM titles CROSS JOIN publishers
ORDER BY type
介绍了表连接,更确切的说是inner joins內连接.
內连接仅选出两张表中互相匹配的记录.因此,这会导致有时我们需要的记录没有包含进来。
为更好的理解这个概念,我们介绍两个表作演示。苏格兰议会中的政党表(party)和议员表(msp)。
party(Code,Name,Leader)
Code: 政党代码
Name: 政党名称
Leader: 政党领袖
msp(Name,Party,Constituency)
Name: 议员名
Party: 议员所在政党代码
Constituency: 选区
在介绍左连接、右连接和全连接前,有一个数据库中重要的概念要介绍一下,即空值(NULL)。
有时表中,更确切的说是某些字段值,可能会出现空值, 这是因为这个数据不知道是什么值或根本就不存在。
空值不等同于字符串中的空格,也不是数字类型的0。因此,判断某个字段值是否为空值时不能使用=,<>这些
判断符。必需有专用的短语:IS NULL 来选出有空值字段的记录,同理,可用 IS NOT NULL 选出不包含空值的记录。
例如:下面的语句选出了没有领导者的政党。(不要奇怪,苏格兰议会中确实存在这样的政党)
SELECT code, name FROM party
WHERE leader IS NULL
又如:一个议员被开除出党,看看他是谁。(即该议员的政党为空值)
SELECT name FROM msp
WHERE party IS NULL
好了,让我们言归正传,看看什么叫左连接、右连接和全连接。
A left join(左连接)包含所有的左边表中的记录甚至是右边表中没有和它匹配的记录。
同理,也存在着相同道理的 right join(右连接),即包含所有的右边表中的记录甚至是左边表中没有和它匹配的记录。
而full join(全连接)顾名思义,左右表中所有记录都会选出来。
讲到这里,有人可能要问,到底什么叫:包含所有的左边表中的记录甚至是右边表中没有和它匹配的记录。
Ok,我们来看一个实例:
SELECT msp.name, party.name
FROM msp JOIN party ON party=code
这个是我们上一节所学的Join(注意:也叫inner join),这个语句的本意是列出所有议员的名字和他所属政党。
你可以在 http://sqlzoo.cn/4.htm 亲自执行一下该语句,看看结果是什么。
很遗憾,我们发现该查询的结果少了两个议员:Canavan MSP, Dennis。为什么,因为这两个议员不属于任
和政党,即他们的政党字段(Party)为空值。那么为什么不属于任何政党就查不出来了?这是因为空值在
作怪。因为议员表中政党字段(Party)的空值在政党表中找不到对应的记录作匹配,即
FROM msp JOIN party ON party=code 没有把该记录连接起来,而是过滤出去了。
在该短语中,msp在Join的左边,所有称为左表。party在Join的右边,所有称为右表。
Ok,现在再看看这句话,“包含所有的左边表中的记录甚至是右边表中没有和它匹配的记录”,
意思应该很明白了吧。执行下面这个语句,那两个没有政党的议员就漏不了了。
SELECT msp.name, party.name
FROM msp LEFT JOIN party ON party=code
关于右连接,看看这个查询就明白了:
SELECT msp.name, party.name
FROM msp RIGHT JOIN party ON msp.party=party.code
这个查询的结果列出所有的议员和政党,包含没有议员的政党,但不包含没有政党的议员。
那么既要包含没有议员的政党,又要包含没有政党的议员该怎么办呢,对了,全连接(full join)。
SELECT msp.name, party.name
FROM msp FULL JOIN party ON msp.party=party.code
pcxx_shno,pcph_no,pcxx_syr,pcph_type,pcph_state,pcxx_qssj,pcxx_zzsj,pcxx_ztbz,yh_name
FROM pc_pcph pp left JOIN pc_pcxx pp2 ON pp.pcph_lsno=pp2.pcph_lsno
left join yh_yhxx yy on pp2.pcxx_syr=yy.yh_code
发表评论
-
oracle 12c与其他版本的几点区别
2019-02-14 10:23 912oracle 12c与其他版本的几点区别 ... -
JDBC连接ORACLE 12C PDB数据库
2019-01-28 17:37 776JDBC连接ORACLE 12C PDB数据库 ... -
JDBC连接ORACLE数据库的几种方式
2019-01-28 16:17 895格式一: Oracle JDBC Thin using a ... -
Oracle JDBC连接服务名、SID和tnsnames.ora配置的多种方式
2019-01-28 10:35 548昨天,领导安排去新服务器上部署项目,给了我数据库地址,服 ... -
【Oracle RAC】JDBC连接oracle RAC数据库配置
2018-10-10 15:09 459问题描述 生产上线系统,未能及时识别到Oracle数据库 ... -
jdbc连接Oracle使用SID与SERVICE NAME的方法 集群连接配置
2018-09-12 16:47 1690有三种连接串的写法 1.使用SERVICE NAME连接 ... -
dbca创建数据库不同模板之间的区别
2017-09-28 10:36 391这篇文章讨论通过dbca创建数据库,默认模板之间的区别 ... -
Oracle启动监听报错:The listener supports no services解决
2017-09-25 18:03 969$ lsnrctl start 报错提示: The li ... -
linux使用VNC服务轻松远程安装oracle
2017-09-20 23:04 606转:https://www.2cto.com/databa ... -
linux操作系统下oracle数据库如何配置监听
2017-09-20 16:31 5491. 修改监听器配置文件Linux下Oracle监听器配置文件 ... -
oracle database link使用说明
2017-08-17 18:05 442作用:将多个oracle数据 ... -
oracle删除DBF文件
2017-03-28 16:24 550曾经以为把所有的表清空drop掉后其文件已经删除 ... -
oracle进行分组后,取出每组的前几条数据
2016-03-24 21:48 553SELECT * FROM ( ... -
Linux Oracle服务启动&停止脚本与开机自启动
2014-09-23 15:01 544在CentOS 6.3下安装完Oracl ... -
oracle 查询按月份分组
2014-09-11 11:44 565如下表table1: 日期(export ... -
oracle:进行分组并取每组中的前n条记录
2014-08-26 08:53 794关键字: oracle 分组 前n条记录 ... -
批量将PowerDesigner中表字段由小写变成大写
2012-05-07 09:16 1275因项目需要将项目数据库由sqlserver转为oracle, ... -
Oracle的varchar2(4000)插入汉字过长
2012-04-23 11:18 926Oracle的varchar2(4000)插入汉字过长 . ... -
Oracle时间日期操作
2012-01-06 16:41 676sysdate+(5/24/60/60) 在系统时间基础上延迟 ... -
oracle查询:取出每组中的第一条记录
2011-12-27 12:51 925按type字段分组,code排序,取出每组中的第一条记录 ...
相关推荐
本文将详细介绍六种主要类型的 JOIN:左连接(LEFT JOIN)、右连接(RIGHT JOIN)、全连接(FULL JOIN)、内连接(INNER JOIN)、交叉连接(CROSS JOIN)以及自连接(SELF JOIN)。通过实例讲解每种连接的特点和应用...
右连接、左连接、全连接、内连接、交叉连接、自连接
根据连接的方式不同,可以分为左连接(LEFT JOIN)、右连接(RIGHT JOIN)、内连接(INNER JOIN)、全连接(FULL JOIN)、交叉连接(CROSS JOIN)以及自连接(SELF JOIN)。每种连接类型都有其特定的应用场景和使用...
当使用`ON 1 = 1`作为连接条件时,交叉连接会返回两个表的所有可能组合,即每个左表的记录都会与右表的每条记录进行组合。例如: ```sql SELECT O.orderid, O.userid, U.userID, U.sname FROM t_order AS O CROSS ...
具体来说,它会从位于两个互相交叉的数据集合中找到重叠部分内的数据行,并将其连接起来。 **语法**: ```sql SELECT column_name(s) FROM table1 INNER JOIN table2 ON table1.column_name = table2.column_name; ...
交叉连接、内连接、外连接查询.sql
本文将详细解释五种主要的连接类型:外连接(外连接)、内连接(内连接)、左连接(LEFT JOIN)、右连接(RIGHT JOIN)、全连接(FULL JOIN)以及交叉连接(CROSS JOIN)。 1. **内连接(INNER JOIN)**: 内连接...
MySQL连接查询(多表连接查询:内连接,外连接,交叉连接详解) 6:多表连接查询 笛卡尔乘积:如果连接条件省略或无效则会出现 解决办法:添加上连接条件 连接查询的分类: 1.按年代分类: 1)sql 92标准:仅仅...
根据连接的方式和结果,SQL连接可以分为内连接、左连接、右连接、全连接和交叉连接等多种类型。 内连接 内连接是最基本的连接类型,它将两个表格中的数据根据某个条件连接起来。内连接可以分为等值连接、不等值...
交叉连接也称为笛卡尔积,它返回左表的每一行与右表的每一行的组合。如果两个表分别有n和m行,结果将有n*m行。 ```sql SELECT a.*, b.* FROM table_a CROSS JOIN table_b; ``` 在实际应用中,选择合适的连接...
本篇文章将深入探讨数据库连接查询,包括内连接、外连接和交叉连接等,同时结合实例来帮助理解。 首先,了解数据库的基础架构。Oracle数据库由Oracle数据库(数据文件、控制文件、重做日志文件等)和Oracle实例...
主要分为内连接、外连接和交叉连接,每种连接都有其特定的应用场景和逻辑。 内连接(INNER JOIN)是最常见的连接类型,它返回两个表中列相等的行。在内连接中,查询条件通常基于两个表之间的共同列,只有当这些列的...
交叉连接返回两个表的笛卡尔积,即每个左表的记录与右表的每个记录组合。如果没有WHERE子句,结果将是左表的行数乘以右表的行数。这通常会产生大量的记录,除非有明确的筛选条件。 6. **自连接**: 自连接是将同...
交叉连接返回所有可能的行组合,通常称为笛卡尔积。这在实际应用中并不常用,但在某些特定场景下可能会有用处。 - **交叉连接示例**: ```sql SELECT t.*, s.* FROM teacher t CROSS JOIN student s; ``` 通过...
交叉连接和内连接;表A; SELECT的查询对象由FROM子句指定,各个表用逗号分隔,这样就指定了交叉连接。 其格式为: FROM 表名1 [ [AS] 别名1 ] [ , 表名2[ [AS] 别名2]] … ; 【例】 members表和sell表进行交叉连???。...
交叉线连接开发板和主机 在嵌入式系统开发中,交叉线连接开发板和主机是一个非常重要的步骤。今天,我们将详细介绍如何使用交叉线连接开发板和主机,以便启动 NFS 根文件系统。 首先,让我们了解一下交叉线连接的...
SQL的几种连接:内连接、左联接、右连接、全连接、交叉连接
外连接 1.left join 示例:SQL语句:select * from student left join course on student.ID=course.ID 左外连接包含left join左表所有行,如果左表中某行在右表没有匹配,则结果中对应行右表的部分全部为...
连接类型主要有内连接、外连接和交叉连接,这些方法在数据分析、报表生成和数据整合等场景中发挥着关键作用。 首先,我们来详细讨论内连接(INNER JOIN)。内连接是最常用的连接类型,它返回两个表中满足特定连接...
此外,还有交叉连接(CROSS JOIN),也称为笛卡尔积,它会返回左表的每一行与右表的每一行的组合,结果集的大小是两个输入表行数的乘积。 在SQL代码示例中,使用临时表`@TA`和`@TB`展示了不同类型的连接。内连接的...