当前位置: 首页 > 编程日记 > 正文

Sql的连接表补充

连接条件可在FROM或WHERE子句中指定,建议在FROM子句中指定连接条件。WHERE和HAVING子句也可以包含搜索条件,以进一步筛选连接条件所选的行。   
    
      连接可分为以下几类:     
    
      内连接。(典型的连接运算,使用像   =   或   <>   之类的比较运算符)。包括相等连接和自然连接     
      内连接使用比较运算符根据每个表共有的列的值匹配两个表中的行。例如,检索   students   和   courses   表中学生标识号相同的所有行。   
    
      外连接。外连接可以是左向外连接、右向外连接或完整外部连接     
      在FROM子句中指定外连接时,可以由下列几组关键字中的一组指定:   
      LEFT   JOIN   或   LEFT   OUTER   JOIN。     
      左向外连接的结果集包括LEFT  OUTER子句中指定的左表的所有行,而不仅仅是连接列所匹配的行。如果左表的某行在右表中没有匹配行,则在相关联的结果集行中右表的所有选择列表列均为空值。    
      RIGHT  JOIN  或  RIGHT   OUTER   JOIN。     
      右向外连接是左向外连接的反向连接。将返回右表的所有行。如果右表的某行在左表中没有匹配行,则将为左表返回空值。   
    
      FULL   JOIN   或   FULL   OUTER   JOIN。     
      完整外部连接返回左表和右表中的所有行。当某行在另一个表中没有匹配行时,则另一个表的选择列表列包含空值。如果表之间有匹配行,则整个结果集行包含基表的数据值。   
    
      交叉连接。交叉连接返回左表中的所有行,左表中的每一行与右表中的所有行组合。交叉连接也称作笛卡尔积。   
    
例如,下面的内连接检索与某个出版商居住在相同州和城市的作者:   
    
  USE   pubs   
  SELECT   a.au_fname,   a.au_lname,   p.pub_name   
  FROM   authors   AS   a   INNER   JOIN   publishers   AS   p   
        ON   a.city   =   p.city   
        AND   a.state   =   p.state   
  ORDER   BY   a.au_lname   ASC,   a.au_fname   ASC   
    
      FROM   子句中的表或视图可通过内连接或完整外部连接按任意顺序指定;但是,用左或右向外连接指定表或视图时,表或视图的顺序很重要。有关使用左或右向外连接排列表的更多信息,请参见使用外连接。     
    
例子:   
  a表       id   name     b表     id     job   parent_id   
              1   张3                   1     23     1   
              2   李四                  2     34     2   
              3   王武                  3     34     4   
    
  a.id同parent_id   存在关系   
    
  内连接   
  select   a.*,b.*   from   a   inner   join   b     on   a.id=b.parent_id   
    
  结果是     
  1   张3                   1     23     1   
  2   李四                  2     34     2   
    
  左连接   
  select   a.*,b.*   from   a   left   join   b     on   a.id=b.parent_id   
    
  结果是     
  1   张3                    1     23     1   
  2   李四                  2     34     2   
  3   王武                  null   

  右连接   
  select   a.*,b.*   from   a   right   join   b     on   a.id=b.parent_id   
    
  结果是     
  1   张3                   1     23     1   
  2   李四                 2     34     2   
  null                       3     34     4   
    
  完全连接   
  select   a.*,b.*   from   a   full   join   b     on   a.id=b.parent_id   

  结果是     
  1   张3                   1     23     1   
  2   李四                 2     34     2   
  null                 3     34     4   
  3   王武                 null
