SQL语句相关概念及练习之基础篇

写在前面:最近在上海找工作,前前后后面试了N家单位,发现各个公司对程序员的数据库知识尤其是SQL语句的掌握程度有很高的要求,作为一名光荣的程序员,不会玩儿SQL语句走在街上根本不好意思和人打招呼!好了,废话不多说,新手菜鸟同志们了注意了,这篇文章提供的例子很简单,但是也很重要,请认真练习!别等到面试的时候被某些人嘲讽"唉!这年头,会写SQL语句的程序员越来越少了!L"老鸟高手同志们,你们可以优雅地飘过,但是有什么意见或建议都要提出来哦,大家一起进步嘛J,让菜鸟变成高手,提高我国的编程水平。

创新互联专注于企业成都全网营销、网站重做改版、镶黄网站定制设计、自适应品牌网站建设、html5商城系统网站开发、集团公司官网建设、成都外贸网站建设公司、高端网站制作、响应式网页设计等建站业务,价格优惠性价比高,为镶黄等各大城市提供网站开发制作服务。

一、SQL 基础知识

1、DDL(数据定义语言)

1)创建数据表

 
 
 
  1. --创建数据表
  2. create table Test(Id int not null, Age char(20));
  3. --创建数据表
  4. create table T_Person1(Id int not null,
  5. Name nvarchar(50),
  6. Age int null);
  7. --创建表,添加外键
  8. Create table T_Students(
  9. StudentNo char(4),
  10. CourseNo char(4),
  11. Score int,
  12. Primary key(StudentNo),
  13. Foreign key(CourseNo) References T_Course(CourseNo)
  14. );

2)修改表结构

 
 
 
  1. --修改表结构,添加字段
  2. Alter table T_Person add NickName nvarchar(50) null;
  3. --修改表结构,删除字段
  4. Alter table T_Person Drop NickName;

3)删除数据表

 
 
 
  1. --删除数据表
  2. Drop table T_Person;
  3. --删除数据表
  4. drop table test

4)创建索引

 
 
 
  1. Create [Unique] Index <索引名> on <基本表名>(<列明序列>);

2、DML(数据操纵语言)

1)插入语句

 
 
 
  1. insert into T_Person1(Id,Name,Age) values(1,'Vicky',20)
  2. --插入一条据数,字段和值必须前后对应
  3. insert into T_Preson1(Id,Name,Age) values(2,'Tom',19)
  4. insert into T_Person1(Id,Name,Age) values(4,'Jim',19)
  5. insert into T_Person1(Id,Name,Age) values(5,'Green',20)
  6. insert into T_Person1(Id,Name,Age) values(6,'Hanmeimei',21)
  7. insert into T_Person1(Id,Name,Age) values(7,'Lilei',22)
  8. insert into T_Person1(Id,Name,Age) values(8,'Sky',23)
  9. insert into T_Person1(Id,Name,Age) values(newid(),'Tom',19)

2)更新语句

 
 
 
  1. --修改列,把所有的age字段改为30
  2. update T_Person1 set age=30
  3. --把所有的Age字段和Name字段设置为...
  4. update T_Person1 set Age=50,Name='Lucy'
  5. update T_Person1 set Name='Frankie' where Age=30
  6. update T_Person1 set Name=N'中文字符' where Age=20
  7. --中文字符前面最好加上N,以防出现乱码
  8. update T_Person1 set Name=N'成年人' where Age=30 or Age=50

3)删除语句

 
 
 
  1. delete from T_Person1
  2. --删除表中全部数据
  3. delete from T_Person1 where Name='Tom'
  4. --根据条件删除数据

4)查询语句

