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

SQL查询语句精华利用扼要[MSSQL防范]

赞助商链接



  本文“SQL查询语句精华利用扼要[MSSQL防范]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:

1、 简单查询

  简单的Transact-SQL查询只包含挑选列表、FROM子句和WHERE子句.它们辨别阐明所查询列、查询的表或视图、以及搜索条件等.
  比方,下面的语句查询testtable表中姓名为"张三"的nickname字段和email字段.

  SELECT nickname,email
  FROM testtable
  WHERE name='张三'

  (一) 挑选列表

  挑选列表(select_list)指出所查询列,它可以是一组列名列表、星号、表达式、变量(包含部分变量和全局变量)等构成.

  1、挑选全部列

  比方,下面语句显示testtable表中全部列的数据:

  SELECT *
  FROM testtable

  2、挑选部份列并指定它们的显示次序

  查询后果调集合数据的布列次序与挑选列表中所指定的列名布列次序相同.
  比方:

  SELECT nickname,email
  FROM testtable

  3、更改列标题

  在挑选列表中,可重新指定列标题.定义格局为:
  列标题=列名
  列名 列标题
  假如指定的列标题不是尺度的标识符格局时,应利用引号定界符,比方,下列语句利用汉字显示列标题:

  SELECT 昵称=nickname,电子邮件=email
  FROM testtable

  4、删除反复行

  SELECT语句中利用ALL或DISTINCT选项来显示表中符合条件的全部行或删除此中反复的数据行,默许为ALL.利用DISTINCT选项时,关于全部反复的数据行在SELECT返回的后果调集合只保存一行.

  5、限制返回的行数

  利用TOP n [PERCENT]选项限制返回的数据行数,TOP n阐明返回n行,而TOP n PERCENT时,阐明n是表示一百分数,指定返回的行数等于总行数的百分之几.
  比方:

  SELECT TOP 2 *
  FROM testtable
  SELECT TOP 20 PERCENT *
  FROM testtable

  (二)FROM子句

  FROM子句指定SELECT语句查询及与查询相关的表或视图.在FROM子句中最多可指定256个表或视图,它们之间用逗号脱离.
  在FROM子句同时指定多个表或视图时,假如挑选列表中存在同名列,这时应利用对象名限定这些列所属的表或视图.比方在usertable和citytable表中同时存在cityid列,在查询两个表中的cityid时应利用下面语句格局加以限定:

  SELECT username,citytable.cityid
  FROM usertable,citytable
  WHERE usertable.cityid=citytable.cityid

  在FROM子句中可用以下两种格局为表或视图指定别名:
  表名 as 别名
  表名 别名

  (二) FROM子句

  FROM子句指定SELECT语句查询及与查询相关的表或视图.在FROM子句中最多可指定256个表或视图,它们之间用逗号脱离.
  在FROM子句同时指定多个表或视图时,假如挑选列表中存在同名列,这时应利用对象名限定这些列所属的表或视图.比方在usertable和citytable表中同时存在cityid列,在查询两个表中的cityid时应利用下面语句格局加以限定:

  SELECT username,citytable.cityid
  FROM usertable,citytable
  WHERE usertable.cityid=citytable.cityid

  在FROM子句中可用以下两种格局为表或视图指定别名:
  表名 as 别名
  表名 别名
  比方上面语句可用表的别名格局表示为:

  SELECT username,b.cityid
  FROM usertable a,citytable b
  WHERE a.cityid=b.cityid

  SELECT不但能从表或视图中检索数据,它还可以从别的查询语句所返回的后果调集合查询数据.

  比方:

  SELECT a.au_fname+a.au_lname
  FROM authors a,titleauthor ta
  (SELECT title_id,title
  FROM titles
  WHERE ytd_sales>10000
  ) AS t
  WHERE a.au_id=ta.au_id
  AND ta.title_id=t.title_id

  此例中,将SELECT返回的后果调集赐与一别名t,然后再从中检索数据.

  (三) 利用WHERE子句设置查询条件

  WHERE子句设置查询条件,过滤掉不需求的数据行.比方下面语句查询年纪大于20的数据:

  SELECT *
  FROM usertable
  WHERE age>20

  WHERE子句可包含各种条件运算符:
  对比运算符(大小对比):>、>=、=、<、<=、<>、!>、!<
  范围运算符(表达式值能否在指定的范围):BETWEEN…AND…
  NOT BETWEEN…AND…
  列表运算符(判断表达式能否为列表中的指定项):IN (项1,项2……)
  NOT IN (项1,项2……)
  情势匹配符(判断值能否与指定的字符通配格局符合):LIKE、NOT LIKE
  空值判断符(判断表达式能否为空):IS NULL、NOT IS NULL
  逻辑运算符(用于多条件的逻辑衔接):NOT、AND、OR

  1、范围运算符例:age BETWEEN 10 AND 30相当于age>=10 AND age<=30
  2、列表运算符例:country IN ('Germany','China')
  3、情势匹配符例:常用于模糊查找,它判断列值能否与指定的字符串格局相匹配.可用于char、varchar、text、ntext、datetime和smalldatetime等范例查询.
  可以利用以下通配字符:
  百分号%:可匹配肆意范例和长度的字符,假如是中文,请利用两个百分号即%%.
  下划线_:匹配单个肆意字符,它常用来限制表达式的字符长度.
  方括号[]:指定一个字符、字符串或范围,要求所匹配对象为它们中的任一个.[^]:其取值也[] 相同,但它要求所匹配对象为指定字符以外的任一个字符.
  比方:
  限制以Publishing末尾,利用LIKE '%Publishing'
  限制以A开首:LIKE '[A]%'
  限制以A开首外:LIKE '[^A]%'

  4、空值判断符例WHERE age IS NULL

  5、逻辑运算符:优先级为NOT、AND、OR

  (四)查询后果排序

  利用ORDER BY子句对查询返回的后果按一列或多列排序.ORDER BY子句的语法格局为:
  ORDER BY {column_name [ASC|DESC]} [,…n]
  此中ASC表示升序,为默许值,DESC为降序.ORDER BY不能按ntext、text和image数据范例举行排
  序.
  比方:

  SELECT *
  FROM usertable
  ORDER BY age desc,userid ASC

  别的,可以按照表达式举行排序.

  2、 结合查询

  UNION运算符可以将两个或两个以上上SELECT语句的查询后果调集归并成一个后果调集显示,即履行结合查询.UNION的语法格局为:

  select_statement
  UNION [ALL] selectstatement
  [UNION [ALL] selectstatement][…n]

  此中selectstatement为待结合的SELECT查询语句.

  ALL选项表示将全部行归并到后果调集合.不指定该项时,被结合查询后果调集合的反复行将只保存一行.

  结合查询时,查询后果的列标题为第一个查询语句的列标题.因此,要定义列标题必须在第一个查询语句中定义.要春结合查询后果排序时,也必须利用第一查询语句中的列名、列标题大概列序号.

  在利用UNION 运算符时,应保证每个结合查询语句的挑选列表中有相同数目的表达式,并且每个查询挑选表达式应具有相同的数据范例,或是可以自动将它们转换为相同的数据范例.在自动转换时,关于数值范例,系统将低精度的数据范例转换为高精度的数据范例.

  在包含多个查询的UNION语句中,其履行次序是自左至右,利用括号可以改变这一履行次序.比方:

  查询1 UNION (查询2 UNION 查询3)

  3、衔接查询

  通过衔接运算符可以实现多个表查询.衔接是关系数据库模子的主要特点,也是它辨别于别的范例数据库管理系统的一个标志.

  在关系数据库管理系统中,表成立时各数据之间的关系没必要肯定,常把一个实体的全部信息存放在一个表中.当检索数据时,通过衔接操作查询出存放在多个表中的差别实体的信息.衔接操作给用户带来很大的机动性,他们可以在任什么时刻候增添新的数据范例.为差别实体成立新的表,此后通过衔接举行查询.

  衔接可以在SELECT 语句的FROM子句或WHERE子句中成立,似是而非在FROM子句中指出衔接时有助于将衔接操作与WHERE子句中的搜索条件区脱离来.所以,在Transact-SQL中举荐利用这种办法.

  SQL-92尺度所定义的FROM子句的衔接语法格局为:

  FROM join_table join_type join_table
  [ON (join_condition)]

  此中join_table指出参与衔接操作的表名,衔接可以对同一个表操作,也可以对多表操作,对同一个表操作的衔接又称做自衔接.

  join_type 指出衔接范例,可分为三种:内衔接、外衔接和穿插衔接.内衔接(INNER JOIN)利用对比运算符举行表间某(些)列数据的对比操作,并列出这些表中与衔接条件相匹配的数据行.按照所利用的对比方法差别,内衔接又分为等值衔接、自然衔接和不等衔接三种.外衔接分为左外衔接(LEFT OUTER JOIN或LEFT JOIN)、右外衔接(RIGHT OUTER JOIN或RIGHT JOIN)和全外衔接(FULL OUTER JOIN或FULL JOIN)三种.与内衔接差别的是,外衔接不只列出与衔接条件相匹配的行,而是列出左表(左外衔接时)、右表(右外衔接时)或两个表(全外衔接时)中全部符合搜索条件的数据行.

  穿插衔接(CROSS JOIN)没有WHERE 子句,它返回衔接表中全部数据行的笛卡尔积,后来果调集合的数据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数.

  衔接操作中的ON (join_condition) 子句指出衔接条件,它由被衔接表中的列和对比运算符、逻辑运算符等构成.

  无论哪类衔接都不能对text、ntext和image数据范例摆列行直接衔接,但可以对这三种摆列行间接衔接.比方:

  SELECT p1.pub_id,p2.pub_id,p1.pr_info
  FROM pub_info AS p1 INNER JOIN pub_info AS p2
  ON DATALENGTH(p1.pr_info)=DATALENGTH(p2.pr_info)

  (一)内衔接
  内衔接查询操作列出与衔接条件匹配的数据行,它利用对比运算符对比被衔接列的列值.内衔接分三种:
  1、等值衔接:在衔接条件中利用等于号(=)运算符对比被衔接列的列值,其查询后果中列出被衔接表中的全部列,包含此中的反复列.
  2、不等衔接: 在衔接条件利用除等于运算符以外的别的对比运算符对比被衔接的列的列值.这些运算符包含>、>=、<=、<、!>、!<和<>.
  3、自然衔接:在衔接条件中利用等于(=)运算符对比被衔接列的列值,但它利用挑选列表指出查询后果调集合所包含的列,并删除衔接表中的反复列.
  例,下面利用等值衔接列出authors和Publishers表中位于同一城市的作者和出版社:

  SELECT *
  FROM authors AS a INNER JOIN publishers AS p
  ON a.city=p.city
  又如利用自然衔接,在挑选列表中删除authors 和publishers 表中反复列(city和state):
  SELECT a.*,p.pub_id,p.pub_name,p.country
  FROM authors AS a INNER JOIN publishers AS p
  ON a.city=p.city

  (二)外衔接
  内衔接时,返回查询后果调集合的仅是符合查询条件( WHERE 搜索条件或 HAVING 条件)和衔接条件的行.而采取外衔接时,它返回到查询后果调集合的不但包含符合衔接条件的行,并且还包含左表(左外衔接时)、右表(右外衔接时)或两个边接表(全外衔接)中的全部数据行.以下面利用左外衔接将论坛内容和作者信息衔接起来:

  SELECT a.*,b.* FROM luntan LEFT JOIN usertable as b
  ON a.username=b.username

  下面利用全外衔接将city表中的全部作者以及user表中的全部作者,以及他们所在的城市:

  SELECT a.*,b.*
  FROM city as a FULL OUTER JOIN user as b
  ON a.username=b.username

  (三)穿插衔接
  穿插衔接不带WHERE 子句,它返回被衔接的两个表全部数据行的笛卡尔积,返回到后果调集合的数据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数.例,titles表中有6类图书,而publishers表中有8家出版社,则下列穿插衔接检索到的记录数将等于6*8=48行.

  SELECT type,pub_name
  FROM titles CROSS JOIN publishers
  ORDER BY type
  [Post=0][/Post]
  以上是“SQL查询语句精华利用扼要[MSSQL防范]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:

  • mysql查询字符串替换语句小结(数据库字符串替换)
  • mysql show processlist 显示mysql查询进程
  • <b>理解SQL Server中的锁—T-SQL查询进阶</b>
  • 怎样编写可重用的MySQL查询?
  • PHP拜候MySQL查询超时处理
  • MySQL查询优化程序
  • <b>MySQL查询优化技术系列讲座之利用索引</b>
  • MySQL查询优化系列讲座之查询优化器
  • <b>MySQL查询优化系列讲座之数据范例与效率</b>
  • MySQL查询优化系列讲座之调度和锁定
  • MySQL查询优化讲座之管理员的优化办法
  • SQL查询语句精华利用扼要
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

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

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