当前位置:七道奇文章资讯数据防范MSSQL防范
日期:2011-05-02 15:21:00  来源:本站整理

SQL Server数据库技术(55)[MSSQL防范]

赞助商链接



  本文“SQL Server数据库技术(55)[MSSQL防范]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
   数据库是为更便利有效地管理信息而存在的人们,但愿数据库可以随时供应所需求的数据信息.因此,对用户来说,数据查询是数据
库最重要的功效.本章将报告数据查询的实现办法.

在数据库中,数据查询是通过SELECT 语句来完成的.SELECT 语句可以从数据库中按用户要求检索数据,并将查询后果以表格的情势返回.我们在"Transact-SQL 语言"章节及前面的章节中已经初步接触到了SELECT 语句的一些用法,在本章中将分类报告其具体用法.

本节报告SELECT 语句完好的语法构造,这是一个非常冗长、单调的历程.读者可以跳过本节,从第二节开始阅读,而将本节作为理解、编写查询语句的语法参考资料. SELECT 语句完好的语法构造以下:
SELECT statement ::=
<query_expression>
[ ORDER BY { order_by_expression | column_position [ ASC | DESC ] } [,...n] ]
[ COMPUTE { { AVG | COUNT | MAX | MIN | SUM } (expression) } [,...n]
[ BY expression [,...n] ] ]
[ FOR { BROWSE | XML { RAW | AUTO | EXPLICIT }
[ , XMLDATA ]
[ , ELEMENTS ]
[ , BINARY base64 ] }
[ OPTION (<query_hint> [,...n]) ]
<query expression> ::=
{ <query specification> | (<query expression>) }
[UNION [ALL] <query specification | (<query expression>) [...n] ]
<query specification> ::=
SELECT [ ALL | DISTINCT ]
[ {TOP integer | TOP integer PERCENT} [ WITH TIES] ]
<select_list>
[ INTO new_table ]
[ FROM {<table_source>} [,...n] ]
[ WHERE <search_condition> ]
[ GROUP BY [ALL] group_by_expression [,...n]
[ WITH { CUBE | ROLLUP } ] ]
[ HAVING <search_condition> ]
由于SELECT 语句分外复杂,上述构造还不能完好阐明其用法,因此我们将它拆分为若干部份来报告.

10.1.1 SELECT 子句
SELECT 子句指定需求通过查询返回的表的列,其语法以下:
SELECT [ ALL | DISTINCT ]
[ TOP n [PERCENT] [ WITH TIES] ]
<select_list>
<select_list> ::=
{ *
| { table_name | view_name | table_alias }.*
| { column_name | expression | IDENTITYCOL | ROWGUIDCOL }
[ [AS] column_alias ]
| column_alias = expression
} [,...n]
各参数阐明以下:

  • ALL
    指明查询后果中可以显示值相同的列.ALL 是系统默许的.
  • DISTINCT
    指明查询后果中假若有值相同的列,则只显示此中的一列.对DISTINCT 选项来说, Null 值被认为是相同的值.
  • TOP n [PERCENT]
    指定返回查询后果的前n 行数据.假如PERCENT 关键字指定的话,则返回查询后果的前百分之n 行数据.
  • WITH TIES
    此选项只能在利用了ORDER BY 子句后才能利用当指定此项时,除了返回由TOP n (PERCENT) 指定的数据行外,还要返回与TOP n (PERCENT) 返回的最后一行记录中由ORDER BY 子句指定的列的列值相同的数据行.
  • select_list
    select_list 是所要查询的表的列的调集,多个列之间用逗号脱离.
  • * 通配符,返回全部对象的全部列.
  • table_name | view_name | table_alias.*
    限制通配符*的作用范围.但凡带*的项,均返回此中全部的列.
  • column_name
    指定返回的列名
  • expression
    表达式可认为列名、常量、函数或它们的组合.
  • IDENTITYCOL
    返回IDENTITY 列.假如FROM 子句中有多个表含有IDENTITY 列,则在IDENTTYCOL 选项前必须加上表名,如Table1.IDENTITYCOL.
  • ROWGUIDCOL
    返回表的ROWGUIDCOL 列.同IDENTITYCOL 选项相同,当要指定多个ROWGUIDCOL 列时,选项前必须加上表名,如Table1. ROWGUIDCOL.
  • column_alias
    在返回的查询后果顶用此别名替换列的原名.column_alias 可用于ORDER BY 子句,但不能用于WHERE GROUP BY 或HAVING 子句假如查询是游标声明号令DECLARE CURSOR 的一部份,则column_alias 还不能用于FOR UPDATE 子句(有关游标的介绍请拜见"游标和视图"章节).

10.1.2 INTO 子句
INTO 子句用于把查询后果存放到一个新建的表中.SELECT...INTO 句式不能与COMPUTE 子句一同利用.其语法以下:
INTO new_table
参数new_table 指定了新建的表的名称.新表的列由SELECT 子句中指定的列构成,新表中的数据行是由WHERE 子句指定的.但假如SELECT 子句中指定了计算列,在新表中对应的列则不是计算列,而是一个实际存储在表中的列,此中的数据由履行SELECT...INTO 语句时计算得出.假如数据库的"Select into/bulk copy" 选项设置为"True/On",则可以用INTO 子句成立表和暂时表,反之,则只能成立暂时表.

10.1.3 FROM 子句
FROM 子句指定需求举行数据查询的表.只要SELECT 子句中有要查询的列,就必须利用FROM 子句.其语法以下:
FROM {<table_source>} [,...n]
<table_source> ::=
table_name [ [AS] table_alias ] [ WITH ( <table_hint> [,...n]) ]
| view_name [ [AS] table_alias ]
| rowset_function [ [AS] table_alias ]
| OPENXML
| derived_table [AS] table_alias [ (column_alias [,...n] ) ]
| <joined_table>
<joined_table> ::=
<table_source> <join_type> <table_source> ON <search_condition>
| <table_source> CROSS JOIN <table_source>
| <joined_table>
<join_type> ::=
[ INNER | { { LEFT | RIGHT | FULL } [OUTER] } ]
[ <join_hint> ]
JOIN
各参数阐明以下:

  • table_source
    指明SELECT 语句要用到的表、视图等数据源.
  • table_name [ [AS] table_alias ]
    指明表名和表的别名.
  • view_name [ [AS] table_alias ]
    指明视图名称和视图的别名.
  • rowset_function [ [AS] table_alias ]
    指明行统计函数和统计列的名称.
  • OPENXML
    供应一个XML 文档的行调集视图.
  • WITH ( [,...n])
    指定一个或多个表提醒.普通sql server 的查询优化器会自动选取最优履行筹划,除非是分外有经验的用户,不然最好不用此选项.关于表提醒table_hint 的设,定请拜见下一章的"删除数据"部份.
  • derived_table [AS] table_alias
    指定一个子查询,从数据库中返回数据行.
  • column_alias
    指明列的别名,用以替换查询后果中的列名.
  • joined_table
    指定由衔接查询生成的查询后果.有关衔接与衔接查询的介绍拜见本章的相关章节.
  • join_type
    指定衔接查询操作的范例.
  • INNER
    指定返回两个表中全部匹配的行.假如没有join_type 选项,此选项就为系统默许.
  • LEFT [OUTER]
    返回衔接查询左边的表中全部的呼应记录,而右表中对应于左表无记录的部份,用NULL 值表示.
  • RIGHT [OUTER]
    返回衔接查询右边的表中全部的呼应记录,而左表中对应于右表无记录的部份,用NULL 值表示.
  • FULL [OUTER]
    返回衔接的两个表中的全部记录.无对应记录的部份用NULL 值表示.
  • join_hint
    指定一个衔接提醒或运算法例.假如指定了此选项,则INNER LEFT RIGHT 或FULL选项必须明确指定.普通SQL Server 的查询优化器会自动选取最优履行筹划,除非是分外有经验的用户,不然最好不用此选项.
    join_hint 的语法以下:
    <join_hint> ::= { LOOP | HASH | MERGE | REMOTE }
    此中LOOP | HASH | MERGE 选项指定查询优化器中的衔接是循环、散列或归并的.REMOTE 选项指定衔接操作由右边的表完成.当左表的数据行少于右表,才能利用REMOTE 选项.当左表和右表都是本地表时,此选项没必要利用.
  • JOIN
    指明特定的表或视图将要被衔接.
  • ON <search_condition>
    指定衔接的条件.
  • CROSS JOIN
    返回两个表穿插查询的后果.
10.1.4 WHERE 子句
WHERE 子句指定数据检索的条件,以限制返回的数据行.其语法以下:
WHERE <search_condition> | <old_outer_join>
<old_outer_join> ::=
column_name { *= | =* } column_name
各参数阐明以下:
search_condition
通过由谓词构成的条件来限制返回的查询后果.
old_outer_join
指定一个外衔接.此选项是不尺度的,但利用便利.它用"*=" 操作符表示左衔接,用"=*" 操作符表示右衔接.此选项与在FROM 子句中指定外衔接都是可行的办法,但二者只能择其一.

注意:假如在WHERE子句中指定一个值为FALSE的条件,则可以用SELECT...INTO语句来成立一个表名差别,但构造和数据范例均和原表相同的表.

10.1.5 GROUP BY 子句
GROUP BY 子句指定查询后果的分组条件.其语法以下;
GROUP BY [ALL] group_by_expression [,...n]
[ WITH { CUBE | ROLLUP } ]
各参数阐明以下:

  • ALL
    返回全部大概的查询后果组合,即便此组合中没有任何满意WHERE 子句的数据.分组的统计列假如不满意查询条件,则将由NULL 值构成其数据.ALL 选项不能与CUBE或ROLLUP 选项同时利用.
    GROUP BY ALL is not supported in queries that Access remote tables.
  • group_by_expression
    指明分组条件.group_by_expression 普通是一个列名,但不能是列的别名.数据范例为TEXT、 NTEXT、 IMAGE 或BIT 范例的列不能作为分组条件.
  • CUBE
    除了返回由GROUP BY 子句指定的列外,还返回按组统计的行.返回的后果先按分组的第一个条件列排序显示,再按第二个条件列排序显示以此类推.统计行包含了GROUPBY 子句指定的列的各种组合的数据统计.
  • ROLLUP
    与CUBE 差别的是,此选项对GROUP BY 子句中的列次序敏感,它只返回第一个分组条件指定的列的统计行.改变列的次序会使返回的后果的行数发生改变.

利用Distinct选项的统计函数,如AVG(DISTINCT column_name)、COUNT(DISTINCT column_name)、和SUM(DISTINCT column_name)等,不能在利用CUBE或ROLLUP选项时利用.

10.1.6 HAVING 子句
HAVING 子句指定分组搜索条件.HAVING 子句普通与GROUP BY 子句一同利用.TEXT、 NTEXT 和IMAGE 数据范例不能用于HAVING 子句.其语法以下:
HAVING <search_condition>
HAVING 子句与WHERE 子句很类似,其辨别在于其作用的对象差别.WHERE 子句作用于表和视图,HAVING 子句作用于组.

10.1.7 UNION 操作符
UNION 操作符将两个或两个以上的查询后果归并为一个后果集.它与利用衔接查询归并两个表的列是差别的.利用UNION 操作符合并查询后果需求遵守两个基本法则:

  • 列的数目温次序在全部查询中必须是一致的;
  • 数据范例必须兼容.
    其语法以下:
    <query specification> | (<query expression>)
    UNION [ALL]
    <query specification | (<query expression>)
    [UNION [ALL] <query specification | (<query expression>) [...n] ]
    各参数阐明以下:
  • <query_specification> | (<query_expression>)
    指明查询的具体阐明或查询表达式.
  • UNION
    归并操作符.
  • ALL
    归并全部数据行到后果中,包含值反复的数据行.假如不指定此选项,则反复的数据行只显示一行.

10.1.8 ORDER BY 子句

ORDER BY 子句指定查询后果的排序方法.其语法以下:
ORDER BY {order_by_expression [ ASC | DESC ] } [,...n]
各参数阐明以下:

  • order_by_expression
    指定排序的法则.order_by_expression 可以是表或视图的列的名称或别名.假如SELECT 语句中没有利用DISTINCT 选项或UNION 操作符.那么ORDER BY 子句中可以包含select list 中没有呈现的列名.或别名ORDER BY 子句中也不能利用TEXT、 NTEXT 和 IMAGE 数据范例.
  • ASC
    指明查询后果按升序布列.这是系统默许值.
  • DESC
    指明查询后果按降序布列.
    注意:Null值被作为最小的值.

10.1.9 COMPUTE 子句
COMPUTE 子句在查询后果的末尾生成一个汇总数据行.其语法以下:
COMPUTE
{ { AVG | COUNT | MAX | MIN | STDEV | STDEVP |VAR | VARP | SUM }
(expression) } [,...n]
[ BY expression [,...n] ]
各参数阐明以下:
    AVG | COUNT | MAX | MIN | STDEV | STDEVP | VAR | VARP | SUM()以上参数与对应的函数有相同的含义.这些函数均会忽视NULL 值,且DISTINCT选项不能在此利用.
    expression
    指定需求统计的列的名称.此列必须包含于SELECT 列表中,且不能用别名.COMPUTE子句中也不能利用TEXT、 NTEXT 和IMAGE 数据范例.
    BY expression
    在查询后果中生成份类统计的行.假如利用此选,项则必须同时利用ORDER BY 子句.expression 是对应的ORDER BY 子句中的order_by_expression 的子集或全集.
    注意:在SELECT子句中利用统计函数,会覆盖COMPUTE子句中的呼应选项.在SELECTINTO语句中不能利用COMPUTE子句.

10.1.10 FOR BROWSE 子句
FOR BROWSE 子句用于读取别的的用户正在举行增添、删除或更新记录的表.其语法以下:
FOR { BROWSE | XML { RAW | AUTO | EXPLICIT }
[ , XMLDATA ]
[ , ELEMENTS ]
[ , BINARY base64 ]
}
各参数阐明以下:
BROWSE
BROWSE 选项指明当查看在利用DB-Library 的客户机利用程序中的数据时,可以更新数据.
利用此子句时对所操作的表有一些限制:
表必须包含一个timestamp 范例的时间标识列;
表必须有一个惟一索引.
注意:
在SELECT语句中:FOR BROWSE子句必须是SELECT语句的最后子句;FOR BROWSE子句不能与UNION操作符同时利用;FOR BROWSE子句不能与表提醒HOLDLOCK选项同时利用.

  • XML
    XML 选项指明查询后果以XML 文档情势返回XML. 情势分为RAW、 AUTO、 EXPLICIT 三种.
  • RAW
    将查询后果每一行转换为以一个普通标识符作为元素标识XML 文档.
  • AUTO
    以简单嵌套的XML 树方法返回查询后果.
  • EXPLICIT
    指定查询后果的XML 树的情势被明肯定义的.
  • XMLDATA
    返回概要信息.它是附加在文档上返回的.
  • ELEMENTS
    指明列将以子元素的方法返回.
  • BINARY base 64
    指定查询返回的以base64 格局编码的二进制数据.
  • 10.1.11 OPTION 子句
    OPTION 子句用于指定在整个查询历程中的查询提醒(Query Hint).普通,用户没必要利用OPTION 子句,因为查询优化器会自动挑选一个最佳的查询筹划.OPTION 子句必须由最外层的主查询来指定.各查询提醒之间应利用逗号离隔.其语法以下:
    OPTION (<query_hint> [,...n] )
    <query_hint> ::=
    { { HASH | ORDER } GROUP
    | { CONCAT | HASH | MERGE } UNION
    | { LOOP | MERGE | HASH } JOIN
    | FAST number_rows
    | FORCE ORDER
    | MAXDOP number
    | ROBUST PLAN
    | KEEP PLAN
    | KEEPFIXED PLAN
    | EXPAND VIEWS
    }
    各参数阐明以下:
  • {HASH | ORDER} GROUP
    指定在GROUP BY 或COMPUTE 子句中指定的查询利用散列法或排序法.所谓散列法是指为存储和检索数据项或数据,把搜索关键字转换为一个地址的一种办法.该办法常作为数据集内的记录的一种算法,可以使记录分组均匀,削减搜索时间.
  • {MERGE | HASH | CONCAT} UNION
    指定全部的UNION 操作符采取归并(Merge)、散列(Hash) 或衔接(Concatenate)的办法履行操作.假如指定了多个UNION 提醒,查询优化器会挑选一个最佳的提醒筹划.
  • {LOOP | MERGE | HASH |} JOIN
    指定查询历程中的全部衔接操作采纳循环衔接(Loop Join)、归并衔接(Merge Join)或散列衔接(Hash Join) 的办法.假如指定了多个JOIN 提醒,查询优化器会挑选一个最佳的提醒筹划.
  • FAST number_rows
    指定查询优化只用于疾速返回前number_rows 行数据,在number_rows 行今后的数据采取原查询办法.
  • FORCE ORDER
    指定在查询语法中阐明的衔接次序在查询优化的历程中保持不变.
  • MAXDOP number
    忽视由Sp_configure 设定的针对查询的最大并行线程数目.
  • ROBUST PLAN
    强迫查询优化器尝试利用最大行容量的筹划.
  • KEEP PLAN
    强迫查询优化器放松重新编译查询的阈值.指定此选项可以让一个表被多次更新而没必要频繁地重新编译查询.
  • KEEPFIXED PLAN
    强迫查询优化器不重新编译查询.这样只有当表的概要改变或履行Sp_recompile 存储历程时,才会重新编译查询.
  • EXPAND VIEWS
    扩大索引化视图(当一个视图的名称在查询文本中被视图定义替换时称这个视图被扩大了),并且查询优化器不再将索引化视图作为查询的某部份的替换品.假如视牟利用了WITH (NOEXPAND) 阐明,则不能被扩大.
注意:SELECT语句中各子句的布列次序是很重要的,子句必须依呼应的次序来利用.
      当用SELECT号令读取TEXT和IMAGE范例数据时,一次所能读取的数据受限于@@TE-XTSIZE全局变量的值.
      可以用SET TEXTSIZE号令来更改它.@@TEXTSIZE的初始值为4K,最大为231-1(2,147,483,647)个字节.   以上是“SQL Server数据库技术(55)[MSSQL防范]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
  • Windows 搭配 IIS7 PHP MySQL 环境
  • sqlserver索引的原理及索引成立的注意事项小结
  • SQL Join的一些总结(实例)
  • SQL的Join利用图解教程
  • SQL中JOIN和UNION辨别、用法及示例介绍
  • 关于SQL中CTE(公用表表达式)(Common Table Expression)的总结
  • mysql Out of memory (Needed 16777224 bytes)的错误办理
  • mysql提醒[Warning] Invalid (old?) table or database name问题的办理办法
  • mysql启用skip-name-resolve情势时呈现Warning的处理办法
  • mysql启用skip-name-resolve情势时呈现Warning的处理办法
  • MySQL Order By语法介绍
  • <b>MySQL ORDER BY 的实现解析</b>
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .