av激情亚洲男人的天堂国语,日韩欧美精品一中文字幕,无码av一区二区三区无码,国产又色又爽又刺激的a片,国产又色又爽又刺激的a片

SQL語(yǔ)句相關(guān)概念及練習(xí)之基礎(chǔ)篇

寫在前面:最近在上海找工作,前前后后面試了N家單位,發(fā)現(xiàn)各個(gè)公司對(duì)程序員的數(shù)據(jù)庫(kù)知識(shí)尤其是SQL語(yǔ)句的掌握程度有很高的要求,作為一名光榮的程序員,不會(huì)玩兒SQL語(yǔ)句走在街上根本不好意思和人打招呼!好了,廢話不多說(shuō),新手菜鳥同志們了注意了,這篇文章提供的例子很簡(jiǎn)單,但是也很重要,請(qǐng)認(rèn)真練習(xí)!別等到面試的時(shí)候被某些人嘲諷"唉!這年頭,會(huì)寫SQL語(yǔ)句的程序員越來(lái)越少了!L"老鳥高手同志們,你們可以優(yōu)雅地飄過(guò),但是有什么意見(jiàn)或建議都要提出來(lái)哦,大家一起進(jìn)步嘛J,讓菜鳥變成高手,提高我國(guó)的編程水平。

創(chuàng)新互聯(lián)專注于企業(yè)成都全網(wǎng)營(yíng)銷、網(wǎng)站重做改版、鑲黃網(wǎng)站定制設(shè)計(jì)、自適應(yīng)品牌網(wǎng)站建設(shè)、html5、商城系統(tǒng)網(wǎng)站開(kāi)發(fā)、集團(tuán)公司官網(wǎng)建設(shè)、成都外貿(mào)網(wǎng)站建設(shè)公司、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁(yè)設(shè)計(jì)等建站業(yè)務(wù),價(jià)格優(yōu)惠性價(jià)比高,為鑲黃等各大城市提供網(wǎng)站開(kāi)發(fā)制作服務(wù)。

一、SQL 基礎(chǔ)知識(shí)

1、DDL(數(shù)據(jù)定義語(yǔ)言)

1)創(chuàng)建數(shù)據(jù)表

 
 
 
  1. --創(chuàng)建數(shù)據(jù)表
  2. create table Test(Id int not null, Age char(20));
  3. --創(chuàng)建數(shù)據(jù)表
  4. create table T_Person1(Id int not null,
  5. Name nvarchar(50),
  6. Age int null);
  7. --創(chuàng)建表,添加外鍵
  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)修改表結(jié)構(gòu)

 
 
 
  1. --修改表結(jié)構(gòu),添加字段
  2. Alter table T_Person add NickName nvarchar(50) null;
  3. --修改表結(jié)構(gòu),刪除字段
  4. Alter table T_Person Drop NickName;

3)刪除數(shù)據(jù)表

 
 
 
  1. --刪除數(shù)據(jù)表
  2. Drop table T_Person;
  3. --刪除數(shù)據(jù)表
  4. drop table test

4)創(chuàng)建索引

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

2、DML(數(shù)據(jù)操縱語(yǔ)言)

1)插入語(yǔ)句

 
 
 
  1. insert into T_Person1(Id,Name,Age) values(1,'Vicky',20)
  2. --插入一條據(jù)數(shù),字段和值必須前后對(duì)應(yīng)
  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)更新語(yǔ)句

 
 
 
  1. --修改列,把所有的age字段改為30
  2. update T_Person1 set age=30
  3. --把所有的Age字段和Name字段設(shè)置為...
  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,以防出現(xiàn)亂碼
  8. update T_Person1 set Name=N'成年人' where Age=30 or Age=50

3)刪除語(yǔ)句

 
 
 
  1. delete from T_Person1
  2. --刪除表中全部數(shù)據(jù)
  3. delete from T_Person1 where Name='Tom'
  4. --根據(jù)條件刪除數(shù)據(jù)

4)查詢語(yǔ)句

