SELECT语句的完整语法为_第1页
SELECT语句的完整语法为_第2页
SELECT语句的完整语法为_第3页
SELECT语句的完整语法为_第4页
SELECT语句的完整语法为_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、SELECT 语句的完整语法为:SELECTALL|DISTINCT|DISTINCTROW|TOP*|talbe.*|table.field1AS alias1,table.field2AS alias2, FROM tableexpression, IN externaldatabaseWHERE GROUP BY HAVING ORDER BY WITH OWNERACCESS OPTION说明:用中括号 (括起来的部分表示是可选的,用大括号 (括起来的部分是表示必须从中选择其中的一个。 1 FROM子句FROM 子句指定了 SELECT 语句中字段的来源。 FROM 子句后面是包含一个

2、或多个的表达式 (由逗号分开 ,其 中的表达式可为单一表名称、已保存的查询或由 INNER JOIN 、 LEFT JOIN 或 RIGHT JOIN 得到的复合结果。 如果表或查询存储在外部数据库,在 IN 子句之后指明其完整路径。例:下列 SQL 语句返回所有有定单的客户:SELECT OrderID,Customer.customerIDFROM Orders CustomersWHERE Orders.CustomerID=Customers.CustomeersID2 ALL、 DISTINCT 、 DISTINCTROW 、 TOP 谓词(1 ALL 返回满足 SQL 语句条件的所

3、有记录。如果没有指明这个谓词,默认为 ALL 。例:SELECT ALL FirstName,LastNameFROM Employees(2 DISTINCT 如果有多个记录的选择字段的数据相同,只返回一个。(3 DISTINCTROW 如果有重复的记录,只返回一个(4 TOP显示查询头尾若干记录。也可返回记录的百分比,这是要用 TOP N PERCENT子句(其中 N 表示百 分比例:返回 5%定货额最大的定单SELECT TOP 5 PERCENT*FROM Order DetailsORDER BY UnitPrice*Quantity*(1-Discount DESC3 用 AS 子

4、句为字段取别名如果想为返回的列取一个新的标题,或者,经过对字段的计算或总结之后,产生了一个新的值,希望把它 放到一个新的列里显示,则用 AS 保留。例:返回 FirstName 字段取别名为 NickNameSELECT FirstName AS NickName ,LastName ,CityFROM Employees例:返回新的一列显示库存价值SELECT ProductName ,UnitPrice ,UnitsInStock ,UnitPrice*UnitsInStock AS valueInStockFROM Products二 .WHERE 子句指定查询条件1 比较运算符比较运算

5、符 含义= 等于> 大于< 小于>= 大于等于<= 小于等于<> 不等于!> 不大于!< 不小于例:返回 96年 1月的定单SELECT OrderID, CustomerID, OrderDateFROM OrdersWHERE OrderDate>#1/1/96# AND OrderDate<#1/30/96#注意:Mcirosoft JET SQL 中,日期用 #定界。日期也可以用 Datevalue(函数来代替。在比较字符型的数据时,要加上单引号 ,尾空格在比较中被忽略。例:WHERE OrderDate>#96-1-1

6、#也可以表示为:WHERE OrderDate>Datevalue( 1/1/96 使用 NOT 表达式求反。例:查看 96年 1月 1日以后的定单WHERE Not OrderDate<=#1/1/96#2 范围(BETWEEN 和 NOT BETWEENBETWEEN AND 运算符指定了要搜索的一个闭区间。例:返回 96年 1月到 96年 2月的定单。WHERE OrderDate Between #1/1/96# And #2/1/96#3 列表(IN , NOT ININ 运算符用来匹配列表中的任何一个值。 IN 子句可以代替用 OR 子句连接的一连串的条件。例:要找出住

7、在 London、 Paris 或 Berlin 的所有客户SELECT CustomerID, CompanyName, ContactName, CityFROM CustomersWHERE City In( London , Paris , Berlin 4 模式匹配 (LIKELIKE 运算符检验一个包含字符串数据的字段值是否匹配一指定模式。LIKE 运算符里使用的通配符通配符 含义? 任何一个单一的字符* 任意长度的字符# 09之间的单一数字字符列表 在字符列表里的任一值!字符列表 不在字符列表里的任一值- 指定字符范围,两边的值分别为其上下限例:返回邮政编码在(171 555-0

8、000到(171 555-9999之间的客户SELECT CustomerID ,CompanyName,City,PhoneFROM CustomersWHERE Phone Like (171555-#LIKE 运算符的一些样式及含义样式 含义 不符合LIKE A* A后跟任意长度的字符 Bc,c255LIKE 5 5*5 555LIKE 5?5 5与 5之间有任意一个字符 55,5wer5LIKE 5#5 5235, 5005 5kd5,5346LIKE a-z a-z间的任意一个字符 5,%LIKE !0-9 非 0-9间的任意一个字符 0,1LIKE 1,*三 .用 ORDER BY

9、子句排序结果ORDER 子句按一个或多个(最多 16个字段排序查询结果,可以是升序(ASC 也可以是降序(DESC ,缺 省是升序。 ORDER 子句通常放在 SQL 语句的最后。ORDER 子句中定义了多个字段,则按照字段的先后顺序排序。例:SELECT ProductName,UnitPrice, UnitInStockFROM ProductsORDER BY UnitInStock DESC , UnitPrice DESC, ProductNameORDER BY 子句中可以用字段在选择列表中的位置号代替字段名,可以混合字段名和位置号。例:下面的语句产生与上列相同的效果。SELECT

10、 ProductName,UnitPrice, UnitInStockFROM ProductsORDER BY 1 DESC , 2 DESC,3四 .运用连接关系实现多表查询例:找出同一个城市中供应商和客户的名字FROM Customers, SuppliersWHERE Customers.City=Suppliers.City例:找出产品库存量大于同一种产品的定单的数量的产品和定单SELECT ProductName,OrderID, UnitInStock, QuantityFROM Products, Order DeailsWHERE PductID=Orde

11、r Details.ProductIDAND UnitsInStock>Quantity另一种方法是用 Microsof JET SQL 独有的 JNNER JOIN语法:FROM table1 INNER JOIN table2ON table1.field1 comparision table2.field2其中 comparision 就是前面 WHERE 子句用到的比较运算符。SELECT FirstName,lastName,OrderID,CustomerID,OrderDateFROM EmployeesINNER JOIN Orders ON Employees.Empl

12、oyeeID=Orders.EmployeeID注意:INNER JOIN不能连接 Memo OLE Object Single Double 数据类型字段。在一个 JOIN 语句中连接多个 ON 子句语法:SELECT fieldsFROM table1 INNER JOIN table2ON table1.field1 compopr table2.field1 ANDON table1.field2 compopr table2.field2 ORON table1.field3 compopr table2.field3也可以SELECT fieldsFROM table1 INNER

13、 JOIN(table2 INNER JOIN ( table3INNER JOER ( tablexINNER JOINON table1.field1 compopr table2.field1ON table1.field2 compopr table2.field2ON table1.field3 compopr table2.field3外部连接返回更多记录,在结果中保留不匹配的记录,不管存不存在满足条件的记录都要返回另一侧的所 有记录。FROM table LEFT|RIGHTJOIN table2ON table1.field1comparision table.field2用左

14、连接来建立外部连接,在表达式的左边的表会显示其所有的数据例:不管有没有定货量,返回所有商品SELECT ProductName ,OrderIDFROM ProductsLEFT JOIN Orders ON Products.PrductsID=Orders.ProductID右连接与左连接的差别在于:不管左侧表里有没有匹配的记录,它都从左侧表中返回所有记录。例:如果想了解客户的信息,并统计各个地区的客户分布,这时可以用一个右连接,即使某个地区没有客 户,也要返回客户信息。空值不会相互匹配,可以通过外连接才能测试被连接的某个表的字段是否有空值。SELECT *FROM talbe1LEFT

15、JOIN table2 ON table1.a=table2.c1 连接查询中使用 Iif 函数实现以 0值显示空值Iif 表达式: Iif(IsNull(Amount,0,Amout例:无论定货大于或小于¥ 50,都要返回一个标志。Iif(Amount>50,?Big order?,?Small order?五 . 分组和总结查询结果在 SQL 的语法里, GROUP BY和 HAVING 子句用来对数据进行汇总。 GROUP BY子句指明了按照哪几个字段来 分组,而将记录分组后,用 HAVING 子句过滤这些记录。GROUP BY 子句的语法SELECT fidldlistFROM

16、tableWHERE criteriaGROUP BY groupfieldlist HAVING groupcriteria注:Microsoft Jet数据库 Jet 不能对备注或 OLE 对象字段分组。GROUP BY字段中的 Null 值以备分组但是不能被省略。在任何 SQL 合计函数中不计算 Null 值。GROUP BY子句后最多可以带有十个字段,排序优先级按从左到右的顺序排列。例:在 WA 地区的雇员表中按头衔分组后,找出具有同等头衔的雇员数目大于 1人的所有头衔。 SELECT Title ,Count(Title as TotalFROM EmployeesWHERE Reg

17、ion = WA GROUP BY TitleHAVING Count(Title>1JET SQL 中的聚积函数聚集函数 意义SUM ( 求和AVG ( 平均值COUNT ( 表达式中记录的数目COUNT (* 计算记录的数目MAX 最大值MIN 最小值VAR 方差STDEV 标准误差FIRST 第一个值LAST 最后一个值六 . 用 Parameters 声明创建参数查询Parameters 声明的语法 :PARAMETERS name datatype,name datatype, 其中 name 是参数的标志符 , 可以通过标志符引用参数 .Datatype 说明参数的数据类型

18、.使用时要把 PARAMETERS 声明置于任何其他语句之前 .例 :PARAMETERSLow price Currency,Beginning datedatatimeSELECT OrderID ,OrderAmountFROM OrdersWHERE OrderAMount>low priceAND OrderDate>=Beginning date七 . 功能查询所谓功能查询 , 实际上是一种操作查询 , 它可以对数据库进行快速高效的操作 . 它以选择查询为目的 , 挑选出 符合条件的数据 , 再对数据进行批处理 . 功能查询包括更新查询 , 删除查询 , 添加查询 ,

19、和生成表查询 . 1 更新查询UPDATE 子句可以同时更改一个或多个表中的数据 . 它也可以同时更改多个字段的值 .更新查询语法 :UPDATE 表名SET 新值WHERE 准则例 :英国客户的定货量增加 5%,货运量增加 3%UPDATE OEDERSSET OrderAmount = OrderAmount *1.1Freight = Freight*1.03WHERE ShipCountry = UK 2 删除查询DELETE 子句可以使用户删除大量的过时的或冗于的数据 .注 :删除查询的对象是整个记录 .DELETE 子句的语法 :DELETE 表名 .*FROM 来源表WHERE

20、准则例 : 要删除所有 94年前的定单DELETE *FROM OrdersWHERE OrderData<#94-1-1#3 追加查询INSERT 子句可以将一个或一组记录追加到一个或多个表的尾部 .INTO 子句指定接受新记录的表valueS 关键字指定新记录所包含的数据值 .INSERT 子句的语法 :INSETR INTO 目的表或查询 (字段 1, 字段 2, valueS(数值 1, 数值 2, 例 :增加一个客户INSERT INTO Employees(FirstName,LastName,titlevalueS( Harry , Washington , Trainee

21、 4 生成表查询可以一次性地把所有满足条件的记录拷贝到一张新表中 . 通常制作记录的备份或副本或作为报表的基础 . SELECT INTO子句用来创建生成表查询语法 :SELECT 字段 1, 字段 2, INTO 新表 IN 外部数据库 FROM 来源数据库WHERE 准则例 :为定单制作一个存档备份SELECT *INTO OrdersArchiveFROM Orders八 . 联合查询UNION 运算可以把多个查询的结果合并到一个结果集里显示 .UNION 运算的一般语法 :表 查询 1 UNION ALL查询 2 UNION 例 :返回巴西所有供给商和客户的名字和城市SELECT Co

22、mpanyName,CityFROM SuppliersWHERE Country = Brazil UNIONSELECT CompanyName,CityFROM CustomersWHERE Country = Brazil 注 :缺省的情况下 ,UNION 子句不返回重复的记录 . 如果想显示所有记录 , 可以加 ALL 选项UNION 运算要求查询具有相同数目的字段 . 但是 , 字段数据类型不必相同 .每一个查询参数中可以使用 GROUP BY 子句 或 HAVING 子句进行分组 . 要想以指定的顺序来显示返回的数 据 , 可以在最后一个查询的尾部使用 OREER BY子句 .九

23、 . 交叉查询交叉查询可以对数据进行总和 , 平均 , 计数或其他总和计算法的计算 , 这些数据通过两种信息进行分组 :一个 显示在表的左部 , 另一个显示在表的顶部 .Microsoft Jet SQL 用 TRANSFROM 语句创建交叉表查询语法 :TRANSFORM aggfunctionSELECT 语句GROUP BY 子句PIVOT pivotfieldIN(value1 ,value2, Aggfounction 指 SQL 聚积函数 ,SELECT 语句选择作为标题的的字段 ,GROUP BY 分组说明:Pivotfield 在查询结果集中创建列标题时用的字段或表达式 , 用

24、可选的 IN 子句限制它的取值 .value 代表创建列标题的固定值 .例 :显示在 1996年里每一季度每一位员工所接的定单的数目 :TRANSFORM Count(OrderIDSELECT FirstName& &LastName AS FullNameFROM Employees INNER JOIN OrdersON Employees.EmployeeID = Orders.EmployeeIDWHERE DatePart( yyyy ,OrderDate= 1996GROUP BY FirstName& &LastNameORDER BY Firs

25、tName& &LastNamePOVOT DatePart( q ,OrderDate&季度十 .子查询子查询可以理解为 套查询 . 子查询是一个 SELECT 语句 .1 表达式的值与子查询返回的单一值做比较语法 :表达式 comparision ANY|ALL|SOME(子查询 说明:ANY 和 SOME 谓词是同义词 , 与比较运算符 (=,<,>,<>,<=,>=一起使用 . 返回一个布尔值 True 或 False.ANY 的意思是 , 表达式与子查询返回的一系列的值逐一比较 , 只要其中的一次比较产生 True 结果 ,

26、ANY 测试的返 回 True值 (既 WHERE 子句的结果 , 对应于该表达式的当前记录将进入主查询的结果中 .ALL 测试则要求表达 式与子查询返回的一系列的值的比较都产生 True 结果 , 才回返回 True 值 .例 :主查询返回单价比任何一个折扣大于等于 25%的产品的单价要高的所有产品SELECT * FROM ProductsWHERE UnitPrice>ANY(SELECT UnitPrice FROMOrder Details WHERE Discount>0.252 检查表达式的值是否匹配子查询返回的一组值的某个值语法 :NOTIN(子查询 例 :返回库存

27、价值大于等于 1000的产品 .SELECT ProductName FROM ProductsWHERE ProductID IN(SELECT PrdoctID FROM Order DEtailsWHERE UnitPrice*Quantity>= 10003检测子查询是否返回任何记录语法 :NOTEXISTS (子查询 例 :用 EXISTS 检索英国的客户SELECT ComPanyName,ContactNameFROM OrdersWHERE EXISTS(SELECT *FROM CustomersWHERE Country = UK ANDCustomers.Custo

28、merID= Orders.CustomerIDSELECT 语句使用大全2008-12-08 09:55:21|分类:数据库 阅读 461 评论 0 字号:大 中 小 订阅虽然 SELECT 语句的完整语法比较复杂,但是大多数 SELECT 语句都描述结果集的四个主要属性1、结果集中的列的数量和属性。2、从中检索结果集数据的表,以及这些表之间的所有逻辑关系。3、为了符合 SELECT 语句的要求,源表中的行所必须达到的条件。不符合条件的行会被忽略。4、结果集的行的排列顺序。它的主要子句可归纳如下:SELECT select_list -描述结果集的列INTO new_table_name -

29、指定使用结果集来创建新表FROM table_list -包含从中检索到结果集数据的表的列表 返回结果集的对象 。 WHERE search_conditions -WHERE 子句是一个筛选,它定义了源表中的行要满足 SELECT 语句的要 求所必须达到的条件 GROUP BY group_by_list -根据 group_by_list 列中的值将结果集分成组 HAVING search_conditions -结果集的附加筛选 ORDER BY order_list ASC | DESC -结果集的附加筛选一、使用选择列表1、使用 *号来选择所有列;使用 表名 |别名 。 字段 选取特

30、定的列。2、 AS 子句可用来更改结果集列的名称或为派生列分配名称,也可以使用空格代替如 : SELECT Name AS Name1,Name Name2 FROM Product ORDER BY Name ASC3、使用 DISTINCT 消除重复项如:select distinct Year from A4、使用 TOP 和 PERCENT 限制结果集数量TOP ( expression PERCENT WITH TIES -expression数量、 PERCENT 按百分比返 回数据、 WITH TIES返回排序与最后一行并列的行。如:获取成绩前三名的同学select top 3

31、* from Score order by Num desc -不考虑成绩并列select top 3 WITH TIES * from Score order by Num desc -可解决成绩并列的问题 5、选择列表中的计算值选择的列不但可以包括数据表列,还可以包括计算值,这些结果集列被称为派生列。计算并 且包括以下运算:对数值列或常量使用算术运算符或函数进行的计算和运算。如 SUM(, COUNT(,AVG(等。 数据类型转换 . 如 CAST(ProductID AS VARCHAR(10 。CASE 函数。 如select ID,name,Case Sex when 'm&

32、#39; then '男 ' else '女 ' end from Student-根据 SEX 的值输出性别信息6、子查询。select ID,name,(Select(sum from Score S where S.SID=A.ID AllScore from Student A-获取学生的基本信息和总成绩。7、使用 INTO 。 使用 INTO 将会把选择的数据插入到指定的表中而不返回数据集。如:select ID,name,(Select(sum from Score S where S.SID=A.ID INTO #T Student -将查询的结果

33、装入临时表 T 中。二、使用 FROM 子句1、使用表别名SELECT 语句的可读性可通过为表指定别名来提高,别名也称为相关名称或范围变量。分配 表别名时,可以使用 AS 关键字,也可以不使用:table_name AS table alias 或 table_name table_alias2、使用 PIVOT 和 UNPIVOT SQL2005有效 可以使用 PIVOT 和 UNPIVOT 关系运算符对表值表达式进行操作以获得另一个表。 PIVOT 通过将表达式某一列中的唯一值转换为输出中的多个列来转换表值表达式,并在必要时对最终输出中所需 的任何其余的列值执行聚合。 UNPIVOT 与

34、PIVOT 执行相反的操作,将表值表达式的列转换为列值。PIVOT示例:SELECT * FROM StuSources pivot(sum(chengji for kecheng in(语文 ,数学 ,历史 as prv -将行转换为列SELECT VendorID, Employee, Orders FROM pvtUNPIVOT (Orders FOR Employee IN (Emp1, Emp2, Emp3, Emp4, Emp5AS unpvt -将列转换为行3、使用 APPLY使用 APPLY 运算符可以为实现查询操作的外部表表达式返回的每个行调用表值函数。 表值 函数作为右输入

35、,外部表表达式作为左输入。通过对右输入求值来获得左输入每一行的计算结果,生成的 行被组合起来作为最终输出。APPLY 有两种形式: CROSS APPLY 和 OUTER APPLY。 CROSS APPLY 仅返回外部表中通过表 值函数生成结果集的行。 OUTER APPLY 既返回生成结果集的行,也返回不生成结果集的行,其中表值函数 生成的列中的值为 NULL。如:-Create Employees table and insert valuesCREATE TABLE Employees(empid int NOT NULL, -员工编号mgrid int NULL,-经理编号empna

36、me varchar(25 NOT NULL,-姓名salary money NOT NULL,-薪水CONSTRAINT PK_Employees PRIMARY KEY(empid,GOINSERT INTO Employees VALUES(1 , NULL, 'Nancy' , $10000.00INSERT INTO Employees VALUES(2 , 1 , 'Andrew' , $5000.00INSERT INTO Employees VALUES(3 , 1 , 'Janet' , $5000.00INSERT INTO

37、Employees VALUES(4 , 1 , 'Margaret', $5000.00INSERT INTO Employees VALUES(5 , 2 , 'Steven' , $2500.00INSERT INTO Employees VALUES(6 , 2 , 'Michael' , $2500.00INSERT INTO Employees VALUES(7 , 3 , 'Robert' , $2500.00INSERT INTO Employees VALUES(8 , 3 , 'Laura' ,

38、 $2500.00INSERT INTO Employees VALUES(9 , 3 , 'Ann' , $2500.00INSERT INTO Employees VALUES(10, 4 , 'Ina' , $2500.00INSERT INTO Employees VALUES(11, 7 , 'David' , $2000.00INSERT INTO Employees VALUES(12, 7 , 'Ron' , $2000.00INSERT INTO Employees VALUES(13, 7 , 'Dan

39、' , $2000.00INSERT INTO Employees VALUES(14, 11 , 'James' , $1500.00GO-Create Departments table and insert valuesCREATE TABLE Departments(deptid INT NOT NULL PRIMARY KEY,deptname VARCHAR(25 NOT NULL,deptmgrid INT NULL REFERENCES EmployeesGOINSERT INTO Departments VALUES(1, 'HR',

40、2INSERT INTO Departments VALUES(2, 'Marketing', 7INSERT INTO Departments VALUES(3, 'Finance', 8INSERT INTO Departments VALUES(4, 'R&D', 9INSERT INTO Departments VALUES(5, 'Training', 4INSERT INTO Departments VALUES(6, 'Gardening', NULL-若要返回每个部门经理的所有级别的全部下属

41、,请使用下面的查询: GOCREATE FUNCTION dbo.fn_getsubtree(empid AS INT RETURNS TREE TABLE (empid INT NOT NULL,empname VARCHAR(25 NOT NULL,mgrid INT NULL,lvl INT NOT NULLASBEGINWITH Employees_Subtree(empid, empname, mgrid, lvlAS(- Anchor Member (AMSELECT empid, empname, mgrid, 0FROM employeesWHERE empid = empid

42、UNION all- Recursive Member (RMSELECT e.empid, e.empname, e.mgrid, es.lvl+1FROM employees AS eJOIN employees_subtree AS esON e.mgrid = es.empidINSERT INTO TREESELECT * FROM Employees_SubtreeRETURNENDGOSELECT *FROM Departments AS DCROSS APPLY fn_getsubtree(D.deptmgrid AS ST三、使用 WHERE 和 HAVING 筛选行WHER

43、E 和 HAVING 子句可以控制用于生成结果集的源表中的行。 WHERE 和 HAVING 是筛选器。这 两个子句指定一系列搜索条件,只有那些满足搜索条件的行才用于生成结果集。HAVING 子句通常与 GROUP BY 子句一起使用以筛选聚合值结果。但是 HAVING 也可以在不使用 GROUP BY 的情况下单独指定。 HAVING 子句指定在应用 WHERE 子句筛选器后要进一步应用的筛选器。这些 筛选器可以应用于 SELECT 列表中所用的聚合函数。1、比较搜索条件。2、范围搜索条件。 NOT BETWEEN 范围搜索返回介于两个指定值之间的所有值SELECT * FROM A WHE

44、RE Acount Between 10 AND 203、列表搜索条件。 IN 关键字使您可以选择与列表中的任意值匹配的行。SELECT ProductID, Name FROM Product WHERE CategoryID IN (12, 14, 164、搜索条件中的模式匹配。 LIKE 关键字搜索与指定模式匹配的字符串、日期或时间值。 % 包含零个或多个字符的任意字符串。_ 任何单个字符。 指定范围(例如 a-f或集合(例如 abcdef内的任何单个字符。 不在指定范围(例如 a - f或集合(例如 abcdef内的任何单个字符。 5、 NULL 比较搜索条件。NULL比较行为取决于

45、SET ANSI_NULLS设置,当 SET ANSI_NULLS 为 ON 时,如果比较中 有一个或多个表达式为 NULL,则既不输出 TRUE 也不输出 FALSE,而是输出 UNKNOWN。此时需要使用 IS NOT NULL 子句测试 NULL 值。当 ANSI_NULLS 为 OFF 时,如果 ColumnA 包含空值,则比较操作 ColumnA = NULL 返回 TRUE ;如果 ColumnA 除包含 NULL 外还包含某些值,则比较操作返回 FALSE。此外,两个都取空值的表达 式的比较也输出 TRUE6、所有记录(=ALL、 >ALL、 <= ALL、 ANY

46、。select * from A where Amount=Any(select amount from A where Year=2001 and Year<>20017、逻辑运算符。逻辑运算符包括 AND、 OR 和 NOT。逻辑运算符的优先顺序为 NOT 、 AND 和 OR。 四、使用 GROUP BY 分组行GROUP BY 子句用来为结果集中的每一行产生聚合值。如果聚合函数没有使用 GROUP BY 子句,则 只为 SELECT 语句报告一个聚合值。WHERE 搜索条件在进行分组操作之前应用; 而 HAVING 搜索条件在进行分组操作之后应用。 HAVING 语法与 W

47、HERE 语法类似,但 HAVING 可以包含聚合函数。 HAVING 子句可以引用选择列表中显示的任意项。 select Year,Sum(AMount AMount from A Group By Year -按年份分组统计销量五、用 ORDER BY 对行进行排序ORDER BY 子句按一列或多列(最多 8,060 个字节对查询结果进行排序。排序可以是升序的 (ASC,也可以是降序的 (DESC。如果未指定是升序还是降序,就假定为 ASC。六、子查询子查询是一个嵌套在 SELECT、 INSERT 、 UPDATE 或 DELETE 语句或其他子查询中的查询。任何允 许使用表达式的地方都

48、可以使用子查询。子查询也称为内部查询或内部选择,而包含子查询的语句也称为 外部查询或外部选择。1、使用别名的子查询当表进行自联接或需要引入外表表列与本表列名相同时需要使用表别名2、使用 NOT IN 的子查询USE AdventureWorks;GOSELECT NameFROM Production.ProductWHERE ProductSubcategoryID IN(SELECT ProductSubcategoryIDFROM Production.ProductSubcategoryWHERE Name = 'Wheels'3、 UPDATE 、 DELETE 和

49、INSERT 语句中的子查询如:联表更新GOUPDATE Production.ProductSET ListPrice = ListPrice * 2FROM Production.Product AS pINNER JOIN Purchasing.ProductVendor AS pvON p.ProductID = pv.ProductID AND pv.VendorID = 51;4、使用比较运算符的子查询GOSELECT CustomerIDFROM Sales.CustomerWHERE TerritoryID =(SELECT TerritoryIDFROM Sales.Sale

50、sPersonWHERE SalesPersonID = 2765、使用 NOT EXISTS 的子查询6、用于替代表达式的子查询GOSELECT Name, ListPrice,(SELECT AVG(ListPrice FROM Production.Product AS Average,ListPrice - (SELECT AVG(ListPrice FROM Production.ProductAS DifferenceFROM Production.ProductWHERE ProductSubcategoryID = 1七、表联接通过联接,可以从两个或多个表中根据各个表之间的逻辑

51、关系来检索数据。联接条件可通过以下方式定义两个表在查询中的关联方式:指定每个表中要用于联接的列。典型的联接条件在一个表中指定一个外键,而在另一个表中指定与其关联 的键。指定用于比较各列的值的逻辑运算符(例如 = 或 <>。1、内联接 INNER JOIN.仅当两个表中都至少有一个行符合联接条件时, 内部联接才返回行 , 内部联接消除了与另一 个表中的行不匹配的行 .2、外连接 LEFT |RIGHT|FULL OUTER JOIN外部联接会返回 FROM 子句中提到的至少一个表或视图中的所有行,只要这些行符合任何 WHERE 或 HAVING 搜索条件。将检索通过左外部联接引用的左

52、表中的所有行,以及通过右外部联接引用的 右表中的所有行。在完全外部联接中,将返回两个表的所有行其分为:左外部联接,数据列表包括了满足查询条件的左边表的所有行。右外部联接,数据列表包括了满足查询条件的右边表的所有行。完全外部联接,数据包含了所有满足查询条件的列。3、交叉联接 CROSS JOIN返回满足查询条件记录的笛卡尔积运算的集合(N ×M 。4、自联接表可以通过自联接与自身联接。5、多表联接SELECT p.Name, v.NameFROM Production.Product pJOIN Purchasing.ProductVendor pvON p.ProductID = p

53、v.ProductIDJOIN Purchasing.Vendor vON pv.VendorID = v.VendorIDWHERE ProductSubcategoryID = 15ORDER BY v.Name6、NULL 和联接 联接表的列中的空值(如果有)互相不匹配。如果其中一个联接表的列中出现空值,只 能通过外部联接返回这些空值(除非 WHERE 子句不包括空值)。 八、结果集的操作 1、ALL UNION 运算符组合结果集。 UNION 运算符使您得以将两个或多个 SELECT 语句的结果组合成一个结果集。使用 UNION 运算符组合的结果集都必须具有相同的结构。而且它们的列数必

54、须相同,并且相应的结果集列的数 据类型必须兼容。 默认情况下,UNION 运算符将从结果集中删除重复的行。如果使用 ALL 关键字,那么结 果中将包含所有行而不删除重复的行。 2、EXCEPT 和 INTERSECT 执行半联接操作 EXCEPT 和 INTERSECT 运算符使您可以比较两个或多个 SELECT 语句的结果并返回非重复 值。EXCEPT 运算符返回由 EXCEPT 运算符左侧的查询返回、而又不包含在右侧查询所返回的值中的所有非 重复值。 INTERSECT 返回由 INTERSECT 运算符左侧和右侧的查询都返回的所有非重复值。使用 EXCEPT 或 INTERSECT 比较的结果集必须具有相同的结构。 3、公用表表达式 (CTE 递归查询 公用表表达

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论