select,delete,update,insert语句使用方法

来源:互联网 发布:联合国工作语言 知乎 编辑:程序博客网 时间:2024/04/28 01:10
select,delete,update,insert语句使用方法:

功能说明

   select:主要执行从数据库中的一个或多个表中查找满足一定条件的资料集合。

   delete:主要执行从数据库的表中删除符合一定条件的资料。

   update:按照一定条件更新数据库表中的资料。

   insert:向数据库表中插入一条资料。

1、select 语句:

   SELECT select_list

   FROM   table_source

   [ WHERE search_condition      ]

   [ GROUP BY group_by_expression]

   [ HAVING search_condition     ]

   [ ORDER BY order_expresion [ASC | DESC ]   ]

 (1)最基本的SELECT语句形式为:

    SELECT select_list

    FROM   table_source

    其中,select_list指定结果集中要包含的列的名称,多列之间用逗号隔开:

    table_source为要查询的表名。

    例如    a.如果查询表中所有列的信息,用“*”代替列名。

        select *  from mchk

    b.在结果集中为列指定别名

        select spbh as 药品编号, hshsj as 含税价格 from spkfk

    c.为表名指定别名。

        select spbh , hshsj  from spkfk a

    d.消除结果集中重复的行。

        select distinct spid from splsk

    e.返回有限的结果。

        TOP n [percent]

        select top 10  djbh,hsje

               from    cwk

        返回前10条记录。

        select top 10 percent djbh,hsje

               from    cwk

        返回占查询结果10%的资料。

 (2)选择查询。

     a. 基于比较条件查询

        含税金额等于20000

        select *  from   cwk   where hsje=20000

        含税金额大于5

        select *  from   cwk   where hsje>20000

        条件:=,>,>=,<,<=,<>

     b.基于范围条件查询

       BETWEEN关键词 BETWEEN   AND

       查询发生在'2002/04/1' 和 '2002/05/22'之间的资料

       select *  from    cwk  where rq between 2002-04-01 and 2002-05-22

     c.基于列表条件查询

       IN关键词

       select * from spkfjc  where kcshl IN (100,1000,10000)        

     d.基于字符串匹配条件的查询。

       格式:

        SELECT select_list

        FROM  table_source

        WHERE EXPRESSION LIKE 'STRING'

        字符串中可以包含通配符:

           1. %:代表任意多个字符,A%表示以A开头的字符串,

                                  %A表示以A结尾的字符串,

                                  %A%表示中间出现A的字符串。

              查询采购入库单

              select * from cwk where djbh like 'jha%'

           2._(下划线):代表单个字符。

               根据编号查询武汉客商信息

             select * from mchk where danwbh  like 'wh00_'

           3.[]:代表指定范围内的单个字符,[]中可以是单个字符([asd]),也可以 

               是字符范围([a-h])

               在SPKFK中查询针剂信息。

               select * from spkfk  where spbh like '[z]%'

           4.[^]:代表不在指定范围内的单个字符,[]中可以是单个字符([asd]),也 

               可以是字符范围([a-h])

              在SPKFK中查询非针剂信息。

               select * from spkfk  where spbh like '[^z]%'

      e.基于未知值(NULL)查询。

            空值实际是指一种未知的,不存在,不可应用的资料,通常用NULL表示。

            查询价格为空资料集合

           select * from spkfk where spid is null

      f.基于多个条件选择查询结果。

           在WHERE语句中,可以用逻辑运算符来连接多个条件,构成一个复杂条件 

           进行查询。主要有三个逻辑运算符:

           1 AND :它连接两个条件,如果两个条件都成立,则组合起来的条件成立。

           2 OR  :它连接两个条件,如果其中一个条件成立,则组合条件成立。

           3 NOT :它引出一个条件,将该条件的值取反。         

             查询没有发生在'2002-04-01' 和 '2002-05-22'之间的资料

             select *  from cwk where rq not between 2002-04-01 and 2002-05-22 and djbh like xsa%

             查询发生在'2002-04-01' 和 '2002-05-22'之间的资料

             select  * from cwk  where rq  between 2002-04-01 and 2002-05-22 and djbh like xsa%

             查询发生在小于等于'2002-04-01' 和大于等于 '2002-05-22'的资料

              select * from cwk

                where  rq<='2002-04-01' or rq>='2002-05-22'

   g.查询结果排序

     格式:

       SELECT select_list

              FROM   talbe_source

              WHERE  search_condition

              ORDER BY order_expression [ASC  | DESC]

          其中,order_expression是排序依据的列名,可以有多个列名。ASC按升      

          序排序,DESC按降序排序,默认为ASC

     查询满足WHERE条件的资料,按降序排列。 

          select  * from cwk  where rq  between 2002-04-01 and 2002-05-22 and djbh like xsa%

                order by rq desc

 (3)资料分组(northwind数据库)

      a. GROUP BY

         利用GROUP BY可以按一定的条件对查询到的结果进行分组,再对每一组数   

         据计算统计。

     格式:SELECT select_list

               FROM table_source

               WHERE search_condition

               GROUP BY group_by_expression

          比如:查看每一种卖出商品的总数.

        select spid,sum(shl) from ywmxk

            group by spid

   b.HAVING

        HAVING子句用来向使用GROUP BY子句的查询中添加过滤准则,语法与WHERE  

        一样,但WHERE是针对单个行而言,HAVING是针对一组而言。

    区别:1、查询时,先滤掉不满足WHERE中条件的记录,而HAVING子句在分

                 组之后使用。

       2、HAVING可以在子句中包含聚合函数,但WHERE 不行。      

          比如:查看每一种卖出商品的总数,卖出数量大于30.

          select spid,sum(shl) as shl from ywmxk

                group by spid

                having sum(shl)>30

      c.COMPUTE 与COMPUTE BY

        COMPUTE子句可以用来计算汇总资料。

    比如:查看日期1994/09/13以后卖出商品的总数,

         select spid,shl as shl from ywmxk  where djbh like 'jha%'

                compute sum(shl)

        COMPUTE BY可以按给定的条件将查询结果分组,并为每组计算汇总资料      

             select spid,shl from ywmxk where djbh like 'jha%'

                     order by spid

                     compute sum(shl) by spid   

    若使用了COMPUTE BY,则必须使用ORDER BY,并且COMPUTE BY后面出现          

        的列的顺序必须与ORDER BY后出现的顺序相同。

 (4)T_SQL中的子查询

    子查询有两种类型:简单型和关联型。

            子查询是指SELECT子句嵌在另一个T-SQL语句中,一般情况下,子查      

        询用于另一个SELECT,INSERT,UPDATE或者DELETE语句中的WHERE或HAVING 

        短语中。

   a.简单子查询

    例如:查询销售商品数量大于100的销售出库单信息

 select djbh,hsje from cwk where  djbh in