查詢語(yǔ)句非常強(qiáng)大,幾乎可以查任意東西!

 
 
 
  1. -----------------
  2. ---- 數(shù)據(jù)檢索 -----
  3. -----------------
  4. --查詢不與任何表關(guān)聯(lián)的數(shù)據(jù).
  5. SELECT 1+1; --簡(jiǎn)單運(yùn)算
  6. select 1+2 as 結(jié)果
  7. SELECT newid();--查詢一個(gè)GUID字符創(chuàng)
  8. select GETDATE() as 日期 --查詢?nèi)掌?/li>
  9. --可以查詢SQLServer版本
  10. select @@VERSION as SQLServer版本
  11. --一次查詢多個(gè)
  12. select 1+1 結(jié)果, GETDATE() as 日期, @@VERSION as 版本, NEWID() as 編號(hào)
  13. --簡(jiǎn)單的數(shù)據(jù)查詢.HelloWorld級(jí)別
  14. SELECT * FROM T_Employee;
  15. --只查詢需要的列.
  16. SELECT FNumber FROM T_Employee;
  17. --給列取別名.As關(guān)鍵字
  18. SELECT FNumber AS 編號(hào), FName AS 姓名 FROM T_Employee;
  19. --使用 WHERE 查詢符合條件的記錄.
  20. SELECT FName FROM T_Employee WHERE FSalary<5000;
  21. --對(duì)表記錄進(jìn)行排序,默認(rèn)排序規(guī)則是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 中可以使用的邏輯運(yùn)算符:or、and、not、<、>、=、>=、<=、!=、<>等.
  26. --模糊匹配,首字母未知.
  27. SELECT * FROM T_Employee WHERE FName LIKE '_arry';
  28. --模糊匹配,前后多個(gè)字符未知.
  29. SELECT * FROM T_Employee WHERE FName LIKE '%n%';
  30. --NULL 表示"不知道",有 NULL 參與的運(yùn)算結(jié)果一般都為 NULL.
  31. --查詢數(shù)據(jù)是否為 NULL,不能用 = 、!= 或 <>,要用IS關(guān)鍵字
  32. SELECT * FROM T_Employee WHERE FName IS NULL;
  33. SELECT * FROM T_Employee WHERE FName IS NOT NULL;
  34. --查詢?cè)谀硞€(gè)范圍內(nèi)的數(shù)據(jù),IN 表示包含于,IN后面是一個(gè)集合
  35. SELECT * FROM T_Employee WHERE FAge IN (23, 25, 28);
  36. --下面兩條查詢語(yǔ)句等價(jià)。
  37. SELECT * FROM T_Employee WHERE FAge>=23 AND FAge<=30;
  38. SELECT * FROM T_Employee WHERE FAge BETWEEN 23 AND 30;
  39. ----創(chuàng)建一張Employee表,以下幾個(gè)Demo中會(huì)用的這張表中的數(shù)據(jù)
  40. ----在SQL管理器中執(zhí)行下面的SQL語(yǔ)句,在T_Employee表中進(jìn)行練習(xí)
  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. --開(kāi)始對(duì)T_Employee表進(jìn)行各種操作
  57. --檢索所有字段
  58. select * from T_Employee
  59. --只檢索特定字段
  60. select FName,FAge from T_Employee
  61. --帶過(guò)濾條件的檢索
  62. select * from T_Employee
  63. where FSalary<5000
  64. --可更改顯示列名的關(guān)鍵字as,as—起別名
  65. select FName as 姓名,FAge as 年齡,FSalary as 薪水 from T_Employee 

#p#

二、SQL Server 中的數(shù)據(jù)類型

1、精確數(shù)字類型

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

2、字符型數(shù)據(jù)類型,MS建議用VarChar(max)代替Text

 
 
 
  1. Char
  2. VarChar
  3. Text

3、近似數(shù)字類型

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

4、Unicode字符串類型

 
 
 
  1. Nchar
  2. NvarChar
  3. Ntext

5、二進(jìn)制數(shù)據(jù)類型,MS建議VarBinary(Max)代替Image數(shù)據(jù)類型,max=231-1

 
 
 
  1. Binary(n) 存儲(chǔ)固定長(zhǎng)度的二進(jìn)制數(shù)據(jù)
  2. VarBinary(n) 存儲(chǔ)可變長(zhǎng)度的二進(jìn)制數(shù)據(jù),范圍在n~(1,8000)
  3. Image 存儲(chǔ)圖像信息

6、日期和時(shí)間類型,數(shù)據(jù)范圍不同,精確地不同

 
 
 
  1. DateTime
  2. SmallDateTime

7、特殊用途數(shù)據(jù)類型

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

#p#

