MSSQL教程之数据库常识―SQL查询语句精髓利用扼要
这章描述如何检查和处理在MySQL数据库中的数据损坏。如果你的表损坏很多,你应该尝试找出其原因!见G.1调试一个MySQL服务器。精髓|数据|数据库|语句1、复杂查询 复杂的Transact-SQL查询只包含选择列表、FROM子句和WHERE子句。它们分离申明所查询列、查询的表或视图、和搜刮前提等。 比方,上面的语句查询testtable表中姓名为“张三”的nickname字段和email字段。 SELECTnickname,email FROMtesttable WHEREname=张三 (一)选择列表 选择列表(select_list)指出所查询列,它能够是一组列名列表、星号、表达式、变量(包含部分变量和全局变量)等组成。 1、选择一切列 比方,上面语句显现testtable表中一切列的数据: SELECT* FROMtesttable 2、选择部排列并指定它们的显现序次 查询了局汇合中数据的分列按次与选择列表中所指定的列名分列按次不异。 比方: SELECTnickname,email FROMtesttable 3、变动列题目 在选择列表中,可从头指定列题目。界说格局为: 列题目=列名 列名列题目 假如指定的列题目不是尺度的标识符格局时,应利用引号定界符,比方,以下语句利用汉字显现列题目: SELECT昵称=nickname,电子邮件=email FROMtesttable 4、删除反复行 SELECT语句中利用ALL或DISTINCT选项来显现表中切合前提的一切行或删除个中反复的数据行,默许为ALL。利用DISTINCT选项时,关于一切反复的数据行在SELECT前往的了局汇合中只保存一行。 5、限定前往的行数 利用TOPn选项限定前往的数据行数,TOPn申明前往n行,而TOPnPERCENT时,申明n是暗示一百分数,指定前往的行数即是总行数的百分之几。 比方: SELECTTOP2* FROMtesttable SELECTTOP20PERCENT* FROMtesttable (二)FROM子句 FROM子句指定SELECT语句查询及与查询相干的表或视图。在FROM子句中最多可指定256个表或视图,它们之间用逗号分开。 在FROM子句同时指定多个表或视图时,假如选择列表中存在同名列,这时候应利用工具名限制这些列所属的表或视图。比方在usertable和citytable表中同时存在cityid列,在查询两个表中的cityid时应利用上面语句格局加以限制: SELECTusername,citytable.cityid FROMusertable,citytable WHEREusertable.cityid=citytable.cityid 在FROM子句中可用以下两种格局为表或视图指定别号: 表名as别号 表名别号 (二)FROM子句 FROM子句指定SELECT语句查询及与查询相干的表或视图。在FROM子句中最多可指定256个表或视图,它们之间用逗号分开。 在FROM子句同时指定多个表或视图时,假如选择列表中存在同名列,这时候应利用工具名限制这些列所属的表或视图。比方在usertable和citytable表中同时存在cityid列,在查询两个表中的cityid时应利用上面语句格局加以限制: SELECTusername,citytable.cityid FROMusertable,citytable WHEREusertable.cityid=citytable.cityid 在FROM子句中可用以下两种格局为表或视图指定别号: 表名as别号 表名别号 比方下面语句可用表的别号格局暗示为: SELECTusername,b.cityid FROMusertablea,citytableb WHEREa.cityid=b.cityid SELECT不但能从表或视图中检索数据,它还可以从别的查询语句所前往的了局汇合中查询数据。 比方: SELECTa.au_fname+a.au_lname FROMauthorsa,titleauthorta (SELECTtitle_id,title FROMtitles WHEREytd_sales>10000 )ASt WHEREa.au_id=ta.au_id ANDta.title_id=t.title_id 此例中,将SELECT前往的了局汇合赐与一别号t,然后再从中检索数据。 (三)利用WHERE子句设置查询前提 WHERE子句设置查询前提,过滤失落不必要的数据行。比方上面语句查询岁数年夜于20的数据: SELECT* FROMusertable WHEREage>20 WHERE子句可包含各类前提运算符: 对照运算符(巨细对照):>、>=、=、<、<=、、!>、!< 局限运算符(表达式值是不是在指定的局限):BETWEEN…AND… NOTBETWEEN…AND… 列表运算符(判别表达式是不是为列表中的指定项):IN(项1,项2……) NOTIN(项1,项2……) 形式婚配符(判别值是不是与指定的字符通配格局符合):LIKE、NOTLIKE 空值判别符(判别表达式是不是为空):ISNULL、NOTISNULL 逻辑运算符(用于多前提的逻辑毗连):NOT、AND、OR 1、局限运算符例:ageBETWEEN10AND30相称于age>=10ANDage<=30 2、列表运算符例:countryIN(Germany,China) 3、形式婚配符例:经常使用于含混查找,它判别列值是不是与指定的字符串格局相婚配。可用于char、varchar、text、ntext、datetime和smalldatetime等范例查询。 可以使用以下通配字符: 百分号%:可婚配恣意范例和长度的字符,假如是中文,请利用两个百分号即%%。 下划线_:婚配单个恣意字符,它经常使用来限定表达式的字符长度。 方括号[]:指定一个字符、字符串或局限,请求所婚配工具为它们中的任一个。[^]:其取值也[]不异,但它请求所婚配工具为指定字符之外的任一个字符。 比方: 限定以Publishing开头,利用LIKE%Publishing 限定以A开首:LIKE% 限定以A开首外:LIKE[^A]% 4、空值判别符例WHEREageISNULL 5、逻辑运算符:优先级为NOT、AND、OR (四)查询了局排序 利用ORDERBY子句对查询前往的了局按一列或多列排序。ORDERBY子句的语法格局为: ORDERBY{column_name}[,…n] 个中ASC暗示升序,为默许值,DESC为降序。ORDERBY不克不及按ntext、text和image数据范例举行排 序。 比方: SELECT* FROMusertable ORDERBYagedesc,useridASC 别的,能够依据表达式举行排序。 2、团结查询 UNION运算符能够将两个或两个以上上SELECT语句的查询了局汇合兼并成一个了局汇合显现,即实行团结查询。UNION的语法格局为: select_statement UNIONselectstatement selectstatement][…n] 个中selectstatement为待团结的SELECT查询语句。 ALL选项暗示将一切行兼并到了局汇合中。不指定该项时,被团结查询了局汇合中的反复即将只保存一行。 团结查询时,查询了局的列题目为第一个查询语句的列题目。因而,要界说列题目必需在第一个查询语句中界说。要春联合查询了局排序时,也必需利用第一查询语句中的列名、列题目大概列序号。 在利用UNION运算符时,应包管每一个团结查询语句的选择列表中有不异数目的表达式,而且每一个查询选择表达式应具有不异的数据范例,或是能够主动将它们转换为不异的数据范例。在主动转换时,关于数值范例,体系将低精度的数据范例转换为高精度的数据范例。 在包含多个查询的UNION语句中,其实行按次是自左至右,利用括号能够改动这一实行按次。比方: 查询1UNION(查询2UNION查询3) 3、毗连查询 经由过程毗连运算符能够完成多个表查询。毗连是干系数据库模子的次要特性,也是它区分于别的范例数据库办理体系的一个标记。 在干系数据库办理体系中,表创建时各数据之间的干系不用断定,常把一个实体的一切信息寄存在一个表中。当检索数据时,经由过程毗连操纵查询出寄存在多个表中的分歧实体的信息。毗连操纵给用户带来很年夜的天真性,他们能够在任什么时候候增添新的数据范例。为分歧实体创立新的表,此后经由过程毗连举行查询。 毗连能够在SELECT语句的FROM子句或WHERE子句中创建,貌同实异在FROM子句中指出毗连时有助于将毗连操纵与WHERE子句中的搜刮前提辨别开来。以是,在Transact-SQL中保举利用这类办法。 SQL-92尺度所界说的FROM子句的毗连语法格局为: FROMjoin_tablejoin_typejoin_table 个中join_table指出介入毗连操纵的表名,毗连能够对统一个表操纵,也能够对多表操纵,对统一个表操纵的毗连又称做自毗连。 join_type指出毗连范例,可分为三种:内毗连、外毗连和交织毗连。内毗连(INNERJOIN)利用对照运算符举行表间某(些)列数据的对照操纵,并列出这些表中与毗连前提相婚配的数据行。依据所利用的对照体例分歧,内毗连又分为等值毗连、天然毗连和不等毗连三种。外毗连分为左外毗连(LEFTOUTERJOIN或LEFTJOIN)、右外毗连(RIGHTOUTERJOIN或RIGHTJOIN)和全外毗连(FULLOUTERJOIN或FULLJOIN)三种。与内毗连分歧的是,外毗连不但列出与毗连前提相婚配的行,而是列出左表(左外毗连时)、右表(右外毗连时)或两个表(全外毗连时)中一切切合搜刮前提的数据行。 交织毗连(CROSSJOIN)没有WHERE子句,它前往毗连表中一切数据行的笛卡尔积,其了局汇合中的数据行数即是第一个表中切合查询前提的数据行数乘以第二个表中切合查询前提的数据行数。 毗连操纵中的ON(join_condition)子句指出毗连前提,它由被毗连表中的列和对照运算符、逻辑运算符等组成。 不管哪一种毗连都不克不及对text、ntext和image数据范例列举行间接毗连,但能够对这三种列举行直接毗连。比方: SELECTp1.pub_id,p2.pub_id,p1.pr_info FROMpub_infoASp1INNERJOINpub_infoASp2 ONDATALENGTH(p1.pr_info)=DATALENGTH(p2.pr_info) (一)内毗连 内毗连查询操纵列出与毗连前提婚配的数据行,它利用对照运算符对照被毗连列的列值。内毗连分三种: 1、等值毗连:在毗连前提中利用即是号(=)运算符对照被毗连列的列值,其查询了局中列出被毗连表中的一切列,包含个中的反复列。 2、不等毗连:在毗连前提利用除即是运算符之外的别的对照运算符对照被毗连的列的列值。这些运算符包含>、>=、<=、<、!>、!<和。 3、天然毗连:在毗连前提中利用即是(=)运算符对照被毗连列的列值,但它利用选择列表指出查询了局汇合中所包含的列,并删除毗连表中的反复列。 例,上面利用等值毗连列出authors和publishers表中位于统一乡村的作者和出书社: SELECT* FROMauthorsASaINNERJOINpublishersASp ONa.city=p.city 又如利用天然毗连,在选择列表中删除authors和publishers表中反复列(city和state): SELECTa.*,p.pub_id,p.pub_name,p.country FROMauthorsASaINNERJOINpublishersASp ONa.city=p.city (二)外毗连 内毗连时,前往查询了局汇合中的仅是切合查询前提(WHERE搜刮前提或HAVING前提)和毗连前提的行。而接纳外毗连时,它前往到查询了局汇合中的不但包括切合毗连前提的行,并且还包含左表(左外毗连时)、右表(右外毗连时)或两个边接表(全外毗连)中的一切数据行。以下面利用左外毗连将论坛内容和作者信息毗连起来: SELECTa.*,b.*FROMluntanLEFTJOINusertableasb ONa.username=b.username 上面利用全外毗连将city表中的一切作者和user表中的一切作者,和他们地点的乡村: SELECTa.*,b.* FROMcityasaFULLOUTERJOINuserasb ONa.username=b.username (三)交织毗连 交织毗连不带WHERE子句,它前往被毗连的两个表一切数据行的笛卡尔积,前往到了局汇合中的数据行数即是第一个表中切合查询前提的数据行数乘以第二个表中切合查询前提的数据行数。例,titles表中有6类图书,而publishers表中有8家出书社,则以下交织毗连检索到的纪录数将即是6*8=48行。 SELECTtype,pub_name FROMtitlesCROSSJOINpublishers ORDERBYtype 优化的SQL查询算法,有效地提高查询速度 原理很简单,对要求长时间计算某一时间点的报表生成和防用户操作错误很有帮助。但是比起Oracle10g的闪回技术还是细粒度不够。可惜! 连做梦都在想页面结构是怎么样的,绝非虚言 总感觉自己还是不会SQL 而写到本地,我又考虑到效率问题.大家来讨论讨论吧,分数不打紧,就给10分,十全十美,没啥对错,各抒己见,但是要有说服力的哦~ 索引视图2k就有。但是2005对其效率作了一些改进但是schema.viewname的作用域真是太限制了它的应用面。还有一大堆的环境参数和种种限制都让人对它有点却步。 至于淘汰的问题,只能说在你的项目周期之内,微软应该都不会倒闭。 sqlserver的痛苦之处在于有用文档的匮乏,很多只是表明的东西
页:
[1]