查询语句非常强大,几乎可以查任意东西!

 
 
 
  1. -----------------
  2. ---- 数据检索 -----
  3. -----------------
  4. --查询不与任何表关联的数据.
  5. SELECT 1+1; --简单运算
  6. select 1+2 as 结果
  7. SELECT newid();--查询一个GUID字符创
  8. select GETDATE() as 日期 --查询日期
  9. --可以查询SQLServer版本
  10. select @@VERSION as SQLServer版本
  11. --一次查询多个
  12. select 1+1 结果, GETDATE() as 日期, @@VERSION as 版本, NEWID() as 编号
  13. --简单的数据查询.HelloWorld级别
  14. SELECT * FROM T_Employee;
  15. --只查询需要的列.
  16. SELECT FNumber FROM T_Employee;
  17. --给列取别名.As关键字
  18. SELECT FNumber AS 编号, FName AS 姓名 FROM T_Employee;
  19. --使用 WHERE 查询符合条件的记录.
  20. SELECT FName FROM T_Employee WHERE FSalary<5000;
  21. --对表记录进行排序,默认排序规则是ASC
  22. SELECT * FROM T_Employee ORDER BY FAge ASC,FSalary DESC;
  23. --ORDER BY 子句要放在 WHERE 子句之后.
  24. SELECT * FROM T_Employee WHERE FAge>23 ORDER BY FAge DESC,FSalary DESC;
  25. --WHERE 中可以使用的逻辑运算符:or、and、not、<、>、=、>=、<=、!=、<>等.
  26. --模糊匹配,首字母未知.
  27. SELECT * FROM T_Employee WHERE FName LIKE '_arry';
  28. --模糊匹配,前后多个字符未知.
  29. SELECT * FROM T_Employee WHERE FName LIKE '%n%';
  30. --NULL 表示"不知道",有 NULL 参与的运算结果一般都为 NULL.
  31. --查询数据是否为 NULL,不能用 = 、!= 或 <>,要用IS关键字
  32. SELECT * FROM T_Employee WHERE FName IS NULL;
  33. SELECT * FROM T_Employee WHERE FName IS NOT NULL;
  34. --查询在某个范围内的数据,IN 表示包含于,IN后面是一个集合
  35. SELECT * FROM T_Employee WHERE FAge IN (23, 25, 28);
  36. --下面两条查询语句等价。
  37. SELECT * FROM T_Employee WHERE FAge>=23 AND FAge<=30;
  38. SELECT * FROM T_Employee WHERE FAge BETWEEN 23 AND 30;
  39. ----创建一张Employee表,以下几个Demo中会用的这张表中的数据
  40. ----在SQL管理器中执行下面的SQL语句,在T_Employee表中进行练习
  41. create table T_Employee(FNumber varchar(20),
  42. FName varchar(20),
  43. FAge int,
  44. FSalary Numeric(10,2),
  45. primary key (FNumber)
  46. )
  47. insert into T_Employee(FNumber,FName,FAge,FSalary) values('DEV001','Tom',25,8300)
  48. insert into T_Employee(FNumber,FName,FAge,FSalary) values('DEV002','Jerry',28,2300.83)
  49. insert into T_Employee(FNumber,FName,FAge,FSalary) values('SALES001','Lucy',25,5000)
  50. insert into T_Employee(FNumber,FName,FAge,FSalary) values('SALES002','Lily',25,6200)
  51. insert into T_Employee(FNumber,FName,FAge,FSalary) values('SALES003','Vicky',25,1200)
  52. insert into T_Employee(FNumber,FName,FAge,FSalary) values('HR001','James',23,2200.88)
  53. insert into T_Employee(FNumber,FName,FAge,FSalary) values('HR002','Tom',25,5100.36)
  54. insert into T_Employee(FNumber,FName,FAge,FSalary) values('IT001','Tom',28,3900)
  55. insert into T_Employee(FNumber,FAge,FSalary) values('IT002',25,3800)
  56. --开始对T_Employee表进行各种操作
  57. --检索所有字段
  58. select * from T_Employee
  59. --只检索特定字段
  60. select FName,FAge from T_Employee
  61. --带过滤条件的检索
  62. select * from T_Employee
  63. where FSalary<5000
  64. --可更改显示列名的关键字as,as—起别名
  65. select FName as 姓名,FAge as 年龄,FSalary as 薪水 from T_Employee 

#p#

二、SQL Server 中的数据类型

1、精确数字类型

 
 
 
  1. bigint
  2. int
  3. smallint
  4. tinyint
  5. bit
  6. money
  7. smallmoney

2、字符型数据类型,MS建议用VarChar(max)代替Text

 
 
 
  1. Char
  2. VarChar
  3. Text

3、近似数字类型

 
 
 
  1. Decimal
  2. Numeric
  3. Real
  4. Float