SQL code
DECLARE
@TA TABLE (IDA INT,VA VARCHAR(10))
DECLARE
@TB TABLE (IDB INT,VB VARCHAR(10))
INSERT INTO @TA
SELECT
1,'AA' UNION SELECT
2,'BC' UNION SELECT
3,'CCC'
INSERT INTO @TB
SELECT
1,'2'  UNION SELECT
3,'58' UNION SELECT
4,'67'
--内联接简单写法
SELECT A.IDA,A.VA,B.IDB,B.VB FROM @TA A,@TB B
WHERE A.IDA=B.IDB
--内联接
SELECT A.IDA,A.VA,B.IDB,B.VB FROM @TA A INNER JOIN @TB B
ON A.IDA=B.IDB
SELECT A.IDA,A.VA,B.IDB,B.VB FROM @TA A JOIN @TB B
ON A.IDA=B.IDB
--左外联接
SELECT A.IDA,A.VA,B.IDB,B.VB FROM @TA A LEFT JOIN @TB B
ON A.IDA=B.IDB
SELECT A.IDA,A.VA,B.IDB,B.VB FROM @TA A LEFT OUTER JOIN @TB B
ON A.IDA=B.IDB
--右外联接
SELECT A.IDA,A.VA,B.IDB,B.VB FROM @TA A RIGHT JOIN @TB B
ON A.IDA=B.IDB
SELECT A.IDA,A.VA,B.IDB,B.VB FROM @TA A RIGHT OUTER JOIN @TB B
ON A.IDA=B.IDB
--完整外联接
SELECT A.IDA,A.VA,B.IDB,B.VB FROM @TA A FULL JOIN @TB B
ON A.IDA=B.IDB
SELECT A.IDA,A.VA,B.IDB,B.VB FROM @TA A FULL OUTER JOIN @TB B
ON A.IDA=B.IDB
--交叉联接
SELECT A.IDA,A.VA,B.IDB,B.VB FROM @TA A CROSS JOIN @TB B
--自联接
SELECT A.IDA,A.VA,B.IDA,B.VA FROM @TA A,@TA B WHERE A.IDA=B.IDA+1
查询分析器中执行:
--建表table1,table2:
create table table1(id int,name varchar(10))
create table table2(id int,score int)
insert into table1 select 1,'lee'
insert into table1 select 2,'zhang'
insert into table1 select 4,'wang'
insert into table2 select 1,90
insert into table2 select 2,100
insert into table2 select 3,70
如表
-------------------------------------------------
table1|table2|
-------------------------------------------------
idname|idscore|
1lee|190|
2zhang|2100|
4wang|370|
-------------------------------------------------以下均在查询分析器中执行
一、外连接
1.概念:包括左向外联接、右向外联接或完整外部联接
2.左连接:left join 或 left outer join
(1)左向外联接的结果集包括 LEFT OUTER 子句中指定的左表的所有行,而不仅仅是联接列所匹配的行。如果左表的某行在右表中没有匹配行,则在相关联的结果集行中右表的所有选择列表列均为空值(null)。
(2)sql语句
select * from table1 left join table2 on table1.id=table2.id
-------------结果-------------
idnameidscore
------------------------------
1lee190
2zhang2100
4wangNULLNULL
------------------------------
注释:包含table1的所有子句,根据指定条件返回table2相应的字段,不符合的以null显示
3.右连接:right join 或 right outer join
(1)右向外联接是左向外联接的反向联接。将返回右表的所有行。如果右表的某行在左表中没有匹配行,则将为左表返回空值。
(2)sql语句
select * from table1 right join table2 on table1.id=table2.id
-------------结果-------------
idnameidscore
------------------------------
1lee190
2zhang2100
NULLNULL370
------------------------------
注释:包含table2的所有子句,根据指定条件返回table1相应的字段,不符合的以null显示
4.完整外部联接:full join 或 full outer join
(1)完整外部联接返回左表和右表中的所有行。当某行在另一个表中没有匹配行时,则另一个表的选择列表列包含空值。如果表之间有匹配行,则整个结果集行包含基表的数据值。
(2)sql语句
select * from table1 full join table2 on table1.id=table2.id
-------------结果-------------
idnameidscore
------------------------------
1lee190
2zhang2100
4wangNULLNULL
NULLNULL370
------------------------------
注释:返回左右连接的和(见上左、右连接)
二、内连接
1.概念:内联接是用比较运算符比较要联接列的值的联接
2.内连接:join 或 inner join
3.sql语句
select * from table1 join table2 on table1.id=table2.id
-------------结果-------------
idnameidscore
------------------------------
1lee190
2zhang2100
------------------------------
注释:只返回符合条件的table1和table2的列
4.等价(与下列执行效果相同)
A:select a.*,b.* from table1 a,table2 b where a.id=b.id
B:select * from table1 cross join table2 where table1.id=table2.id  (注:cross join后加条件只能用where,不能用on)
三、交叉连接(完全)
1.概念:没有 WHERE 子句的交叉联接将产生联接所涉及的表的笛卡尔积。第一个表的行数乘以第二个表的行数等于笛卡尔积结果集的大小。(table1和table2交叉连接产生3*3=9条记录)
2.交叉连接:cross join (不带条件where...)
3.sql语句
select * from table1 cross join table2
-------------结果-------------
idnameidscore
------------------------------
1lee190
2zhang190
4wang190
1lee2100
2zhang2100
4wang2100
1lee370
2zhang370
4wang370
------------------------------
注释:返回3*3=9条记录,即笛卡尔积
4.等价(与下列执行效果相同)
A:select * from table1,table2

