标签:
最近看了几篇SQL查询的文章做一下总结哦,大概简记如下:
SQL查询的实质是,是指从数据库中取得数据的子集,可以先取列子集,然后再取符合条件的行子集。
1、单表查询:
SELECT [Name] ,[GroupName] FROM [AdventureWorks].[HumanResources].[Department]WHERE DepartmentID>1 and DepartmentID<3 or DepartmentID>5 and DepartmentID<7
2、多表连接查询:连接(Join)就是一种把多个表连接成一个表的重要手段.
3、笛卡尔积 笛卡尔积在SQL中的实现方式既是交叉连接(Cross Join)。所有连接方式都会先生成临时笛卡尔积表,笛卡尔积是关系代数里的一个概念,表示两个表中的每一行数据任意组合,上图中两个表连接即为笛卡尔积(交叉连接)
4、内连接 如果分步骤理解的话,内连接可以看做先对两个表进行了交叉连接后,再通过加上限制条件(SQL中通过关键字on)剔除不符合条件的行的子集,得到的结果就是内连接了.上面的图中,如果我加上限制条件
对于开篇中的两个表,假使查询语句如下:SELECT * FROM [Class] c inner join [Student] s on c.ClassID=s.StudentClassID
5、用关系演算法的SQL查询语句如下,SELECT *FROM [Class] c, [Student] s where c.ClassID=s.StudentClassID
6、外连接 可以使连接表的一方,或者双方不必遵守on后面的连接限制条件.这里把上面的查询语句中的inner join改为left outer join:
7、右外连接 右外连接和左外连接的概念是相同的,只是顺序不同,对于上面查询语句,也可以改成:SELECT s.StudentName,c.ClassName FROM [fordemo].[dbo].[Class] c right outer join [fordemo].[dbo].[Student] s on s.StudentClassID=c.ClassID
8、 全外连接 是将左边和右边表每行都至少输出一次,用关键字”full outer join”进行连接,可以看作是左外连接和右外连接的结合.
9、自连接: 自连接的是一种特殊的连接,是对物理上相同但逻辑上不相同的表进行连接的方式。
10、子查询:子查询按照子查询所返回数据的类型,可以分为三种,分别为:1返回一张数据表(Table) 2返回一列值(Column) 3返回单个值(Scalar)
通常:A 子查询作为数据源使用 SELECT P.ProductID, P.Name, P.ProductNumber, M.Name AS ProductModelNameFROM Production.Product AS P INNER JOIN(SELECT Name, ProductModelID FROM Production.ProductModel) AS MON P.ProductModelID = M.ProductModelID
B子查询作为选择条件使用 SELECT [FirstName],[MiddleName] ,[LastName] FROM [AdventureWorks].[Person].[Contact] WHERE ContactID IN(SELECT EmployeeID FROM [AdventureWorks].[HumanResources].[Employee]
WHERE SickLeaveHours>68)
C相关子查询和EXISTS关键字 前面所说的查询都是无关子查询(Uncorrelated subquery),子查询中还有一类很重要的查询是相关子查询(Correlated subquery),也叫重复子查询比如,还是上面那个查询,用相关子查询来写:
D子查询作为计算列使用 当子查询作为计算列使用时,只返回单个值(Scalar) 。用在SELECT语句之后,作为计算列使用。同样分为相关子查询和无关子查询
11、数据集运算的种类
A.A∪B 使用UNION实现 T-SQL中提供了UNION来实现A∪B的运算,实际上UNION有两个版本,分别为: UNION UNION表示了A∪B的关系,当遇到两个数据集中相同的行时,保留唯一一个:
B .A∩B,使用INTERSECT实现 T-SQL提供了INTERSECT关键字来实现A∩B的关系
C.A∩B,使用INTERSECT实现 T-SQL提供了INTERSECT关键字来实现A∩B的关系
标签:
原文地址:http://www.cnblogs.com/ModBus/p/4995147.html