(select djbh as shl from ywmxk where djbh like 'xsa%'

group by djbh  having sum(shl)>100 ))

      b.联结和子查询

         例如:查询销售单据信息同时显示出单位名称

           select a.djbh,a.hsje,b.dwmch from cwk a join mchk b 

              on a.dwbh=b.dwbh

               where a.djbh like xsa%

        在大多情况下,在SELECT语句中的联结比一个等效子查询便容易,效率高,我      

      们应尽可能地使用联结来代替子查询以取得更好的性能。

      c.为什么有时必须使用子查询

    例如select a.djbh,a.hsje,b.dwmch from cwk a join mchk b 

              on a.dwbh=b.dwbh where a.djbh like 'xsa%'  

             and  a.hsje<(select avg(hsje) from cwk where a.djbh  like 'xsa%')

       因为我们不能比较聚合值--avg(hsje),以及非聚合值hsje.

 

   (6)外联结,交叉联结和自联结。

   a外联结: 对于绝大多数的查询执行,当用户在多个表检索资料时标准的内部  

               联结就足够了。但有些情况是当用户要检索的信息在两个表中没有公 

               共资料时,使用外联结和交叉联结是很有用的。

    外联结的类型:左联结,右联结,全外联结。

           左联结和右联结的不同之处仅在于FROM短语中表排列次序不同。

全外联结是同时使用左联接和右联接。

   例1 使用左联结选择所有商品及其销量。如果没有卖出我们也想看一看。

       select a.spid,a.spmch,isnull(sum(b.shl),0) as shl

 from spkfk a left join ywmxk b on a.spid=b.spid

               where b.djbh like 'xsa%'

               group by a.spid,a.spmch

          如果使用内联结没有卖出的商品的信息就不会被显示出来,

     使用isnull函数的目的:把NULL变为0。ISNULL(check_expression,   

               replacement_value).

      例2 只选择没有卖出的商品名称。

             select a.spid,a.spmch,isnull(sum(b.shl),0) as shl

 from spkfk a left join ywmxk b on a.spid=b.spid

                where b.djbh like 'xsa%' and b.spid is null

                group by a.spid,a.spmch     

    b交叉联结。

        所有表的所有行进行笛卡尔乘积。

        例如:生成所有进货商和所有商品之间的列表。

             select a.dwmch,b.spmch

              from mchk a cross join spkfk b

    c.自联结。

        自联结:不是一种特殊的联结,它实际上是在同一表中进行的内联结和外联    

                结。

        例如:选择具有相同含税售价列表。

          select distinct a.hshsj,a.spmch

          from spkfk a

              join spkfk b on a.hshsj=b.hshsj

              and a.spid<>b.spid

          (1)spid不等表示记录自巳不与自己联结。

          (2)distinct存在重复的资料。

(7)合并:

      UNION是将两个或多个查询合并到一个结果集中的方法,合并后的结果包含合   

      并组中的的所有查询。

原创粉丝点击