4、Unicode字符串类型

 
 
 
  1. Nchar
  2. NvarChar
  3. Ntext

5、二进制数据类型,MS建议VarBinary(Max)代替Image数据类型,max=231-1

 
 
 
  1. Binary(n) 存储固定长度的二进制数据
  2. VarBinary(n) 存储可变长度的二进制数据,范围在n~(1,8000)
  3. Image 存储图像信息

6、日期和时间类型,数据范围不同,精确地不同

 
 
 
  1. DateTime
  2. SmallDateTime

7、特殊用途数据类型

 
 
 
  1. Cursor
  2. Sql-variant
  3. Table
  4. TimeStamp
  5. UniqueIdentifier
  6. XML 

#p#

三、SQL中的内置函数

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

#p#

 
 
 
  1. ------------------------------
  2. -----SQL其他内置函数------
  3. ------------------------------
  4. --1.数学函数
  5. --ABS():求绝对值
  6. --CEILING():舍入到最大整数
  7. --FLOOR():舍入到最小整数
  8. --ROUND():四舍五入
  9. selectABS(-3)
  10. selectCEILING(3.33)
  11. selectCEILING(-3.61)
  12. selectFLOOR(2.98)
  13. selectFLOOR(-3.61)
  14. selectROUND(-3.61,1)--第二个参数是精度,小数点后的位数
  15. selectROUND(-3.61,0)
  16. selectROUND(3.1415926,3)
  17. --2.字符串函数
  18. --LEN():计算字符串长度
  19. --LOWER(),UPPER():转大小写
  20. --LTRIM():去掉字符串左侧的空格
  21. --RTRIM():去掉字符串右侧的空格
  22. --SUBSTRING(string,start_positoin,length):
  23. --索引从1开始
  24. selectSUBSTRING('abc111',2,3)--结果是bc1
  25. selectFName,SUBSTRING(FName,2,2)fromT_Employee
  26. selectLEN('abc')--结果是3
  27. selectFName,LEN(FName)fromT_Employee
  28. --没有可以同时既去掉左边空格、又去掉右边空格的TRIM()内置函数,所以先左后右的进行TRim,当然,你也可以先右后左
  29. selectLTRIM('abc'),RTRIM('abc'),LEN(LTRIM(RTRIM('abc')))
  30. --3.日期函数
  31. --GETDATE():获取当前日期时间
  32. --DATEADD(datepart,numbre,date):计算增加以后的日期,
  33. --参数date为待计算的日期;参数number为增量;参数datepart为计量单位,时间间隔单位;
  34. --DATEDIFF(datepart,startdate,enddate):计算2个日期之间的差额
  35. --DATEPART(datepart,date):返回一个日期的特定部分,比如年月日,时分秒等.
  36. /*
  37. 值缩写(SqlServer)(Access和ASP)说明
  38. YearYyyyyy年1753~9999
  39. QuarterQqq季1~4
  40. MonthMmm月1~12
  41. DayofyearDyy一年的日数,一年中的第几日1-366
  42. DayDdd日,1-31
  43. WeekdayDww一周的日数,一周中的第几日1-7
  44. WeekWkww周,一年中的第几周0~51
  45. HourHhh时0~23
  46. MinuteMin分钟0~59
  47. SecondSss秒0~59
  48. MillisecondMs-毫秒0~999
  49. */
  50. selectDATEADD(DAY,3,getdate())
  51. selectDATEADD(MONTH,-3,getdate())
  52. selectDATEADD(HOUR,8,getdate())
  53. selectDATEDIFF(YEAR,'1989-05-01',GETDATE())
  54. selectDATEDIFF(HH,GETDATE(),DATEADD(DAY,-3,GETDATE()))
  55. --查询员工的工龄,年为单位
  56. selectFName,FInDate,DATEDIFF(year,FInDate,getdate())as工龄fromT_Employee
  57. --取出每一年入职员工的个数V1
  58. selectDATEDIFF(year,FInDate,getdate()),COUNT(*)
  59. fromT_Employee
  60. groupbyDATEDIFF(year,FInDate,getdate())
  61. --取出每一年入职员工的个数V2
  62. selectDATEPART(YEAR,FInDate),COUNT(*)
  63. fromT_Employee
  64. groupbyDATEPART(YEAR,FInDate)
  65. selectDATEPART(YEAR,GETDATE())
  66. selectDATEPART(MONTH,GETDATE())
  67. selectDATEPART(DAY,GETDATE())
  68. selectDATEPART(HH,GETDATE())
  69. selectDATEPART(MINUTE,GETDATE())
  70. selectDATEPART(SECOND,GETDATE())
  71. --4.类型转换函数
  72. --CAST(expressionasdata_type)
  73. --CONVERT(data_type,expression)
  74. selectCAST('123'asint),CAST('2010-09-08'asdatetime),
  75. CONVERT(datetime,'2010-09-08'),CONVERT(varchar(20),123)
  76. --5.空值处理函数isNull
  77. --ISNULL(expression,value)
  78. selectISNULL(FName,'佚名')as姓名fromT_Employee
  79. --6.CASE函数用法:
  80. --1.单值判断:相当于switch.case
  81. --CASEexpression
  82. --WHENvalue1thenreturnvalue1
  83. --WHENvalue2thenreturnvalue2
  84. --WHENvalue3thenreturnvalue3
  85. --ELSEdefault_return_value
  86. --END
  87. --判断客户类型
  88. selectFName,
  89. (
  90. caseFLevel
  91. when1then'普通客户'
  92. when2then'会员'
  93. when3then'VIP'
  94. else'未知客户类型'
  95. End
  96. )as客户类型
  97. fromT_Customer
  98. --收入水平查询
  99. selectFName,
  100. (
  101. case
  102. whenFSalary<2000then'低收入'
  103. whenFSalary>=2000andFSalary<=5000then'中等收入'
  104. else'高收入'
  105. end
  106. )as收入水平
  107. fromT_Employee
  108. --这里有一道关于CASE用法的面试题
  109. --表T中有ABC三列,用SQL语句实现:当A列大于B列时选择A列,否则选择B列;
  110. --当B列大于C列时选择B列,否则选择C列。
  111. select
  112. (
  113. case
  114. whena>bthenaelseb
  115. end
  116. ),
  117. (
  118. case
  119. whenb>cthenbelsec
  120. end
  121. )
  122. fromT
  123. ---------------------------------------
  124. selectFNumber,
  125. (
  126. case
  127. whenFAmount>0thenFAmount
  128. else0
  129. end
  130. )as收入,
  131. (
  132. case
  133. whenFAmount<0thenABS(FAmount)
  134. else0
  135. end
  136. )as支出
  137. fromT
  138. -----------------------------------------
  139. --球队比赛那个题
  140. --有一张表T_Scroes,记录比赛成绩:
  141. --DateNameScroe
  142. --2008-8-8拜仁胜
  143. --2008-8-9奇才胜
  144. --2008-8-8湖人胜
  145. --2008-8-10拜仁负
  146. --2008-8-8拜仁负
  147. --2008-8-12奇才胜
  148. --要求输出下面格式:
  149. --Name胜负
  150. --拜仁12
  151. --湖人10
  152. --奇才20
  153. --注意:在中文字符串前加N,比如N'胜'
  154. createtableT_Scores(
  155. [Date]datetimenullcollate
  156. [Name]nvarchar(50)
  157. )
  158. CREATETABLE[T_Scores]([Date][datetime]NULL,
  159. [Name][nvarchar](50)COLLATEChinese_PRC_CI_ASNULL,
  160. [Score][nvarchar](50)COLLATEChinese_PRC_CI_ASNULL
  161. );
  162. INSERT[T_Scores]([Date],[Name],[Score])VALUES(CAST(0x00009AF200000000ASDateTime),N'拜仁',N'胜');
  163. INSERT[T_Scores]([Date],[Name],[Score])VALUES(CAST(0x00009AF300000000ASDateTime),N'奇才',N'胜');
  164. INSERT[T_Scores]([Date],[Name],[Score])VALUES(CAST(0x00009AF300000000ASDateTime),N'湖人',N'胜');
  165. INSERT[T_Scores]([Date],[Name],[Score])VALUES(CAST(0x00009AF400000000ASDateTime),N'拜仁',N'负');
  166. INSERT[T_Scores]([Date],[Name],[Score])VALUES(CAST(0x00009AF200000000ASDateTime),N'拜仁',N'负');
  167. INSERT[T_Scores]([Date],[Name],[Score])VALUES(CAST(0x00009AF600000000ASDateTime),N'奇才',N'胜');
  168. select*fromT_Scores
  169. --列出第一个表格
  170. --统计每支队伍的胜负情况
  171. selectName,
  172. (
  173. caseScore
  174. whenN'胜'then1
  175. else0
  176. end
  177. )as胜,
  178. (
  179. caseScore
  180. whenN'负'then1
  181. else0
  182. end
  183. )as负
  184. fromT_Scores
  185. selectName,
  186. sum
  187. (
  188. caseScore
  189. whenN'胜'then1
  190. else0
  191. end
  192. )as胜,
  193. sum
  194. (
  195. caseScore
  196. whenN'负'then1
  197. else0
  198. end
  199. )as负
  200. fromT_Scores
  201. groupbyName
  202. --根据每个队的胜负判断出胜负的场数