三、SQL中的內(nèi)置函數(shù)

 
 
 
  1. --------------------------------------
  2. -----數(shù)據(jù)匯總-聚合函數(shù)---------
  3. --------------------------------------
  4. --查詢T_Employee表中數(shù)據(jù)條數(shù)
  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的員工總數(shù)
  15. selectCOUNT(*)astotalfromT_Employee
  16. whereFSalary>5000
  17. ------------------------------
  18. -----數(shù)據(jù)排序-------
  19. ------------------------------
  20. --按年齡排序升序,默認(rèn)是升序
  21. select*fromT_Employee
  22. orderbyFAgeASC
  23. --多個(gè)條件排序,先什么,后什么,在前一個(gè)條件相同的情況下,根據(jù)后一個(gè)條件進(jìn)行排列
  24. --where在orderby之前
  25. select*fromT_Employee
  26. orderbyFAgeASC,FSalaryDESC
  27. ------------------------------
  28. -----模糊匹配-------
  29. ------------------------------
  30. --通配符查詢
  31. --1.單字符通配符_
  32. --2.多字符通配符%
  33. --以DEV開(kāi)頭的任意個(gè)字符串
  34. select*fromT_Employee
  35. whereFNumberlike'DEV%'
  36. --以一個(gè)字符開(kāi)頭,om結(jié)尾的字符串
  37. select*fromT_Employee
  38. whereFNamelike'_om'
  39. --檢索姓名中包含m的字符
  40. select*fromT_Employee
  41. whereFNamelike'%m%'
  42. ------------------------------
  43. -----空值處理-------
  44. ------------------------------
  45. --null表示不知道,不是沒(méi)有值
  46. --null和其他值計(jì)算結(jié)果是null
  47. selectnull+1
  48. --查詢名字是null的數(shù)據(jù)
  49. select*fromT_Employee
  50. whereFNameisnull
  51. --查詢名字不為空null的數(shù)據(jù)
  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. -----數(shù)據(jù)分組-------
  69. ------------------------------
  70. SelectFAge,COUNT(*)fromT_Employee
  71. groupbyFAge
  72. --1.根據(jù)年齡進(jìn)行分組
  73. --2.再取出分組后的年齡的個(gè)數(shù)
  74. --注意:沒(méi)有出現(xiàn)在groupby子句中的字段,不能出現(xiàn)在select語(yǔ)句后的列名列表中(聚合函數(shù)除外)
  75. --groupby必須出現(xiàn)在where后面
  76. SelectFAge,AVG(FSalary),COUNT(*)fromT_Employee
  77. groupbyFAge
  78. --錯(cuò)誤用法
  79. SelectFAge,FName,COUNT(*)fromT_Employee
  80. groupbyFAge
  81. --加上where的groupby子句
  82. --groupby必須出現(xiàn)在where后面
  83. SelectFAge,AVG(FSalary),COUNT(*)fromT_Employee
  84. whereFAge>=25
  85. groupbyFAge
  86. --Having不能包含查不到的字段,只能包含聚合函數(shù)和本次查詢有關(guān)的字段
  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'無(wú)效,因?yàn)樵摿袥](méi)有包含在聚合函數(shù)或GROUPBY子句中
  94. --Having是對(duì)分組后信息的過(guò)濾,能用的列和select中能有的列是一樣的。
  95. --因此,having不能代替where
  96. selectFAge,COUNT(*)fromT_Employee
  97. groupbyFAge
  98. HavingFSalary>2500
  99. ------------------------------
  100. -----確定結(jié)果集行數(shù)-------
  101. ------------------------------
  102. --取出所有員工的信息,根據(jù)工資降序排列
  103. select*fromT_Employee
  104. orderbyFSalaryDESC
  105. --取出前三名員工的信息,根據(jù)工資降序排列
  106. selecttop3*fromT_Employee
  107. orderbyFSalaryDESC
  108. --根據(jù)工資取出排名在6-8的員工信息,按工資降排列
  109. selecttop3*fromT_Employee
  110. whereFNumbernotin
  111. (selecttop5FNumberfromT_EmployeeorderbyFSalaryDESC)
  112. orderbyFSalaryDESC
  113. ---修改數(shù)據(jù)表,添加字段,更新字段的值等操作。
  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. ------去掉重復(fù)數(shù)據(jù)------
  137. ------------------------------
  138. --所有員工的部門信息
  139. selectDistinctFDepartmentfromT_Employee;
  140. selectFDepartment,FSubCompany
  141. fromT_Employee
  142. --以上兩個(gè)例子結(jié)合起來(lái)比較,Distinct針對(duì)的是整行進(jìn)行比較的
  143. selectDistinctFDepartment,FSubCompany
  144. fromT_Employee
  145. -----------------------------
  146. -----聯(lián)合結(jié)果集Union--------
  147. ------------------------------
  148. --創(chuàng)建一個(gè)測(cè)試表T_TempEmployee,并插入數(shù)據(jù)
  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關(guān)鍵字,聯(lián)合2個(gè)結(jié)果
  158. --把2個(gè)查詢結(jié)果結(jié)合為1個(gè)查詢結(jié)果
  159. --要求:上下2個(gè)查詢語(yǔ)句的字段(個(gè)數(shù),名字,類型相容)必須一致
  160. selectFName,FagefromT_TempEmployee
  161. union
  162. selectFName,FagefromT_Employee
  163. selectFNumber,FName,Fage,FDepartmentfromT_Employee
  164. union
  165. selectFIdCardNumber,FName,Fage,'臨時(shí)工,無(wú)部門'fromT_TempEmployee
  166. ---UnionAll:不合并重復(fù)數(shù)據(jù)
  167. --Union:合并重復(fù)數(shù)據(jù)
  168. selectFName,FAgefromT_Employee
  169. unionall
  170. selectFName,FAgefromT_TempEmployee
  171. selectFAgefromT_Employee
  172. union
  173. selectFAgefromT_TempEmployee
  174. --注意:Union因?yàn)橐M(jìn)行重復(fù)值掃描,所以效率低,因此如果不是確定要合并重復(fù),那么就用Unionall
  175. --例子:報(bào)名
  176. select'正式員工最高年齡',MAX(FAge)fromT_Employee
  177. unionall
  178. select'正式員工最低年齡',MIN(FAge)fromT_Employee
  179. unionall
  180. select'臨時(shí)工最高年齡',MAX(FAge)fromT_TempEmployee
  181. unionall
  182. select'臨時(shí)工最低年齡',MIN(FAge)fromT_TempEmployee
  183. --查詢每位正式員工的信息,包括工號(hào),工資,并且在最后一行加上員工工資額合計(jì)
  184. selectFNumber,FSalaryfromT_Employee
  185. unionall
  186. select'工資額合計(jì)',SUM(FSalary)fromT_Employee