转载于:https://www.cnblogs.com/LangZiXiYan/p/6953518.html

相关文章:

js正则验证身份证号是否正确

微信小程序开发交流qq群 173683895 承接微信小程序开发。扫码加微信。 封装js公共方法 //验证身份证格式 const IdentityCodeValid sId > {const aCity { 11: "北京", 12: "天津", 13: "河北", 14: "山西", 15: "内蒙古…

jupyter笔记本_如何为Jupyter笔记本电脑设置PySpark

jupyter笔记本by Tirthajyoti Sarkar由Tirthajyoti Sarkar 如何为Jupyter笔记本电脑设置PySpark (How to set up PySpark for your Jupyter notebook) Apache Spark is one of the hottest frameworks in data science. It realizes the potential of bringing together both …

php 判断是否有相同的ID,如果有就修改数据库字段,没有就插入数据库字段

微信小程序开发交流qq群 173683895 承接微信小程序开发。扫码加微信。 php代码 <?phpheader("Content-Type:text/html;charsetutf8"); header("Access-Control-Allow-Origin: *"); //解决跨域header(Access-Control-Allow-Methods:POST);// 响应类…

MySql存储引擎特性对比

下表显示了各种存储引擎的特性&#xff1a; 其中最常见的两种存储引擎是MyISAM和InnoDB 刚接触MySQL的时候可能会有些惊讶&#xff0c;竟然有不支持事务的存储引擎&#xff0c;学过关系型数据库理论的人都知道&#xff0c;事务是关系型数据库的核心。但是在现实应用中&#xff…

如何使用React提前三天计划

by Mohit Jain由Mohit Jain 如何使用React提前三天计划 (How you can plan three days ahead with React) Today we’ll be making a ‘to-do’ website… with some different features.今天&#xff0c;我们将建立一个具有一些不同功能的“待办事项”网站。 You can check …

ajax 基础

ajax基础模式 url : "Handler.ashx", -- 提交到哪个服务端 data: { "uname": s }, -- 提交的数据&#xff0c;以键值对的方式传字符串&#xff0c;只能是字符串&#xff0c;可以传多个。 type: "post", …

wamp配置虚拟域名

1、打开apache下httpd.conf 我的目录是在F:\wamp\bin\apache\apache2.2.22\conf\httpd.conf 2、去掉这两行前面的#注释 LoadModule rewrite_module modules/mod_rewrite.so Include conf/extra/httpd-vhosts.conf 这两个注释 3、配置httpd-vhosts.conf <VirtualHost *:80>…

VUE 事件获取当前组件的属性

微信小程序开发交流qq群 173683895 承接微信小程序开发。扫码加微信。 for循环把当前的item传递给绑定事件&#xff1a; <block v-for"(item, index) in data_list"><div v-on:clickchangeType(item) class"ci "><div class"cib&q…

javascript计时器_JavaScript计时器:您需要了解的一切