#p#

 
 
 
  1. --题5)创建一张表,记录电话呼叫员的工作流水,记录呼叫员编号,对方号码,通话开始时间,通话结束时间,。
  2. --创建一张表T_Callers,记录电话呼叫员的工作流水,记录呼叫员编号、对方号码、通话开始时间、通话结束时间。建表、插数据等最后都自己写SQL语句。
  3. --要求:
  4. --1)输出所有数据中通话时间最长的5条记录。
  5. --2)输出所有数据中拨打长途号码(对方号码以0开头)的总时长。
  6. --3)输出本月通话总时长最多的前三个呼叫员的编号。
  7. --4)输出本月拨打电话次数最多的前三个呼叫员的编号。
  8. --5)输出所有数据的拨号流水,并且在最后一行添加总呼叫时长。
  9. --记录呼叫员编号、对方号码、通话时长
  10. --......
  11. --汇总[市内号码总时长][长途号码总时长]
  12. --IdCallerNumberTellNumberStartDateTimeEndDateTime
  13. --1001020888888882010-7-1010:012010-7-1010:05
  14. --2001020888888882010-7-1113:412010-7-1113:52
  15. --3001898989892010-7-1114:422010-7-1114:49
  16. --4002021883689812010-7-1321:042010-7-1321:18
  17. --5002767676762010-6-2920:152010-6-2920:30
  18. --6001022888782432010-7-1513:402010-7-1513:56
  19. --7003672546862010-7-1311:062010-7-1311:19
  20. --8003862314452010-6-1919:192010-6-1919:25
  21. --9001874223682010-6-1919:252010-6-1919:36
  22. --10004400458622452010-6-1919:502010-6-1919:59
  23. --创建表
  24. createtableT_CallRecords(
  25. idintnotnull,
  26. CallerNumbervarchar(3),
  27. TellNumbervarchar(13),
  28. StartDateTImedatetime,
  29. EndDateTimedatetime,
  30. Primarykey(Id)
  31. );
  32. --插入数据
  33. insertintoT_CallRecords(Id,CallerNumber,TellNumber,StartDateTime,EndDateTIme)
  34. values(1,'001','02088888888','2010-7-1010:01','2010-7-1010:05');
  35. INSERTINTOT_CallRecords(Id,CallerNumber,TellNumber,StartDateTime,EndDateTime)
  36. VALUES(2,'002','02088888888','2010-7-1113:41','2010-7-1113:52');
  37. INSERTINTOT_CallRecords(Id,CallerNumber,TellNumber,StartDateTime,EndDateTime)
  38. VALUES(3,'003','89898989','2010-7-1114:42','2010-7-1114:49');
  39. INSERTINTOT_CallRecords(Id,CallerNumber,TellNumber,StartDateTime,EndDateTime)
  40. VALUES(4,'004','02188368981','2010-7-1321:04','2010-7-1321:18');
  41. INSERTINTOT_CallRecords(Id,CallerNumber,TellNumber,StartDateTime,EndDateTime)
  42. VALUES(5,'005',<

    文章题目:SQL语句相关概念及练习之基础篇
    URL分享:http://www.csdahua.cn/qtweb/news20/260270.html

    网站建设、网络推广公司-快上网,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

    广告

    声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 快上网