T-SQL学习中--内联接,外连接,交叉连接
交叉连接可以表A和表B是同一张表取得笛卡尔乘积。
比如说下面这种写法:
SQL
SELECT D.n AS theday, S.n AS shiftno FROM dbo.Nums AS Dcross JOIN dbo.Nums AS S WHERE D.n <= 7AND S.N <= 3 ORDER BY theday, shiftno;
当然也可以表A和表B是两张不同的表,取得笛卡尔乘积。
SQL
SELECT D.n AS theday, S.empid AS shiftno FROM dbo.Nums AS Dcross JOIN [HR].[Employees] AS S WHERE D.n <= 7AND S.empid <= 3 ORDER BY theday, shiftno;
但是CROSS JOIN
不能用ON
条件,只能用WHERE
条件。下面这句与上面的语句查询结果相同。
SQL
SELECT D.n AS theday, S.empid AS shiftno FROM dbo.Nums AS Dinner JOIN [HR].[Employees] AS S on D.n <= 7AND S.empid <= 3 ORDER BY theday, shiftno;
内联接查询,表A和表B中的数据必须紧密对应,不可以是Null。下面的查询中,Production.Products
表中没有商品记录的的日本供货商不会被列出来。INNER
这个关键词是可以舍去的,如果只写JOIN
就表示INNER JOIN
。
SQL
SELECTS.companyname AS supplier, S.country,P.productid, P.productname, P.unitprice FROM Production.Suppliers AS SINNER JOIN Production.Products AS PON S.supplierid = P.supplierid WHERE S.country = N'Japan';
外连接查询有三种情况:左外连接,右外连接,全外连接。
下面这个查询与上面这个查询写法只差一点点(WHERE变成了AND),但是结果就有区别:
SQL
SELECTS.companyname AS supplier, S.country,P.productid, P.productname, P.unitprice FROM Production.Suppliers AS SINNER JOIN Production.Products AS PON S.supplierid = P.supplieridAND S.country = N'Japan';
而且Production.Products
表中没有商品记录的的日本供货商同样也会被列出来,但是相关的P.productid, P.productname, P.unitprice都会被记为NULL。
下面这句:
SQL
SELECT E.empid,E.firstname + N' ' + E.lastname AS emp,M.firstname + N' ' + M.lastname AS mgr FROM HR.Employees AS EINNER JOIN HR.Employees AS MON E.mgrid = M.empid;
用了内联接,则最高主管(CEO)不会被列出来,因为最高主管没有更高的主管了。
而改用左外连接
SQL
SELECT E.empid,E.firstname + N' ' + E.lastname AS emp,M.firstname + N' ' + M.lastname AS mgr FROM HR.Employees AS ELEFT OUTER JOIN HR.Employees AS MON E.mgrid = M.empid;
则CEO也会被列出来,CEO对应的mgr会被记为NULL。
套用内联接的左外连接:
SQL
SELECTS.companyname AS supplier, S.country,P.productid, P.productname, P.unitprice,C.categoryname FROM Production.Suppliers AS SLEFT OUTER JOIN Production.Products AS PON S.supplierid = P.supplieridINNER JOIN Production.Categories AS CON C.categoryid = P.categoryid WHERE S.country = N'Japan';
查询出日本供货商的所有的产品以及产品类别名。而且Production.Products
表中没有商品记录的的日本供货商同样也会被列出来,但是相关的P.productid, P.productname, P.unitprice, C.categoryname都会被记为NULL。
上面的语句与下面带括号的语句等同:
SQL
SELECTS.companyname AS supplier, S.country,P.productid, P.productname, P.unitprice,C.categoryname FROM Production.Suppliers AS SLEFT OUTER JOIN (Production.Products AS PINNER JOIN Production.Categories AS CON C.categoryid = P.categoryid)ON S.supplierid = P.supplierid WHERE S.country = N'Japan';
RIGHT OUTER JOIN
则与LEFT OUTER JOIN
相反,根据ON条件和WHERE条件查询表A和表B,查询结果可以表A中数据为NULL。
FULL OUTER JOIN
则只要表A和表B中任一表中有数据,结果都会被显示出来。无论是表A为NULL,还是表B为NULL。
OUTER
也是可以被省略的。LEFT JOIN
就是LEFT OUTER JOIN
的简写,相应的,RIGHT JOIN
是RIGHT OUTER JOIN
的简写,FULL JOIN
是FULL OUTER JOIN
的简写。
T-SQL学习中--内联接,外连接,交叉连接相关推荐
- 4.mysql数据库创建,表中创建模具模板脚本,mysql_SQL99标准连接查询(恩,外部连接,全外连接,交叉连接)...
mysql数据库创建,表创建模等模板脚本 -- 用root用户登录系统,运行脚本 -- 创建数据库 create database mydb61 character set utf8 ; -- ...
- 4.mysql数据库创建,表创建模等模板脚本,mysql_SQL99标准的连接查询(内连接,外连接,满外连接,交叉连接)
mysql数据库创建,表创建模等模板脚本 --用root用户登录系统,执行脚本 --创建数据库 create database mydb61 character set utf8 ; --选择数 ...
- mysql外连接基准表_4.mysql数据库创建,表创建模等模板脚本,mysql_SQL99标准的连接查询(内连接,外连接,满外连接,交叉连接)...
mysql数据库创建,表创建模等模板脚本 --用root用户登录系统,执行脚本 --创建数据库 create database mydb61 character set utf8 ; --选择数 ...
- 数据库学习之MySQL (十六)—— SQL99 外连接 左外连接 右外连接 全外连接 交叉连接
文章目录 外连接 之 左外连接 与 右外连接 为啥要用外连接 全外连接 总结 内连接 外连接 交叉连接 外连接 之 左外连接 与 右外连接 我们先来看个之前的 女神男朋友的案例 传送:数据库学习之My ...
- Hibernate中使用左外连接
hibernate中的左外连接要怎么设置呢? 很简单:设置fetch属性为EAGER即可.加载策略中:LZAY使用的是inner join:EAGER使用的是left join. @ManyToOne ...
- 一文完整MySQL连接查询,笛卡尔乘积,内连接外连接交叉连接
文章目录 笛卡尔乘积 连接查询分类 等值连接 非等值连接 自连接 外连接 交叉连接 连接查询又称为多表查询,当查询的字段来自于多个表时,使用连接查询. 笛卡尔乘积 笛卡尔乘积现象:表1有m行,表2有n ...
- 理解内连接中的隐式内连接、显式内连接和外连接中的左外连接、右外连接
一.多表查询 二.在 MySQL 中创建 book 和 actor 两张表 1 创建 book 表及添加数据 CREATE TABLE `book` (`id` INT PRIMARY KEY NOT ...
- 秒懂sql中的左外连接
左外连接: 1.语法: SELECT 查询字段 FROM 查询表格(左表) LEFT JOIN 右表 ON 查询条件 2.左外连接查询的就是左表,那干嘛加个右表,岂不是没有作用: 区别在于左外连接是查 ...
- Oracle 内、外连接
一.Oracle连接类型 ☆说明:按照自己的理解划分的类型,并不是官方定义. 1.内连接 ①等值连接 ②非等值连接 ③自然连接 2.外连接 ①左外连接 ②右外连接 ③全外连接 二.表数据准备 ...
最新文章
- 手把手教你使用Gene6FTP远程管理
- 重载函数与函数模板(转)
- os.system方法
- 时间序列研(part5)--四种典型的非平稳随机过程
- Python之Numpy入门实战教程(1):基础篇
- Subversion快速入门教程(SVN)
- centOS7查看防火墙状态
- JDBC单独了解一下
- android 换机 备份,Recovery(Android手机备份功能)
- 学计算机买戴尔笔记本哪款,戴尔笔记本大学生用,买哪款比较好?
- 处理:‘IplImage’ does not name a type; did you mean ‘image’?
- Prometheus(普罗米修斯)监控系统
- PAT-1068 万绿丛中一点红
- 夏夜也发低烧—夜的精灵[风潮唱片]
- 教师计算机课教学反思范文,信息技术课优秀教学反思
- 将[c语言中文网](http://c.biancheng.net/view/1380.html)的“”23 种设计模式“的网页转成pdf
- UEFI shell - 脚本文件
- vue源码分析系列三:render的执行过程和Virtual DOM的产生
- Finished with error: ProcessException: ProcessXXXXXXXexited abnormally 的解决方法
- Java计算税收代码实现