javascript计时器by Samer Buna通过Samer Buna JavaScript计时器&#xff1a;您需要了解的一切 (JavaScript Timers: Everything you need to know) A few weeks ago, I tweeted this interview question:几周前&#xff0c;我在推特上发布了这个面试问题&#xff1a; *** An…

软考总结——虚存管理

&#xfeff;&#xfeff;存储管理是操作系统的重要职能之中的一个&#xff0c;主要任务是对内存空间进行分配与回收。因为计算机内存容量有限&#xff08;如今一般都是32位或64位系统&#xff09;&#xff0c;而外存储设备的容量增长速度很快&#xff0c;比如移动硬盘已经到了…

微信小程序与H5相互跳转和传递数据

微信小程序开发交流qq群 173683895 承接微信小程序开发。扫码加微信。 这是小程序和web-vew的H5相互传参&#xff0c;H5使用小程序的微信支付的代码 H5部分 <!DOCTYPE html> <html><head><meta charset"utf-8" /><!--<meta name&…

【算法】弗洛伊德(Floyd)算法

这个算法主要要弄懂三个循环的顺序关系。 弗洛伊德&#xff08;Floyd&#xff09;算法过程&#xff1a;&#xff11;、用D[v][w]记录每一对顶点的最短距离。&#xff12;、依次扫描每一个点&#xff0c;并以其为基点再遍历所有每一对顶点D[][]的值&#xff0c;看看是否可用过该…

二次开发photoshop_Photoshop 101:Web开发人员简介

二次开发photoshop介绍 (Introduction) Often, when working as web developer, we need to integrate templates. They can be from Photoshop or other software. In this article, we will have a look at the basics of Photoshop for web developers.通常&#xff0c;在作…

html 提交表单,图片和文字一起提交,图片存入服务器,图片地址和表单信息存入数据库,带后端php代码

微信小程序开发交流qq群 173683895 承接微信小程序开发。扫码加微信。 html <!DOCTYPE html> <html><head><meta name"viewport" content"widthdevice-width, initial-scale1.0, user-scalableno, minimum-scale1.0, maximum-scale1.0…

mysql-理想的索引

1.查询频繁 2.区分度高 例如&#xff1a;数据库表字段&#xff1a;sex 存储&#xff1a;男女&#xff0c;区分度就不高。 3.长度小 索引的长度直接影响索引文件的大小&#xff0c;影响增删改的速度&#xff0c;并间接影响查询速度。 4.尽可能覆盖常用字段 转载于:https://www.c…

使用java的Calendar对象获得当前日期的上几个度开始、结束时间

思路&#xff1a; 先获得当前季度的开始和结束日期&#xff0c;在当前日期的基础上往前推3个月即上个季度的开始和结束日期 /*** param flag true&#xff1a;开始日期&#xff1b;false&#xff1a;结束日期* return*/public static String getLastQuarterTime(boolean flag){…

快速 开发平台 架构_快速介绍清洁架构

快速 开发平台 架构by Daniel Deutsch由Daniel Deutsch 快速介绍清洁架构 (A quick introduction to clean architecture) In an open source project I started to contribute to, the concept of “clean architecture” was brought to me.在一个我开始参与的开源项目中 &a…

linux uart m200平台波特率500kbps乱码问题和输入不响应问题

[问题] linux uart m200平台波特率500kbps乱码问题 [解答] [问题] linux uart m200平台波特率500kbps输入不响应问题 [解答]转载于:https://www.cnblogs.com/harvis/p/6972196.html

VS2013中, 无法嵌入互操作类型“……”,请改用适用的接口的解决方法

使用VS2013&#xff0c;在引用COM组件的时候&#xff0c;出现了无法嵌入互操作类型“……”&#xff0c;请改用适用的接口的错误提示。 查阅资料&#xff0c;找到解决方案&#xff0c;记录如下&#xff1a; 选中项目中引入的dll&#xff0c;鼠标右键&#xff0c;选择属性&#…

JS根据两点的经纬度坐标得到驾车行驶距离

