《SQL语言回顾与进阶.ppt》由会员分享,可在线阅读,更多相关《SQL语言回顾与进阶.ppt(23页珍藏版)》请在三一办公上搜索。
1、实验 2 SQL语言回顾与进阶,数据定义语言(DDL)语句 Create、Alter、Drop数据操作语言(DML)语句 Insert、Update、Delete、Select数据控制语言(DCL)语句 Grant、Revoke、Deny,SQL语言,Insert语句-插入数据,用Values子句插入一行数据使用INSERTSELECT语句使用SELECT INTO语句创建表插入部分数据示例参考文件Lab02Demo.sql。,Update语句-更新数据,根据表中数据更新行根据其他表更新行示例参考文件Lab02Demo.sql。,Delete语句-删除数据,使用DELETE语句使用TRUNCA
2、TE TABLE 语句删除基于其他表的行,Select语句,检索数据数据分组与汇总多表联接子查询修改数据,使用WHERE子句,USE AdventureWorksSELECT ProductID,NAMEFROM Production.ProductWHERE Class=H,设置结果集格式,可以通过设置结果集格式,改善结果集的可读性。使用ORDER BY使用DISTINCT消除重复行改变列名使用字面值,使用TOP n列出前n个记录,可以用TOP n关键字列出结果集中前n个记录。,USE AdventureWorksSELECT Top 5 Salesorderid,productid,Ord
3、erQty FROM Sales.SalesOrderDetail ORDER BY OrderQty DESCGO,使用聚合函数,聚合函数的功能是计算平均值和总和。COUNTMIN and MAXSUM and AVG,GROUP BY的基础知识,如果想要在一列中生成多个汇总值,可以使用聚合函数与GROUP BY子句。,USE AdventureWorksSELECT Size,AVG(ListPrice)AS Average ListPriceFROM Production.ProductGROUP BY SizeORDER BY Size,联合使用GROUP BY子句和HAVING子句,
4、当使用HAVING子句时,注意以下事项和原则:HAVING子句只有与GROUP BY子句联用才能对分组进行约束。只使用HAVING子句而不使用GROUP BY子句是没有意义的。可以引用任何出现在选择列表中的列。不要与HAVING子句一起使用ALL关键字,因为HAVING子句会忽略ALL关键字而返回只满足自己条件的分组。,在结果集中生成汇总值,使用带有ROLLUP运算符的GROUP BY子句使用带有CUBE运算符的GROUP BY子句使用GROUPING函数使用 PIVOT 和 UNPIVOT,使用COMPUTE和COMPUTE BY子句,生成某一列的明细值和汇总值的报表为组中的子集生成明细值和
5、汇总值的报表,推荐操作,当使用子句和运算符汇总数据时,注意下面的推荐操作:对经常聚合的列进行索引可以提高查询效率。例如,增加quantity列的索引能加快汇总操作的执行,甚至当使用了ROLLUP运算符时也是如此。在包含空值的列中避免使用聚合函数,因为结果集可能并没有正确地返回你要查询的数据。在结果集中使用ORDER BY子句以保证返回数据的排列顺序。如果不使用ORDER BY子句,SQL Server就不保证结果顺序。因为ROLLUP运算符比CUBE运算符更高效,所以只要可能就使用它。ROLLUP运算符之所以高效是因为它把汇总数据作为具体数据处理。CUBE运算符在执行时需要大量的运算,所以它需
6、要更多的资源。使用COMPUTE或COMPUTE BY子句,是因为它们可以有助于查看和输出用于测试应用程序的结果集。但是,它们产生的额外汇总记录不符合关系型格式,所以它们不适合作为产品数据库的输出。,使用表的别名,使用表的别名可以增强脚本的可读性,有利于编写复杂联接,同时简化对Transact-SQL的维护。,SELECT*FROM server.database.schema.tableAS table_alias,组合多个表中的数据(本次实验不作要求),联接概述使用内联接使用外联接使用交叉联接联接两个以上的表自联接(Self-Join)合并多个结果集,推荐操作,下面的推荐操作会有助于你执行
7、查询:根据主键和外键联接表。当表中使用组合键时,ON子句中一定要引用组合主键中的所有列。尽量在联接中限制表的个数。因为你要联接的表越多,SQL Server要完成这个查询需要的时间也就越长。,子查询介绍,子查询是一种SELECT语句的使用方法,它嵌套在SELECT、INSERT、UPDATE、DELETE语句或其他的子查询语句中。使用子查询的原因使用联接查询而不使用子查询的原因子查询的使用方法,把子查询用作派生表,可以用子查询产生一个派生表,用于代替WHERE,HAVING或者FROM子句中的表。,USE AdventureWorksSELECT SalesOrderID,ProductID,
8、OrderQtyFROM Sales.SalesOrderDetailWHERE UnitPrice(SELECT AVG(UnitPrice)FROM Sales.SalesOrderDetail),把子查询用作表达式,所有使用表达式的地方,都可以用子查询代替。此时子查询必须取值为标量值或单个列值列表。,SELECT Author ID=A.au_id,Author=CONVERT(varchar(20),RTRIM(au_lname)+,+RTRIM(au_fname),stateFROM authors A WHERE A.au_id NOT IN(SELECT B.au_id FROM
9、 titleauthor B),使用子查询关联数据,计算一个关联子查询模拟JOIN子句使用EXISTS和NOT EXISTS子句,推荐操作,下面推荐的操作有助于你执行高级查询:用子查询分解复杂的查询。你可以通过使用子查询的单个语句解决一个复杂的问题。当你的查询依赖于另一个查询的结果时子查询会很有用。在相关子查询中使用表的别名。为了区分开内部查询和外部查询的表,SQLServer要求使用别名来引用易引起二义性的表名。INSERT.SELECT语句可以从其他数据源将行添加到现有表中。使用INSERT.SELECT语句,比编写多个单行的INSERT语句的效率要高得多。尽可能使用EXISTS运算符而不是IN运算符,这样可以不用检索整个子查询的结果集。,