SQL语言查询基础:连接查询 联合查询 代码

SQL语言查询基础:连接查询 
通过连接运算符可以实现多个表查询。连接是关系数据库模型的主要特点,也是它区别于其它类型数据库管理系统的一个标志。 
在关系数据库管理系统中,表建立时各数据之间的关系不必确定,常把一个实体的所有信息存放在一个表中。当检索数据时,通过连接操作查询出存放在多个表中的不同实体的信息。连接操作给用户带来很大的灵活性,他们可以在任何时候增加新的数据类型。为不同实体创建新的表,尔后通过连接进行查询。 
连接可以在Select 语句的FROM子句或Where子句中建立,似是而非在FROM子句中指出连接时有助于将连接操作与Where子句中的搜索条件区分开来。所以,在Transact-SQL中推荐使用这种方法。 
SQL-92标准所定义的FROM子句的连接语法格式为: 
FROM join_table join_type join_table 
[ON (join_condition)] 
其中join_table指出参与连接操作的表名,连接可以对同一个表操作,也可以对多表操作,对同一个表操作的连接又称做自连接。 
join_type 指出连接类型,可分为三种:
内连接(INNER JOIN):使用比较运算符进行表间某(些)列数据的比较操作,并列出这些表中与连接条件相匹配的数据行。根据所使用的比较方式不同,内连接又分为等值连接、自然连接和不等连接三种。
外连接:分为左外连接(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 
SQL语言查询基础:联合查询 
UNION运算符可以将两个或两个以上上Select语句的查询结果集合合并成一个结果集合显示,即执行联合查询。UNION的语法格式为: 
select_statement 
UNION [ALL] selectstatement 
[UNION [ALL] selectstatement][…n] 
其中selectstatement为待联合的Select查询语句。 
ALL选项表示将所有行合并到结果集合中。不指定该项时,被联合查询结果集合中的重复行将只保留一行。 
联合查询时,查询结果的列标题为第一个查询语句的列标题。因此,要定义列标题必须在第一个查询语句中定义。要对联合查询结果排序时,也必须使用第一查询语句中的列名、列标题或者列序号。 
在使用UNION 运算符时,应保证每个联合查询语句的选择列表中有相同数量的表达式,并且每个查询选择表达式应具有相同的数据类型,或是可以自动将它们转换为相同的数据类型。在自动转换时,对于数值类型,系统将低精度的数据类型转换为高精度的数据类型。 
在包括多个查询的UNION语句中,其执行顺序是自左至右,使用括号可以改变这一执行顺序。例如: 
查询1 UNION (查询2 UNION 查询3)

(0)

相关推荐

  • 对MySQL几种联合查询的通俗解释

    表a aid adate 1 a1 2 a2 3 a3 表b bid bdate 1 b1 2 b2 4 b4 两个表a.b相连接,要取出id相同的字段. select * from a inner join b on a.aid = b.bid 这是仅取出匹配的数据. 此时的取出的是: 1 a1 b1 2 a2 b2 那么left join 指: select * from a left join b on a.aid = b.bid 首先取出a表中所有数据,然后再加上与a.b匹配的的数据.

  • SQL 联合查询与XML解析实例详解

    SQL 联合查询与XML解析实例           这里举例说明如何实现该功能: (select a.EBILLNO, a.EMPNAME, a.APPLYDATE, b.HS_NAME, replace(replace(a.SUMMARY,char(10), ''),char(13),'') as SUMMARY, cast(c.XmlData as XML).value('(/List/item/No/text())[1]','NVARCHAR(300)') as No, cast(c.X

  • Mysql联合查询UNION和Order by同时使用报错问题的解决办法

    因此,常常出现这样的错误 复制代码 代码如下: select * from [IND] where INDID>10unionselect * from [IND] where INDID<9 目前为止,还没有出现问 之后,也许有人会用到类似的查询 复制代码 代码如下: select * from [IND] where INDID>10 order by INDID descunionselect * from [IND] where INDID<9 order by INDID

  • Mysql联合查询UNION和UNION ALL的使用介绍

    一.UNION和UNION ALL的作用和语法 UNION 用于合并两个或多个 SELECT 语句的结果集,并消去表中任何重复行.UNION 内部的 SELECT 语句必须拥有相同数量的列,列也必须拥有相似的数据类型.同时,每条 SELECT 语句中的列的顺序必须相同.SQL UNION 语法: 复制代码 代码如下: SELECT column_name FROM table1UNIONSELECT column_name FROM table2 注释:默认地,UNION 操作符选取不同的值.如

  • 深入sql多表差异化联合查询的问题详解

    本章简略讲述本人在实例开发中遇到的多表查询的问题其中主要讲述select A.*,B.*,C.* from A,B,C和select A.*,B.*,C.* from 表A inner join 表B on A.id=B.id inner join 表C on A.code=C.code的区别 最近遇到一个这样的项目需求--要求页面集合显示三个关联表的信息.由于实际项目里出现的字段比较多,现在简化说明如下:table A 含有字段 UserName,CardCode,ItamCodetable

  • mysql多表联合查询返回一张表的内容实现代码

    今天在使用mysql语句的时候老是报错,语句如下: Sql代码 复制代码 代码如下: SELECT sapcle FROM SellEnterpriseBaseInfor sebie,SellEnterpriseBaseInforVer sebive,SellApplyPermitChangeList sapcle WHERE 1=1 AND sebie.iVerID = sebive.id AND sapcle.iEnterpriseBaseInforID=sebive.id AND sapc

  • 详解Mysql多表联合查询效率分析及优化

    1. 多表连接类型 1. 笛卡尔积(交叉连接) 在MySQL中可以为CROSS JOIN或者省略CROSS即JOIN,或者使用','  如: SELECT * FROM table1 CROSS JOIN table2 SELECT * FROM table1 JOIN table2 SELECT * FROM table1,table2 由于其返回的结果为被连接的两个数据表的乘积,因此当有WHERE, ON或USING条件的时候一般不建议使用,因为当数据表项目太多的时候,会非常慢.一般使用LE

  • Oracle PL/SQL语言入门基础

    正在看的ORACLE教程是:Oracle PL/SQL语言入门基础.PL/SQL是ORACLE对标准数据库语言的扩展,ORACLE公司已经将PL/SQL整合到ORACLE 服务器和其他工具中了,近几年中更多的开发人员和DBA开始使用PL/SQL,本文将讲述PL/SQL基础语法,结构和组件.以及如何设计并执行一个PL/SQL程序. PL/SQL的优点 从版本6开始PL/SQL就被可靠的整合到ORACLE中了,一旦掌握PL/SQL的优点以及其独有的数据管理的便利性,那么你很难想象ORACLE缺了PL

  • MySQL 数据库聚合查询和联合查询操作

    目录 1. 插入被查询的结果 2. 聚合查询 2.1 介绍 2.2 聚合函数 2.3 group by 子句 2.4 having 3. 联合查询 3.1 介绍 3.2 内连接 3.3 外连接 3.4 自连接 3.5 子查询 3.6 合并查询 1. 插入被查询的结果 语法: insert into 要插入的表 [(列1, ..., 列n)] select {* | (列1, ..., 列n)}from 要查询的表 上述语句可以将要查询的表的某些列插入到新的表中对应的某些列 示例1: 将 stud

  • MySQL 数据库聚合查询和联合查询操作

    目录 1.插入被查询的结果 2.聚合查询 2.1介绍 2.2聚合函数 2.3groupby子句 2.4having 3.联合查询 3.1介绍 3.2内连接 3.3外连接 3.4自连接 3.5子查询 3.6合并查询 1. 插入被查询的结果 语法: insert into 要插入的表 [(列1, ..., 列n)] select {* | (列1, ..., 列n)}from 要查询的表 上述语句可以将要查询的表的某些列插入到新的表中对应的某些列 2. 聚合查询 2.1 介绍 聚合查询:是指对一个数

  • 详细聊聊关于Mysql联合查询的那些事儿

    目录 联合查询之union 1. 查询中国各省的ID以及省份名称 2. 湖南省所有地级市ID.名字 3. 用union将他们合并 联合查询之union all 联合查询之inner join 1. 查询湖北省有多少地级市 2. 统计各省地级市的数量,输出省名.地级市数量 3. 查询拥有20个以上区县的城市,输出城市名,区县数量 联合查询之三表联合 1. 区县最多的3个城市是哪个省的哪个市,查询结果包括省名,市名,区县数量 联合查询之left join&right join 查询所有省份和它的城市

  • MyBatis 多表联合查询及优化方法

    目录 背景 正文 关于优化 这篇文章我打算来简单的谈谈 mybatis 的多表联合查询.起初是觉得挺简单的,没必要拿出来写,毕竟 mybatis 这东西现在是个开发的都会用,而且网上的文章也是一搜罗一大堆,根本就用不着我来重复.但是吧,就我前几天在做一个多表联合查询的时候,竟然出了很多意想不到的问题,而且这些问题的出现,并不是对 mybatis 不了解,而是在用的过程中会或多或少的忽略一些东西,导致提示各种错误. 背景 老规矩,开始之前,还是要先说说这件事的背景.也就是最近几天,公司要做一个后台

  • 详解MySql基本查询、连接查询、子查询、正则表达查询

    查询数据指从数据库中获取所需要的数据.查询数据是数据库操作中最常用,也是最重要的操作.用户可以根据自己对数据的需求,使用不同的查询方式.通过不同的查询方式,可以获得不同的数据.MySQL中是使用SELECT语句来查询数据的.在这一章中将讲解的内容包括. 1.查询语句的基本语法 2.在单表上查询数据 3.使用聚合函数查询数据 4.多表上联合查询 5.子查询 6.合并查询结果 7.为表和字段取别名 8.使用正则表达式查询 什么是查询? 怎么查的? 数据的准备如下: create table STUD

  • SQL语言查询基础:连接查询 联合查询 代码

    SQL语言查询基础:连接查询  通过连接运算符可以实现多个表查询.连接是关系数据库模型的主要特点,也是它区别于其它类型数据库管理系统的一个标志.  在关系数据库管理系统中,表建立时各数据之间的关系不必确定,常把一个实体的所有信息存放在一个表中.当检索数据时,通过连接操作查询出存放在多个表中的不同实体的信息.连接操作给用户带来很大的灵活性,他们可以在任何时候增加新的数据类型.为不同实体创建新的表,尔后通过连接进行查询.  连接可以在Select 语句的FROM子句或Where子句中建立,似是而非在

  • SQL联合查询inner join、outer join和cross join的区别详解

    对于开发使用到数据库的应用,免不了就要使用联合查询,SQL中常用的联合查询有inner join.outer join和cross join:这三者的区别很多人都应该不是很清楚,包括我自己,下面我们一起来看看,如果你使用join连表,缺陷的情况下是inner join,另外,开发中使用的left join和right join属于outer join,而outer join还包括full join.下面我通过图案让大家认识它们的区别. 现有两张表,Table A 是左边的表.Table B 是右

  • SQL SERVER实现连接与合并查询

    创建测试表MyStudentInfo CREATE table MyStudentInfo ( Id int not null primary key, Name varchar(16), Age int, Gender varchar(2), Phone varchar(16), Address varchar(50), GradeId int ) 联合插入多条数据 INSERT INTO MyStudentInfo SELECT 1,'张三',20,'1','15801258912','上海

  • SQL 多表联合查询的几种方式详解

    目录 前言 正文 内连接 等值连接/相等连接 自然连接 自连接 外连接 左外连接 右外连接 全外连接/完全外连接 交叉连接/笛卡尔积 总结 前言 连接查询是关系数据中最主要的查询,包括内连接.外连接等.通过连接运算符可以实现多个表查询. 正文 连接查询主要分为三种:内连接.外连接.交叉连接. 内连接 使用比较运算符(包括=.>.<.<>.>=.<=.!> 和!<)进行表间的比较操作,查询与连接条件相匹配的数据.根据所使用的比较方式不同,内连接分为等值连接.自

随机推荐