标题:SQL查询方法 出处:大尾巴自留地 时间:Sat, 07 Mar 2009 19:59:20 +0000 作者:大尾巴 地址:http://blog.daweiba.com/read.php/163.htm 内容: select,delete,update,insert语句使用方法: 功能说明:select:主要执行从数据库中的一个或多个表中查找满足一定条件的资料集合。delete:主要执行从数据库的表中删除符合一定条件的资料。update:按照一定条件更新数据库表中的资料。insert:向数据库表中插入一条资料。1、select 语句:SELECT select_listFROM table_source[ WHERE search_condition ][ GROUP BY group_by_expression][ HAVING search_condition ][ ORDER BY order_expresion [ASC | DESC ] ](1)最基本的SELECT语句形式为:SELECT select_listFROM table_source其中,select_list指定结果集中要包含的列的名称,多列之间用逗号隔开:table_source为要查询的表名。例如: a.如果查询表中所有列的信息,用“*”代替列名。select * from mchkb.在结果集中为列指定别名select spbh as 药品编号, hshsj as 含税价格 from spkfkc.为表名指定别名。select spbh , hshsj from spkfk ad.消除结果集中重复的行。select distinct spid from splske.返回有限的结果。TOP n [percent]select top 10 djbh,hsjefrom cwk返回前10条记录。select top 10 percent djbh,hsjefrom cwk返回占查询结果10%的资料。(2)选择查询。a. 基于比较条件查询含税金额等于20000select * from cwk where hsje=20000含税金额大于5select * 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_listFROM table_sourceWHERE 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 nullf.基于多个条件选择查询结果。在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_listFROM talbe_sourceWHERE search_conditionORDER 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_listFROM table_sourceWHERE search_conditionGROUP BY group_by_expression比如:查看每一种卖出商品的总数.    select spid,sum(shl) from ywmxkgroup by spid    b.HAVINGHAVING子句用来向使用GROUP BY子句的查询中添加过滤准则,语法与WHERE 一样,但WHERE是针对单个行而言,HAVING是针对一组而言。    区别:1、查询时,先滤掉不满足WHERE中条件的记录,而HAVING子句在分组之后使用。       2、HAVING可以在子句中包含聚合函数,但WHERE 不行。              比如:查看每一种卖出商品的总数,卖出数量大于30.      select spid,sum(shl) as shl from ywmxkgroup by spidhaving sum(shl)>30c.COMPUTE 与COMPUTE BYCOMPUTE子句可以用来计算汇总资料。    比如:查看日期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 spidcompute 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.dwbhwhere 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.spidwhere 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.spidwhere b.djbh like 'xsa%' and b.spid is nullgroup by a.spid,a.spmch b交叉联结。所有表的所有行进行笛卡尔乘积。例如:生成所有进货商和所有商品之间的列表。select a.dwmch,b.spmchfrom mchk a cross join spkfk bc.自联结。自联结:不是一种特殊的联结,它实际上是在同一表中进行的内联结和外联 结。例如:选择具有相同含税售价列表。select distinct a.hshsj,a.spmchfrom spkfk ajoin spkfk b on a.hshsj=b.hshsjand a.spid<>b.spid(1)spid不等表示记录自巳不与自己联结。(2)distinct存在重复的资料。(7)合并:UNION是将两个或多个查询合并到一个结果集中的方法,合并后的结果包含合 并组中的的所有查询。 Generated by Bo-blog 2.1.1 Release