欢迎投稿

今日深度:

SQL语句相关概念及练习之基础篇(1)(3)

三、SQL中的内置函数

  1. -------------------------------------- 
  2. -----数据汇总-聚合函数--------- 
  3. -------------------------------------- 
  4.  
  5. --查询T_Employee表中数据条数 
  6. selectCOUNT(*)fromT_Employee 
  7.  
  8. --查询工资最高的人 
  9. selectMAX(FSalary)asTop1fromT_Employee 
  10.  
  11. --查询工资最低的人 
  12. selectMin(FSalary)asBottom1fromT_Employee 
  13.  
  14. --查询工资的平均水平 
  15. selectAvg(FSalary)as平均水平fromT_Employee 
  16.  
  17. --所有工资的和 
  18. selectSUM(FSalary)as总工资fromT_Employee 
  19.  
  20. --查询工资大于5K的员工总数 
  21. selectCOUNT(*)astotalfromT_Employee 
  22. whereFSalary>5000 
  23.  
  24. ------------------------------ 
  25. -----数据排序------- 
  26. ------------------------------ 
  27.  
  28. --按年龄排序升序,默认是升序 
  29. select*fromT_Employee 
  30. orderbyFAgeASC 
  31.  
  32. --多个条件排序,先什么,后什么,在前一个条件相同的情况下,根据后一个条件进行排列 
  33.  
  34. --where在orderby之前 
  35. select*fromT_Employee 
  36. orderbyFAgeASC,FSalaryDESC 
  37.  
  38. ------------------------------ 
  39. -----模糊匹配------- 
  40. ------------------------------ 
  41.  
  42. --通配符查询 
  43. --1.单字符通配符_ 
  44. --2.多字符通配符% 
  45. --以DEV开头的任意个字符串 
  46. select*fromT_Employee 
  47. whereFNumberlike'DEV%' 
  48.  
  49. --以一个字符开头,om结尾的字符串 
  50. select*fromT_Employee 
  51. whereFNamelike'_om' 
  52.  
  53. --检索姓名中包含m的字符 
  54. select*fromT_Employee 
  55. whereFNamelike'%m%' 
  56.  
  57. ------------------------------ 
  58. -----空值处理------- 
  59. ------------------------------ 
  60. --null表示不知道,不是没有值 
  61. --null和其他值计算结果是null 
  62. selectnull+1 
  63.  
  64. --查询名字是null的数据 
  65. select*fromT_Employee 
  66. whereFNameisnull 
  67.  
  68. --查询名字不为空null的数据 
  69. select*fromT_Employee 
  70. whereFNameisnotnull 
  71.  
  72. --年龄是23,25,28中的员工 
  73. select*fromT_Employee 
  74. whereFAge=23orFAge=25orFAge=28 
  75.  
  76. --或者用in集合查询 
  77. --年龄是23,25,28中的员工 
  78. select*fromT_Employee 
  79. whereFAgein(23,25,28) 
  80.  
  81. --年龄在20到25之间的员工信息 
  82. select*fromT_Employee 
  83. whereFAge>20andFAge<25 
  84.  
  85. --年龄在20到25之间的员工信息,包含25 
  86. select*fromT_Employee 
  87. whereFAgebetween20and25 
  88.  
  89. ------------------------------ 
  90. -----数据分组------- 
  91. ------------------------------ 
  92. SelectFAge,COUNT(*)fromT_Employee 
  93. groupbyFAge 
  94.  
  95. --1.根据年龄进行分组 
  96. --2.再取出分组后的年龄的个数 
  97. --注意:没有出现在groupby子句中的字段,不能出现在select语句后的列名列表中(聚合函数除外) 
  98. --groupby必须出现在where后面 
  99. SelectFAge,AVG(FSalary),COUNT(*)fromT_Employee 
  100. groupbyFAge 
  101.  
  102. --错误用法 
  103. SelectFAge,FName,COUNT(*)fromT_Employee 
  104. groupbyFAge 
  105.  
  106. --加上where的groupby子句 
  107. --groupby必须出现在where后面 
  108. SelectFAge,AVG(FSalary),COUNT(*)fromT_Employee 
  109. whereFAge>=25 
  110. groupbyFAge 
  111.  
  112. --Having不能包含查不到的字段,只能包含聚合函数和本次查询有关的字段 
  113. selectFAge,COUNT(*)fromT_Employee 
  114. groupbyFAge 
  115. HavingCOUNT(*)>1 
  116. selectFAge,COUNT(*)fromT_Employee 
  117. whereFSalary>2500 
  118. groupbyFAge 
  119.  
  120. --HAVING子句中的列'T_Employee.FSalary'无效,因为该列没有包含在聚合函数或GROUPBY子句中 
  121. --Having是对分组后信息的过滤,能用的列和select中能有的列是一样的。 
  122. --因此,having不能代替where 
  123. selectFAge,COUNT(*)fromT_Employee 
  124. groupbyFAge 
  125. HavingFSalary>2500 
  126.  
  127. ------------------------------ 
  128. -----确定结果集行数------- 
  129. ------------------------------ 
  130. --取出所有员工的信息,根据工资降序排列 
  131. select*fromT_Employee 
  132. orderbyFSalaryDESC 
  133.  
  134. --取出前三名员工的信息,根据工资降序排列 
  135. selecttop3*fromT_Employee 
  136. orderbyFSalaryDESC 
  137.  
  138. --根据工资取出排名在6-8的员工信息,按工资降排列 
  139. selecttop3*fromT_Employee 
  140. whereFNumbernotin 
  141. (selecttop5FNumberfromT_EmployeeorderbyFSalaryDESC) 
  142. orderbyFSalaryDESC 
  143.  
  144. ---修改数据表,添加字段,更新字段的值等操作。 
  145. altertableT_EmployeeaddFSubCompanyvarchar(20) 
  146. altertableT_EmployeeaddFDepartmentvarchar(20) 
  147. updateT_EmployeesetFSubCompany='Beijing',FDepartment='Development' 
  148. whereFNumber='DEV001'
  149. updateT_EmployeesetFSubCompany='ShenZhen',FDepartment='Development' 
  150. whereFNumber='DEV002'
  151. updateT_EmployeesetFSubCompany='Beijing',FDepartment='HumanResource' 
  152. whereFNumber='HR001'
  153. updateT_EmployeesetFSubCompany='Beijing',FDepartment='HumanResource' 
  154. whereFNumber='HR002'
  155. updateT_EmployeesetFSubCompany='Beijing',FDepartment='InfoTech' 
  156. whereFNumber='IT001'
  157. updateT_EmployeesetFSubCompany='ShenZhen',FDepartment='InfoTech' 
  158. whereFNumber='IT002' 
  159. updateT_EmployeesetFSubCompany='Beijing',FDepartment='Sales' 
  160. whereFNumber='SALES001'
  161. updateT_EmployeesetFSubCompany='Beijing',FDepartment='Sales' 
  162. whereFNumber='SALES002'
  163. updateT_EmployeesetFSubCompany='ShenZhen',FDepartment='Sales' 
  164. whereFNumber='SALES003'
  165. select*fromT_Employee 
  166.  
  167. ------------------------------ 
  168. ------去掉重复数据------ 
  169. ------------------------------ 
  170. --所有员工的部门信息 
  171. selectDistinctFDepartmentfromT_Employee; 
  172. selectFDepartment,FSubCompany 
  173. fromT_Employee 
  174. --以上两个例子结合起来比较,Distinct针对的是整行进行比较的 
  175. selectDistinctFDepartment,FSubCompany 
  176. fromT_Employee 
  177.  
  178. ----------------------------- 
  179. -----联合结果集Union-------- 
  180. ------------------------------ 
  181. --创建一个测试表T_TempEmployee,并插入数据 
  182. CreateTableT_TempEmployee(FIdCardNumbervarchar(20),FNamevarchar(20),FAgeint,Primarykey(FIdCardNumber)); 
  183. insertintoT_TempEmployee(FIdCardNumber,FName,FAge)values('1234567890121','Sarani',33); 
  184. insertintoT_TempEmployee(FIdCardNumber,FName,FAge)values('1234567890122','Tom',26); 
  185. insertintoT_TempEmployee(FIdCardNumber,FName,FAge)values('1234567890123','Yamaha',38); 
  186. insertintoT_TempEmployee(FIdCardNumber,FName,FAge)values('1234567890124','Tina',36); 
  187. insertintoT_TempEmployee(FIdCardNumber,FName,FAge)values('1234567890125','Konkaya',29); 
  188. insertintoT_TempEmployee(FIdCardNumber,FName,FAge)values('1234567890126','Foortia',29); 
  189. select*fromT_TempEmployee 
  190.  
  191. --Union关键字,联合2个结果 
  192. --把2个查询结果结合为1个查询结果 
  193. --要求:上下2个查询语句的字段(个数,名字,类型相容)必须一致 
  194. selectFName,FagefromT_TempEmployee 
  195. union 
  196. selectFName,FagefromT_Employee 
  197. selectFNumber,FName,Fage,FDepartmentfromT_Employee 
  198. union 
  199. selectFIdCardNumber,FName,Fage,'临时工,无部门'fromT_TempEmployee 
  200.  
  201. ---UnionAll:不合并重复数据 
  202. --Union:合并重复数据 
  203. selectFName,FAgefromT_Employee 
  204. unionall 
  205. selectFName,FAgefromT_TempEmployee 
  206. selectFAgefromT_Employee 
  207. union 
  208. selectFAgefromT_TempEmployee 
  209.  
  210. --注意:Union因为要进行重复值扫描,所以效率低,因此如果不是确定要合并重复,那么就用Unionall 
  211. --例子:报名 
  212. select'正式员工最高年龄',MAX(FAge)fromT_Employee 
  213. unionall 
  214. select'正式员工最低年龄',MIN(FAge)fromT_Employee 
  215. unionall 
  216. select'临时工最高年龄',MAX(FAge)fromT_TempEmployee 
  217. unionall 
  218. select'临时工最低年龄',MIN(FAge)fromT_TempEmployee 
  219.  
  220. --查询每位正式员工的信息,包括工号,工资,并且在最后一行加上员工工资额合计 
  221. selectFNumber,FSalaryfromT_Employee 
  222. unionall 
  223. select'工资额合计',SUM(FSalary)fromT_Employee 


www.htsjk.Com true http://www.htsjk.com/shujukujc/18792.html NewsArticle 三、SQL中的内置函数 -------------------------------------- -----数据汇总-聚合函数--------- -------------------------------------- --查询T_Employee表中数据条数 selectCOUNT(*)fro...
评论暂时关闭