sql查询方式总结
简单查询 1,检索表中所有列 select * from <表名> 2,检索表中特定列 select <列名表列> from <表名> 3,重排列顺序 select cloumn_3,cloumn_1 from <表名> 4,用单引号加入字符串 select cloumn_3,cloumn_1 '所要加的字段名' from<表名> 5,改变列标题 select cloumn_3,cloumn_1 as '新列名' from <表名> 6,消除重复行 select distinct cloumn_3 from <表名> 7,返回有限的结果 select top n [percent]* from <表名> 8,使用算数运算符操纵列 example: select cloumn_1+'('+cloumn_2+')' [as] '新列名',cloumn_3*cloumn_4 '新列名' from <表名> 9,使用函数操纵列 --常用函数有substring()[取子字符串]、getdate()[返回当前日期和时间]、year(data)[返回日期中的年份]、convert()[类型转换] example: select distinct substring(title,1,5) from pubs 又如:返回当前服务器的用户名 select 'login'=suser_sname() 再如查询pubs数据库的titles表中所有书的价格信息,对于书名长度超过38个字符的,将其余部分截掉 use pubs select convert(char(38),title)+'IS $'+ convert(varchar(10),price) from titles 选择行查询 1,基于比较选择行 example: select 价格,* from goods where 价格>=1000 2,基于范围选择行 select * from goods where 价格 between 20 and 2000 --3,基于列表选择行 select * from goods where 品名 not in('方正A','联想') 4,基于字符串选择行 --百分号(%):代表任意多个字符 --下划线(_):代表单个字符 --中括号([]):代表指定范围内的单个字符 --复合符号([^]):代表不在指定范围内的单个字符 --5,基于未知选择行 --使用IS NULL IS not NULL select 姓名,职业 from students where 联系电话 IS null --6,基于多个搜索条件选择行 select 姓名,职业,联系电话,地址 from students where (联系电话 like '%3%'or 联系电话 like '%5%') and (地址 like '河南') --7,结果排序 select * from goods select 价格 from goods order by 价格 ASC 生成总结查询 使用SQL查询语言,用户可以方便地为查询到的结果进行分组、计算或对其进行过滤等,从而得到总结性的数据结果集。 1,使用集合函数进行统计 (1)AVG 该函数用于计算查询结果的平均值。其语法格式如下: AVG([all | distinct] 算数表达式) 其中各参数的意义如下: all:全部数据都参与计算,为默认的选项。 distinct:消除重复的数据,只计算不同的值的平均值。 算数表达式:该表达式即可以只涉及一列,也可涉及多列 example:要计算Sales数据库中Goods表中的所有货品的平均价格 use Sales select avg(价格) from goods (2)min、max 这两个函数用于查询最小值和最大值,语法格式如下: min([all | distinct] 算数表达式) (3)sum 该函数用于计算查询到的数据值得总和 example:计算Pubs数据库中的titles表中所有商业类书籍的平均预付款和本年度迄今为止的全部销售额。 use pubs select avg(advance),sum(ytd_sales) from titles where type='business' (4)count 该函数可以计算查询到的结果的数目 example:查询sales数据库中customers表中客户地址的数量。 use sales select count(distinct 地址) from customers 2,数据分组 (1)group by子句 在SQL Sever中,可以按照一定的条件对查询到的结果进行分组,然后对每一组数据计算统计信息。 说明:1,使用group by 子句能按列或表达式分组,一般与集合函数一起使用,每组差生一个值。 2,在包含group by子句的查询语句中,select语句后的所有字段列表,除集合函数外,都应该包含 在group by子句中,否则会出错。 3,对数据进行分组时,也可以用条件进行选择,这就是having子句。 (2)having子句 having子句可以用来向使用Group by子句的查询中添加过滤准则,即检查分组之后的各组是否满足条件。having子句语法与where子句一样,但两者之间还是存在一定区别,具体如下: 1,where子句的作用是检查每条记录是否满足条件,而having子句是检查分组之后的各组是否满足条件。 2,having子句是针对Group by子句的,没有Group by子句时不能使用having子句。 3,having子句可以在条件中包含集合函数,但where子句不行 exam:显示sales数据库中Goods表中存货量大于70的货品及库存数量,具体代码如下: use sales ----select 品名,库存数量 from Goods where 库存数量>70 select 品名,库存数量=sum(库存量) from Goods group by 品名 having sum(库存量)>7 ①where子句排出不满足条件的行 ②group by子句收集满足where子句的搜索行,并将这些行分组 ③having子句排出不符合其条件的组 此外,使用group by all能够显示所有的组,即便是被where子句排除的组也将会显示出来 3,计算汇总数据 (1)compute子句 可以使用该子句计算汇总数据,该汇总数据将作为附加的汇总列出现在结果集的最后 exam:在pubs数据库的titles表中查询类型是以cook结尾的书的价格和总价 use pubs select type,price from titles where type like '%cook' order by type,price compute sum(price) (2)compute by 子句 在查询中使用该子句可以按给定的条件将查询结果分组,并为每种结果计算汇总数据。 exam:在pubs数据库的titles表中查询类型是以cook结尾的书的价格和每种类型的总价 use pubs select type,price from titles where type like '%cook' order by type,price compute sum(price) by type (3)计算汇总数据时的注意事项 在使用compute子句和compute by 子句时,应注意下面的限制条件: 1,关键字distinct不允许同集合函数一起使用 2,compute子句中的列必须在select后面的选择列表 3,select into 不能和compute子句一块使用 4,若使用compute by子句,则必须使用order by子句。此时,compute by子句后出现的列必须与order by后出现的列相同,最少也应该是其子集,而且必须具有相同的从左到右的顺序并且以相同的表达式开头,不能跳过任何表达式。 |
|