仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 656|回复: 8
打印 上一主题 下一主题

[学习教程] MSSQL网页设计数据查询--SELECT语句

[复制链接]
活着的死人 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:19:36 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
刚安装好的MySql包含一个含空密码的root帐户和一个匿名帐户,这是很大的安全隐患,对于一些重要的应用我们应将安全性尽可能提高,在这里应把匿名帐户删除、root帐户设置密码数据库是为更便利无效地办理信息而存在的人们,但愿数据库能够随时供应所必要的数据信息。因而,对用户来讲,数据查询是数据
库最主要的功效。本章将报告数据查询的完成办法。

在数据库中,数据查询是经由过程SELECT语句来完成的。SELECT语句能够从数据库中按用户请求检索数据,并将查询了局以表格的情势前往。我们在“Transact-SQL言语”章节及后面的章节中已开端打仗到了SELECT语句的一些用法,在本章中将分类报告其详细用法。

本节报告SELECT语句完全的锓峁梗馐且桓龇浅H叱ぁ⒖菰锏墓獭6琳呖?以跳过本节,从第二节入手下手浏览,而将本节作为了解、编写查询语句的语法参考材料。SELECT语句完全的语法布局以下:
SELECTstatement::=
<query_expression>
[ORDERBY{order_by_expression|column_position[ASC|DESC]}[,...n]]
[COMPUTE{{AVG|COUNT|MAX|MIN|SUM}(expression)}[,...n]
[BYexpression[,...n]]]
[FOR{BROWSE|XML{RAW|AUTO|EXPLICIT}
[,XMLDATA]
[,ELEMENTS]
[,BINARYbase64]}
[OPTION(<query_hint>[,...n])]
<queryexpression>::=
{<queryspecification>|(<queryexpression>)}
[UNION[ALL]<queryspecification|(<queryexpression>)[...n]]
<queryspecification>::=
SELECT[ALL|DISTINCT]
[{TOPinteger|TOPintegerPERCENT}[WITHTIES]]
<select_list>
[INTOnew_table]
[FROM{<table_source>}[,...n]]
[WHERE<search_condition>]
[GROUPBY[ALL]group_by_expression[,...n]
[WITH{CUBE|ROLLUP}]]
[HAVING<search_condition>]
因为SELECT语句出格庞大,上述布局还不克不及完整申明其用法,因而我们将它拆分为多少部分来说述。

10.1.1SELECT子句
SELECT子句指定必要经由过程查询前往的表的列,其语法以下:
SELECT[ALL|DISTINCT]
[TOPn[PERCENT][WITHTIES]]
<select_list>
<select_list>::=
{*
|{table_name|view_name|table_alias}.*
|{column_name|expression|IDENTITYCOL|ROWGUIDCOL}
[[AS]column_alias]
|column_alias=expression
}[,...n]
各参数申明以下:<P>

  • ALL
    指明查询了局中能够显现值不异的列。ALL是体系默许的。
  • DISTINCT
    指明查询了局中假如有值不异的列,则只显现个中的一列。对DISTINCT选项来讲,Null值被以为是不异的值。
  • TOPn[PERCENT]
    指定前往查询了局的前n行数据。假如PERCENT关头字指定的话,则前往查询了局的前百分之n行数据。
  • WITHTIES
    此选项只能在利用了ORDERBY子句后才干利用当指定此项时,除前往由TOPn(PERCENT)指定的数据行外,还要前往与TOPn(PERCENT)前往的最初一行纪录中由ORDERBY子句指定的列的列值不异的数据行。
  • 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可用于ORDERBY子句,但不克不及用于WHEREGROUPBY或HAVING子句假如查询是游标声明命令DECLARECURSOR的一部分,则column_alias还不克不及用于FORUPDATE子句(有关游标的先容请拜见“游标和视图”章节)。
10.1.2INTO子句
INTO子句用于把查询了局寄存到一个新建的表中。SELECT...INTO句式不克不及与COMPUTE子句一同利用。其语法以下:
INTOnew_table
参数new_table指定了新建的表的称号。新表的列由SELECT子句中指定的列组成,新表中的数据行是由WHERE子句指定的。但假如SELECT子句中指定了盘算列,在新表中对应的列则不是盘算列,而是一个实践存储在表中的列,个中的数据由实行SELECT...INTO语句时盘算得出。假如数据库的“Selectinto/bulkcopy”选项设置为“True/On”,则能够用INTO子句创立表和一时表,反之,则只能创立一时表。

10.1.3FROM子句
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>CROSSJOIN<table_source>
|<joined_table>
<join_type>::=
[INNER|{{LEFT|RIGHT|FULL}[OUTER]}]
[<join_hint>]
JOIN
各参数申明以下:<P>

  • table_source
    指明SELECT语句要用到的表、视图等数据源。
  • table_name[[AS]table_alias]
    指明表名和表的别号。
  • view_name[[AS]table_alias]
    指明视图称号和视图的别号。
  • rowset_function[[AS]table_alias]
    指明行统计函数和统计列的称号。
  • OPENXML
    供应一个XML文档的行汇合视图。
  • WITH([,...n])
    指定一个或多个表提醒。一般SQLServer的查询优化器会主动拔取最优实行企图,除非是出格有履历的用户,不然最好不必此选项。关于表提醒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
    指定一个毗连提醒或运算法例。假如指定了此选项,则INNERLEFTRIGHT或FULL选项必需明白指定。一般SQLServer的查询优化器会主动拔取最优实行企图,除非是出格有履历的用户,不然最好不必此选项。
    join_hint的语法以下:
    <join_hint>::={LOOP|HASH|MERGE|REMOTE}
    个中LOOP|HASH|MERGE选项指定查询优化器中的毗连是轮回、散列或兼并的。REMOTE选项指定毗连操纵由右侧的表完成。当左表的数据行少于右表,才干利用REMOTE选项。当左表和右表都是当地表时,此选项不用利用。
  • JOIN
    指明特定的表或视图将要被毗连。
  • ON<search_condition>
    指定毗连的前提。
  • CROSSJOIN
    前往两个表交织查询的了局。
10.1.4WHERE子句
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.5GROUPBY子句
GROUPBY子句指定查询了局的分组前提。其语法以下;
GROUPBY[ALL]group_by_expression[,...n]
[WITH{CUBE|ROLLUP}]
各参数申明以下:
<P>

  • ALL
    前往一切大概的查询了局组合,即便此组合中没有任何满意WHERE子句的数据。分组的统计列假如不满意查询前提,则将由NULL值组成其数据。ALL选项不克不及与CUBE或ROLLUP选项同时利用。
    GROUPBYALLisnotsupportedinqueriesthataccessremotetables.
  • group_by_expression
    指明分组前提。group_by_expression一般是一个列名,但不克不及是列的别号。数据范例为TEXT、NTEXT、IMAGE或BIT范例的列不克不及作为分组前提。
  • CUBE
    除前往由GROUPBY子句指定的列外,还前往按组统计的行。前往的了局先按分组的第一个前提列排序显现,再按第二个前提列排序显现以此类推。统计行包含了GROUPBY子句指定的列的各类组合的数据统计。
  • ROLLUP
    与CUBE分歧的是,此选项对GROUPBY子句中的列按次敏感,它只前往第一个分组前提指定的列的统计行。改动列的按次会使前往的了局的行数产生变更。

利用Distinct选项的统计函数,如AVG(DISTINCTcolumn_name)、COUNT(DISTINCTcolumn_name)、和SUM(DISTINCTcolumn_name)等,不克不及在利用CUBE或ROLLUP选项时利用。

10.1.6HAVING子句
HAVING子句指定分组搜刮前提。HAVING子句一般与GROUPBY子句一同利用。TEXT、NTEXT和IMAGE数据范例不克不及用于HAVING子句。其语法以下:
HAVING<search_condition>
HAVING子句与WHERE子句很类似,其区分在于其感化的工具分歧。WHERE子句感化于表和视图,HAVING子句感化于组。

10.1.7UNION操纵符
UNION操纵符将两个或两个以上的查询了局兼并为一个了局集。它与利用毗连查询兼并两个表的列是分歧的。利用UNION操纵切合并查询了局必要遵守两个基础划定规矩:<P>

  • 列的数量温柔序在一切查询中必需是分歧的;
  • 数据范例必需兼容。
    其语法以下:
    <queryspecification>|(<queryexpression>)
    UNION[ALL]
    <queryspecification|(<queryexpression>)
    [UNION[ALL]<queryspecification|(<queryexpression>)[...n]]
    各参数申明以下:
  • <query_specification>|(<query_expression>)
    指明查询的具体申明或查询表达式。
  • UNION
    兼并操纵符。
  • ALL
    兼并一切数据行到了局中,包含值反复的数据行。假如不指定此选项,则反复的数据行只显现一行。

10.1.8ORDERBY子句
ORDERBY子句指定查询了局的排序体例。其语法以下:
ORDERBY{order_by_expression[ASC|DESC]}[,...n]
各参数申明以下:<P>

  • order_by_expression
    指定排序的划定规矩。order_by_expression能够是表或视图的列的称号或别号。假如SELECT语句中没有利用DISTINCT选项或UNION操纵符。那末ORDERBY子句中能够包括selectlist中没有呈现的列名。或别号ORDERBY子句中也不克不及利用TEXT、NTEXT和IMAGE数据范例。
  • ASC
    指明查询了局按升序分列。这是体系默许值。
  • DESC
    指明查询了局按降序分列。
    注重:Null值被作为最小的值。

10.1.9COMPUTE子句
COMPUTE子句在查询了局的开端天生一个汇总数据行。其语法以下:
COMPUTE
{{AVG|COUNT|MAX|MIN|STDEV|STDEVP|VAR|VARP|SUM}
(expression)}[,...n]
[BYexpression[,...n]]
各参数申明以下:
AVG|COUNT|MAX|MIN|STDEV|STDEVP|VAR|VARP|SUM()以上参数与对应的函数有不异的寄义。这些函数均会疏忽NULL值,且DISTINCT选项不克不及在此利用。
expression
指定必要统计的列的称号。此列必需包括于SELECT列表中,且不克不及用别号。COMPUTE子句中也不克不及利用TEXT、NTEXT和IMAGE数据范例。
BYexpression
在查询了局中天生分类统计的行。假如利用此选,项则必需同时利用ORDERBY子句。expression是对应的ORDERBY子句中的order_by_expression的子集或选集。
注重:在SELECT子句中利用统计函数,会掩盖COMPUTE子句中的响应选项。在SELECTINTO语句中不克不及利用COMPUTE子句。

10.1.10FORBROWSE子句
FORBROWSE子句用于读取别的的用户正在举行增加、删除或更新纪录的表。其语法以下:
FOR{BROWSE|XML{RAW|AUTO|EXPLICIT}
[,XMLDATA]
[,ELEMENTS]
[,BINARYbase64]
}
各参数申明以下:
BROWSE
BROWSE选项指明当检察在利用DB-Library的客户机使用程序中的数据时,能够更新数据。
利用此子句时对所操纵的表有一些限定:
表必需包括一个timestamp范例的工夫标识列;
表必需有一个唯一索引。
注重:
在SELECT语句中:FORBROWSE子句必需是SELECT语句的最初子句;FORBROWSE子句不克不及与UNION操纵符同时利用;FORBROWSE子句不克不及与表提醒HOLDLOCK选项同时利用。<P>

  • XML
    XML选项指明查询了局以XML文档形式前往XML。形式分为RAW、AUTO、EXPLICIT三种。
  • RAW
    将查询了局每行转换为以一个一般标识符作为元素标识XML文档。
  • AUTO
    以复杂嵌套的XML树体例前往查询了局。
  • EXPLICIT
    指定查询了局的XML树的情势被明白界说的。
  • XMLDATA
    前往提要信息。它是附加在文档上前往的。
  • ELEMENTS
    指明列将以子元素的体例前往。
  • BINARYbase64
    指定查询前往的以base64格局编码的二进制数据。
  • 10.1.11OPTION子句
    OPTION子句用于指定在全部查询过程当中的查询提醒(QueryHint)。一般,用户不用利用OPTION子句,由于查询优化器会主动选择一个最好的查询企图。OPTION子句必需由最外层的主查询来指定。各查询提醒之间应利用逗号离隔。其语法以下:
    OPTION(<query_hint>[,...n])
    <query_hint>::=
    {{HASH|ORDER}GROUP
    |{CONCAT|HASH|MERGE}UNION
    |{LOOP|MERGE|HASH}JOIN
    |FASTnumber_rows
    |FORCEORDER
    |MAXDOPnumber
    |ROBUSTPLAN
    |KEEPPLAN
    |KEEPFIXEDPLAN
    |EXPANDVIEWS
    }
    各参数申明以下:
  • {HASH|ORDER}GROUP
    指定在GROUPBY或COMPUTE子句中指定的查询利用散列法或排序法。所谓散列法是指为存储和检索数据项或数据,把搜刮关头字转换为一个地点的一种办法。该办法常作为数据集内的纪录的一种算法,可使纪录分组匀称,削减搜刮工夫。
  • {MERGE|HASH|CONCAT}UNION
    指定一切的UNION操纵符接纳兼并(Merge)、散列(Hash)或毗连(Concatenate)的办法实行操纵。假如指定了多个UNION提醒,查询优化器会选择一个最好的提醒计划。
  • {LOOP|MERGE|HASH|}JOIN
    指定查询过程当中的一切毗连操纵接纳轮回毗连(LoopJoin)、兼并毗连(MergeJoin)或散列毗连(HashJoin)的办法。假如指定了多个JOIN提醒,查询优化器会选择一个最好的提醒计划。
  • FASTnumber_rows
    指定查询优化只用于敏捷前往前number_rows行数据,在number_rows行今后的数据接纳原查询办法。
  • FORCEORDER
    指定在查询语法中申明的毗连按次在查询优化的过程当中坚持稳定。
  • MAXDOPnumber
    疏忽由Sp_configure设定的针对查询的最年夜并行线程数量。
  • ROBUSTPLAN
    强迫查询优化器实验利用最年夜行容量的企图。
  • KEEPPLAN
    强迫查询优化器抓紧从头编译查询的阈值。指定此选项可让一个表被屡次更新而不用频仍地从头编译查询。
  • KEEPFIXEDPLAN
    强迫查询优化器不从头编译查询。如许只要当表的提要改动或实行Sp_recompile存储历程时,才会从头编译查询。
  • EXPANDVIEWS
    扩大索引化视图(当一个视图的称号在查询文本中被视图界说交换时称这个视图被扩大了),而且查询优化器不再将索引化视图作为查询的某部分的替换品。假如视图利用了WITH(NOEXPAND)申明,则不克不及被扩大。
注重:SELECT语句中各子句的分列序次是很主要的,子句必需依响应的序次来利用。
当用SELECT命令读取TEXT和IMAGE范例数据时,一次所能读取的数据受限于@@TE-XTSIZE全局变量的值。
能够用SETTEXTSIZE命令来变动它。@@TEXTSIZE的初始值为4K,最年夜为231-1(2,147,483,647)个字节。根据Ambrose所说,Sakila来自一种叫SiSwati的斯威士兰方言,也是在Ambrose的家乡乌干达附近的坦桑尼亚的Arusha的一个小镇的名字。
活着的死人 该用户已被删除
沙发
 楼主| 发表于 2015-1-19 08:43:14 | 只看该作者
varchar(max)\\\\nvarchar(max)类型的引入大大的提高了编程的效率,可以使用字符串函数对CLOB类型进行操作,这是一个亮点。
柔情似水 该用户已被删除
板凳
发表于 2015-1-24 19:16:26 | 只看该作者
备份方面可能还是一个老大难的问题。不能单独备份几个表总是感觉不爽。灵活备份的问题不知道什么时候才能解决。
谁可相欹 该用户已被删除
地板
发表于 2015-2-2 12:43:26 | 只看该作者
可能有的朋友会抱怨集成的orderby,其实如果使用ranking函数,Orderby是少不了的。如果担心Orderby会影响效率,可以为orderby的字段建立聚集索引,查询计划会忽略orderby操作(因为本来就是排序的嘛)。
山那边是海 该用户已被删除
5#
发表于 2015-2-7 20:15:52 | 只看该作者
从底层原理到表层引用,书籍多的很。个人认为没有什么那本书好?这样的说法。主要看和个人的学习方法是否适合。
金色的骷髅 该用户已被删除
6#
发表于 2015-2-23 10:24:20 | 只看该作者
从项目平台的选择上讲,我们关心的,应该是一款产品能不能满足任务需求,而不是网上怎么说。
简单生活 该用户已被删除
7#
发表于 2015-3-7 08:05:27 | 只看该作者
一个是把SQL语句写到客户端,可以使用DataSet进行加工;
再见西城 该用户已被删除
8#
发表于 2015-3-14 15:58:49 | 只看该作者
呵呵,这就是偶想说的
莫相离 该用户已被删除
9#
发表于 2015-3-21 12:16:47 | 只看该作者
数据库物理框架没有变动undo和redo都放在数据库得transaction中,个人感觉是个败笔。如果说我们在设计数据库的时候考虑分多个数据库,可能能在一定程度上避免I/O效率问题。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2025-1-10 06:06

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表