微信小程序开发交流qq群 173683895 承接微信小程序开发。扫码加微信。 html <!DOCTYPE html> <html><head><meta http-equiv"Content-Type" content"text/html; charsetutf-8"><meta name"viewport" content&quo…

three.ar.js_我们如何通过AR.js使产品吉祥物栩栩如生

three.ar.jsby Mateusz Tarnaski由Mateusz Tarnaski 我们如何通过AR.js使产品吉祥物栩栩如生 (How we brought our product mascot to life with AR.js) Short answer: using a browser-based Augmented Reality (AR) application. For the long answer, read below.简短答案&…

利用tuning-primer脚本优化MySQL数据库

脚本下载网址&#xff1a; http://www.day32.com/MySQL/tuning-primer.sh #!/bin/sh # vim: ts8########################################################################## ## MySQL performance tuning primer script ## Writen by: Matthew Montgomery ## Report bugs t…

自定义View步骤学习笔记

用途 : 一个View内部的子控件比较多的时候可以自定义一个View,把它内部的子控件屏蔽起来(就像苹果的导航栏上面的UIBarButton,你是通过BarButtonitem来修改显示的内容) 1.重写 initWithFrame 和 awakeFromNib(一般两个都要写),然后在写一个初始化的方法,在初始化方法中添加子控…

小程序给视频加默认图片封面,点击播放视频并停止播放上一个视频

微信小程序开发交流qq群 173683895 承接微信小程序开发。扫码加微信。 实现的功能&#xff1a; 微信小程序视频组件添加图片封面, 点击图片播放视频, 点击下一个视频的封面图自动停止播放当前视频并播放点击的视频。 效果GIF图&#xff1a; 实现代码&#xff1a; WXML …

一天 用户旅程_439天的旅程改变了我的生活

一天 用户旅程by Daniel Lemay丹尼尔勒梅(Daniel Lemay) 439天的旅程改变了我的生活 (The 439 day Journey that Changed my Life) It was Spring of 2017. I was beyond displeased with my current work situation. I dreaded going into work every day and being a punchi…

实现音乐播放器

音乐播放器 首先声明一下&#xff0c;本例是直接采用课本中范例122的方法。 效果图如下: 1、activity_main.xml布局 1 //四个按钮2 <LinearLayout3 android:layout_width"fill_parent"4 android:layout_height"wrap_content"5 …

学习ASP.NET MVC系列 - 还有比这更简炼的吗?把复杂的事情变简单了,贡献啊!...

转自学习ASP.NET MVC系列&#xff1a; 学习ASP.NET MVC(一)——我的第一个ASP.NET MVC应用程序 学习ASP.NET MVC(二)——我的第一个ASP.NET MVC 控制器 学习ASP.NET MVC(三)——我的第一个ASP.NET MVC 视图 学习ASP.NET MVC(四)——我的第一个ASP.NET MVC 实体对象 学习ASP.NET…

微信小程序开通腾讯云开发实践流程附详细图解

微信小程序开发交流qq群 173683895 云开发流程&#xff1a; 1.关联账户 关联腾讯云账号与微信公众号平台账号。前往关联账号时&#xff0c;请选择微信公众号。错误关联账号请在腾讯云账号中心重新绑定。 已关联账号 2.安装开发者工具 下载与安装客户端微信开发者工具并使…

github组织存储库使用_为什么我不使用您的GitHub存储库

github组织存储库使用by Sam Westreich, PhD由Sam Westreich博士 为什么我不使用您的GitHub存储库 (Why I’m not using your GitHub repository) As a bioinformatician, I reside in an interesting middle ground between developers and end users. My background trainin…

PHP导入excel到mysql数据库完整代码附效果图

微信小程序开发交流qq群 173683895 承接微信小程序开发。扫码加微信。 1.新建一个数据库 ImportXlsx 并在里面添加表名 IsXlsx. 2.下载 phpExcel 插件 点击下载 3.导入文件和xlsx 。 4.获取xlsx表的对象并存入数据库 效果图&#xff1a; PHP 实现 demo <?phph…