#p#

 
 
 
  1. ------------------------------
  2. -----SQL其他內(nèi)置函數(shù)------
  3. ------------------------------
  4. --1.數(shù)學(xué)函數(shù)
  5. --ABS():求絕對(duì)值
  6. --CEILING():舍入到最大整數(shù)
  7. --FLOOR():舍入到最小整數(shù)
  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)--第二個(gè)參數(shù)是精度,小數(shù)點(diǎn)后的位數(shù)
  15. selectROUND(-3.61,0)
  16. selectROUND(3.1415926,3)
  17. --2.字符串函數(shù)
  18. --LEN():計(jì)算字符串長(zhǎng)度
  19. --LOWER(),UPPER():轉(zhuǎn)大小寫
  20. --LTRIM():去掉字符串左側(cè)的空格
  21. --RTRIM():去掉字符串右側(cè)的空格
  22. --SUBSTRING(string,start_positoin,length):
  23. --索引從1開(kāi)始
  24. selectSUBSTRING('abc111',2,3)--結(jié)果是bc1
  25. selectFName,SUBSTRING(FName,2,2)fromT_Employee
  26. selectLEN('abc')--結(jié)果是3
  27. selectFName,LEN(FName)fromT_Employee
  28. --沒(méi)有可以同時(shí)既去掉左邊空格、又去掉右邊空格的TRIM()內(nèi)置函數(shù),所以先左后右的進(jìn)行TRim,當(dāng)然,你也可以先右后左
  29. selectLTRIM('abc'),RTRIM('abc'),LEN(LTRIM(RTRIM('abc')))
  30. --3.日期函數(shù)
  31. --GETDATE():獲取當(dāng)前日期時(shí)間
  32. --DATEADD(datepart,numbre,date):計(jì)算增加以后的日期,
  33. --參數(shù)date為待計(jì)算的日期;參數(shù)number為增量;參數(shù)datepart為計(jì)量單位,時(shí)間間隔單位;
  34. --DATEDIFF(datepart,startdate,enddate):計(jì)算2個(gè)日期之間的差額
  35. --DATEPART(datepart,date):返回一個(gè)日期的特定部分,比如年月日,時(shí)分秒等.
  36. /*
  37. 值縮寫(SqlServer)(Access和ASP)說(shuō)明
  38. YearYyyyyy年1753~9999
  39. QuarterQqq季1~4
  40. MonthMmm月1~12
  41. DayofyearDyy一年的日數(shù),一年中的第幾日1-366
  42. DayDdd日,1-31
  43. WeekdayDww一周的日數(shù),一周中的第幾日1-7
  44. WeekWkww周,一年中的第幾周0~51
  45. HourHhh時(shí)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. --取出每一年入職員工的個(gè)數(shù)V1
  58. selectDATEDIFF(year,FInDate,getdate()),COUNT(*)
  59. fromT_Employee
  60. groupbyDATEDIFF(year,FInDate,getdate())
  61. --取出每一年入職員工的個(gè)數(shù)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.類型轉(zhuǎn)換函數(shù)
  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.空值處理函數(shù)isNull
  77. --ISNULL(expression,value)
  78. selectISNULL(FName,'佚名')as姓名fromT_Employee
  79. --6.CASE函數(shù)用法:
  80. --1.單值判斷:相當(dāng)于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'會(huì)員'
  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. --這里有一道關(guān)于CASE用法的面試題
  109. --表T中有ABC三列,用SQL語(yǔ)句實(shí)現(xiàn):當(dāng)A列大于B列時(shí)選擇A列,否則選擇B列;
  110. --當(dāng)B列大于C列時(shí)選擇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. --球隊(duì)比賽那個(gè)題
  140. --有一張表T_Scroes,記錄比賽成績(jī):
  141. --DateNameScroe
  142. --2008-8-8拜仁勝
  143. --2008-8-9奇才勝
  144. --2008-8-8湖人勝
  145. --2008-8-10拜仁負(fù)
  146. --2008-8-8拜仁負(fù)
  147. --2008-8-12奇才勝
  148. --要求輸出下面格式:
  149. --Name勝負(fù)
  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'負(fù)');
  166. INSERT[T_Scores]([Date],[Name],[Score])VALUES(CAST(0x00009AF200000000ASDateTime),N'拜仁',N'負(fù)');
  167. INSERT[T_Scores]([Date],[Name],[Score])VALUES(CAST(0x00009AF600000000ASDateTime),N'奇才',N'勝');
  168. select*fromT_Scores
  169. --列出第一個(gè)表格
  170. --統(tǒng)計(jì)每支隊(duì)伍的勝負(fù)情況
  171. selectName,
  172. (
  173. caseScore
  174. whenN'勝'then1
  175. else0
  176. end
  177. )as勝,
  178. (
  179. caseScore
  180. whenN'負(fù)'then1
  181. else0
  182. end
  183. )as負(fù)
  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'負(fù)'then1
  197. else0
  198. end
  199. )as負(fù)
  200. fromT_Scores
  201. groupbyName
  202. --根據(jù)每個(gè)隊(duì)的勝負(fù)判斷出勝負(fù)的場(chǎng)數(shù)

#p#

 
 
 
  1. --題5)創(chuàng)建一張表,記錄電話呼叫員的工作流水,記錄呼叫員編號(hào),對(duì)方號(hào)碼,通話開(kāi)始時(shí)間,通話結(jié)束時(shí)間,。
  2. --創(chuàng)建一張表T_Callers,記錄電話呼叫員的工作流水,記錄呼叫員編號(hào)、對(duì)方號(hào)碼、通話開(kāi)始時(shí)間、通話結(jié)束時(shí)間。建表、插數(shù)據(jù)等最后都自己寫SQL語(yǔ)句。
  3. --要求:
  4. --1)輸出所有數(shù)據(jù)中通話時(shí)間最長(zhǎng)的5條記錄。
  5. --2)輸出所有數(shù)據(jù)中撥打長(zhǎng)途號(hào)碼(對(duì)方號(hào)碼以0開(kāi)頭)的總時(shí)長(zhǎng)。
  6. --3)輸出本月通話總時(shí)長(zhǎng)最多的前三個(gè)呼叫員的編號(hào)。
  7. --4)輸出本月?lián)艽螂娫挻螖?shù)最多的前三個(gè)呼叫員的編號(hào)。
  8. --5)輸出所有數(shù)據(jù)的撥號(hào)流水,并且在最后一行添加總呼叫時(shí)長(zhǎng)。
  9. --記錄呼叫員編號(hào)、對(duì)方號(hào)碼、通話時(shí)長(zhǎng)
  10. --......
  11. --匯總[市內(nèi)號(hào)碼總時(shí)長(zhǎng)][長(zhǎng)途號(hào)碼總時(shí)長(zhǎng)]
  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. --創(chuàng)建表
  24. createtableT_CallRecords(
  25. idintnotnull,
  26. CallerNumbervarchar(3),
  27. TellNumbervarchar(13),
  28. StartDateTImedatetime,
  29. EndDateTimedatetime,
  30. Primarykey(Id)
  31. );
  32. --插入數(shù)據(jù)
  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',<
    本文標(biāo)題:SQL語(yǔ)句相關(guān)概念及練習(xí)之基礎(chǔ)篇
    網(wǎng)站URL:http://uogjgqi.cn/article/dhdoohp.html
掃二維碼與項(xiàng)目經(jīng)理溝通

我們?cè)谖⑿派?4小時(shí)期待你的聲音

解答本文疑問(wèn)/技術(shù)咨詢/運(yùn)營(yíng)咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流