SQL入门经典(三) 之连接查询
上一篇介绍到查询。这一篇主要讲连接查询,将介绍INNER JOIN,OUTER JOIN(LEFT和RIGHT),FULL JOIN,CROSS JOIN。
连接顾名斯义就是把多个数据表数据合并到一个结果集。
用内部连接检索匹配的数据(inner join)
连接结构语法如下:SELECT <column list> FROM <first table> <join_type> <last table> [ON <join condition>]
接着上面的。经理又有了新需求。要求你查看每个商品的订单日期,先看下面的3条需求代码:

select p.ProductID,p.Name,o.UnitPrice,o.OrderQty,o.ModifiedDate FROM Production.Product AS p inner join Sales.SalesOrderDetail AS o ON p.ProductID=o.ProductID --查询到121317条数据集 select p.*,o.UnitPrice,o.OrderQty,o.ModifiedDate FROM Production.Product AS p inner join Sales.SalesOrderDetail AS o ON p.ProductID=o.ProductID -- --查询到121317条数据集(注意看,下面p.*不同。*表示所有列。p表示p的所有列别查询出来 select ProductID,o.UnitPrice,o.OrderQty,o.ModifiedDate FROM Production.Product AS p inner join Sales.SalesOrderDetail AS o ON p.ProductID=o.ProductID
--(无法查询到,运行出现问题:返回了“消息 209,级别 16,状态 1,第 1 行 列名 'ProductID' 不明确。“的错误信息,因为SQL不知道ProductID是那个表的列)

先看2个数据表数据(主要讲解外部连接和全连接)
| ID | Name | Contact |
| 1 | test3 | null |
| 2 | test4 | 1 |
| 3 | test5 | 5 |
| 4 | test 6 | 2 |
| ID | Name |
| 1 | test1 |
| 2 | test2 |
| 3 | test3 |
| 4 | test4 |
使用外部检索更多数据(outer join)。
外部连接很少用于实际开发。大家也要理解外部连接。
外部连接基本语法和内部连接差不多:SELECT <select column> FROM <the table you want to be the left table> <LEFT|RIGHT>[OUTER] JOIN <table you want to be the right table >[ON ] <join condition> OUTER可以简写掉。为了遵循ISO标准化代码所以加上了

SELECT o.*,c.* FROM Order as o inner join Contact AS c on c.id=o.Contact --inner查询只有2条结果。 SELECT o.*,c.* FROM Order as o left join Contact AS c on c.id=o.Contact --left查询只有4条结果,有2条结果C.ID和C.Name 为NULL,数据没有匹配到所以null。 SELECT o.*,c.* FROM Order as o right join Contact AS c on c.id=o.Contact --right查询只有4条结果,有2条结果o.ID和o.Name,o.Contact 为NULL,数据没有匹配到所以null。

外部连接主要检索孤立数据多
完全连接(full join)
外部连接几乎很少使用,只要理解这个概念就知道。顾名思义就完全连接就是left和right联合查询。返回2个表的所有数据。没有匹配到值就NULL代替。先看外部连接SQL语句
SELECT o.*,c.* FROM Order AS o FULL JOIN Contact as c ON C.ID=O.Contact-- 共查询到6条数据(按理说应该是4+4=8条数据,因为中间有2条数据匹配到了,所有6条了)
交叉连接(CROSS JOIN)
交叉连接又称笛卡尔连接。这个用的更少,主要用于测试大量数据。打个比方。有2个表。一个是保存姓有100个姓,一个保存名有1000个名。我要100000个姓名。就使用交叉连接了。继续接着上面的那个表。
SELECT o.*,c.* FROM Order AS o CROSS JOIN Contact as c --就会产生16条数据。数据量有点大就不贴了。
在SQL2000的早期语法。虽然现在不在使用了。现在sql2012版本不在兼容了。碰见也要记得早期语法。
内部连接:SELECT * from Order,Contact where Order.Contact=Contact.ID;用,代替inner join 和where 代替on。
外部连接:SELECT * from Order,Contact where Order.Contact*=Contact.ID;用,代替(left|right) join 和where 代替on,后面条件(*=左连接,=*右连接)
交叉连接:SELECT *from Order,Contact;去掉CROSS JOIN 就可以关键词添加一个,
联合(union)
接着上面表:相对来说比较简单,就是2个表数据合并成一个表(注意2个表数据结构和数据列一样才能UNION)
select ID,Name FORM Contact
UNION (all)
select ID,Name FORM Order
--all是可选参数。如果没有all,2条结果集有重合数据就舍弃取一条,加上all不会舍弃。
SQL入门经典(三) 之连接查询的更多相关文章
- 学习如何看懂SQL Server执行计划(三)——连接查询篇
三.连接查询部分 --------------------嵌套循环-------------------- /* UserInfo表数据少.Coupon表数据多嵌套循环可以理解为就是两层For循环,外 ...
- SQL入门经典(十) 之事务
事务是什么?事务关键在与其原子性.原子性概念是指可以把一些事情当作一个执行单元来看待.从数据库角度看待.他是指应该全部执行或者全部不执行一条或多条语句的最小组合.当处理数据时候经常确保一件事发生另一件 ...
- SQL总结(三)其他查询
SQL总结(三)其他查询 其他常用的SQL,在这里集合. 1.SELECT INTO 从一个表中选取数据,然后把数据插入另一个表中.常用于创建表的备份或者用于对记录进行存档. 语法: SELECT c ...
- MyBatis基础入门《三》Select查询集合
MyBatis基础入门<三>Select查询集合 描述: 代码新增了一个MybatisUtil工具类,查询数据库返回集合的时候,接收数据的三种方式.由于代码会渐渐增多,未涉及改动过的文件不 ...
- 《SQL入门经典》总结
<SQL入门经典>这本书从考试前就开了个头,一直到前两天才看完,拉的战线也够长的.放假来了,基本上什么内容都不记得了.好不容易看完了,就赶紧总结一下吧! 该书分为两大部分,第一部分是第1~ ...
- SQL入门经典(一)之简介
今天是我第一天开通博客,也是我的第一篇博客.以后为大家带来第一篇关于学习技术性文章,这段时间会为大家带来是SQL入门学习.希望大家坚持读下去,因为学历有限.我也是初学者.语言表达能力不好和知识点不足, ...
- MySQL数据库实验三:连接查询
实验三 连接查询 实验名称:连接查询(2课时) 一.实验目的 理解JOIN语句的操作和基本使用方法,掌握内连接.外连接.自身连接的概念和使用. 二.实验环境 是MS SQL SERVER 200 ...
- SQL入门经典(六) 之视图
视图实际上就是一个存储查询,重点是可以混合和匹配来自基本表(或其他视图)的数据,从而创建在很多方面象另一个普通表那样的起的作用.可以创建一个简单的查询,仅仅从一个表(另一个视图)选择几列或几行,而忽略 ...
- sql server 实现多表连接查询
项目中要实现多表查询,用外连接实现. a表 a(aid,aname) 其中aid为pk b表 b(aid,bname,aid) 其中 bid为pk,aid为fk c表 c(cid,cname,aid) ...
随机推荐
- 使用WebDriver遇到的那些坑
在做web项目的自动化端到端测试时主要使用的是Selenium WebDriver来驱动浏览器.Selenium WebDriver的优点是支持的语言多,支持的浏览器多.主流的浏览器Chrome.Fi ...
- winform 异步读取数据 小实例
这几天对突然对委托事件,异步编程产生了兴趣,大量阅读前辈们的代码后自己总结了一下. 主要是实现 DataTable的导入导出,当然可以模拟从数据库读取大量数据,这可能需要一定的时间,然后 再把数据导入 ...
- cv_prj2
Computer Vision Project 2 – Harris Corner Detector 姓名: 王兴路 学号: 3140102282 指导老师: 宋明黎 2016-12-16 19:30 ...
- rsync排除文件同步
排除扩展名为log的文件 rsync -ave ssh --exclude '*.log' root@192.168.168.188:/website/abc.com/* /website/abc.c ...
- MySql之安装配置
1.解压Mysql.zip后,添加bin目录的环境变量 2.配置my.ini文件中的 # basedir =D:\mysql-5.6.24-winx64 # datadir = D:\mysql-5. ...
- node学习笔记(四)
//Node.js标准库提供了http模块,其中封装了一个高效的http服务器和一个简易的http客户端 //http.Server是一个基于事件的HTTP服务器,它的核心由Node.js下层c++部 ...
- 一行css代码调试中学到的javascript知识,很有意思
现在到处都是JavaScript,每天都能知道点新东西.一旦你入了门,你总能从这里或是那里领悟到很多知识.今天我想分享Addy Osmani的一行代码 ,这行代码对于你调试你的CSS是很有用的.为了可 ...
- ubuntu安装goldendict以及添加本地词典和在线词典
软件在ubuntu软件中心安装就可以了, 关于网络词典, 推荐有道在线词典,网址http://dict.youdao.com/search?q=%GDWORD%&ue=utf8 添加方法:编辑 ...
- 使用html2canvas实现批量生成条形码
/*前台代码*/ <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Generat ...
- 解决拖拽有内容的div的bug和兼容问题
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 31.0px Consolas; color: #2b7ec3 } p.p2 { margin: 0.0px ...