日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
SQL語句相關(guān)概念及練習(xí)之基礎(chǔ)篇

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

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

一、SQL 基礎(chǔ)知識

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

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ù)操縱語言)

1)插入語句

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

 
 
 
  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)刪除語句

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

4)查詢語句

查詢語句非常強大,幾乎可以查任意東西!

 
 
 
  1. -----------------
  2. ---- 數(shù)據(jù)檢索 -----
  3. -----------------
  4. --查詢不與任何表關(guān)聯(lián)的數(shù)據(jù).
  5. SELECT 1+1; --簡單運算
  6. select 1+2 as 結(jié)果
  7. SELECT newid();--查詢一個GUID字符創(chuàng)
  8. select GETDATE() as 日期 --查詢?nèi)掌?/li>
  9. --可以查詢SQLServer版本
  10. select @@VERSION as SQLServer版本
  11. --一次查詢多個
  12. select 1+1 結(jié)果, GETDATE() as 日期, @@VERSION as 版本, NEWID() as 編號
  13. --簡單的數(shù)據(jù)查詢.HelloWorld級別
  14. SELECT * FROM T_Employee;
  15. --只查詢需要的列.
  16. SELECT FNumber FROM T_Employee;
  17. --給列取別名.As關(guān)鍵字
  18. SELECT FNumber AS 編號, FName AS 姓名 FROM T_Employee;
  19. --使用 WHERE 查詢符合條件的記錄.
  20. SELECT FName FROM T_Employee WHERE FSalary<5000;
  21. --對表記錄進行排序,默認(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 中可以使用的邏輯運算符: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 參與的運算結(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. --查詢在某個范圍內(nèi)的數(shù)據(jù),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. ----創(chuàng)建一張Employee表,以下幾個Demo中會用的這張表中的數(shù)據(jù)
  40. ----在SQL管理器中執(zhí)行下面的SQL語句,在T_Employee表中進行練習(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. --開始對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. --可更改顯示列名的關(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、二進制數(shù)據(jù)類型,MS建議VarBinary(Max)代替Image數(shù)據(jù)類型,max=231-1

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

6、日期和時間類型,數(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. --多個條件排序,先什么,后什么,在前一個條件相同的情況下,根據(jù)后一個條件進行排列
  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結(jié)尾的字符串
  37. select*fromT_Employee
  38. whereFNamelike'_om'
  39. --檢索姓名中包含m的字符
  40. select*fromT_Employee
  41. whereFNamelike'%m%'
  42. ------------------------------
  43. -----空值處理-------
  44. ------------------------------
  45. --null表示不知道,不是沒有值
  46. --null和其他值計算結(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ù)年齡進行分組
  73. --2.再取出分組后的年齡的個數(shù)
  74. --注意:沒有出現(xiàn)在groupby子句中的字段,不能出現(xiàn)在select語句后的列名列表中(聚合函數(shù)除外)
  75. --groupby必須出現(xiàn)在where后面
  76. SelectFAge,AVG(FSalary),COUNT(*)fromT_Employee
  77. groupbyFAge
  78. --錯誤用法
  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'無效,因為該列沒有包含在聚合函數(shù)或GROUPBY子句中
  94. --Having是對分組后信息的過濾,能用的列和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. --以上兩個例子結(jié)合起來比較,Distinct針對的是整行進行比較的
  143. selectDistinctFDepartment,FSubCompany
  144. fromT_Employee
  145. -----------------------------
  146. -----聯(lián)合結(jié)果集Union--------
  147. ------------------------------
  148. --創(chuàng)建一個測試表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個結(jié)果
  158. --把2個查詢結(jié)果結(jié)合為1個查詢結(jié)果
  159. --要求:上下2個查詢語句的字段(個數(shù),名字,類型相容)必須一致
  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:不合并重復(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因為要進行重復(fù)值掃描,所以效率低,因此如果不是確定要合并重復(fù),那么就用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其他內(nèi)置函數(shù)------
  3. ------------------------------
  4. --1.數(shù)學(xué)函數(shù)
  5. --ABS():求絕對值
  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)--第二個參數(shù)是精度,小數(shù)點后的位數(shù)
  15. selectROUND(-3.61,0)
  16. selectROUND(3.1415926,3)
  17. --2.字符串函數(shù)
  18. --LEN():計算字符串長度
  19. --LOWER(),UPPER():轉(zhuǎn)大小寫
  20. --LTRIM():去掉字符串左側(cè)的空格
  21. --RTRIM():去掉字符串右側(cè)的空格
  22. --SUBSTRING(string,start_positoin,length):
  23. --索引從1開始
  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. --沒有可以同時既去掉左邊空格、又去掉右邊空格的TRIM()內(nèi)置函數(shù),所以先左后右的進行TRim,當(dāng)然,你也可以先右后左
  29. selectLTRIM('abc'),RTRIM('abc'),LEN(LTRIM(RTRIM('abc')))
  30. --3.日期函數(shù)
  31. --GETDATE():獲取當(dāng)前日期時間
  32. --DATEADD(datepart,numbre,date):計算增加以后的日期,
  33. --參數(shù)date為待計算的日期;參數(shù)number為增量;參數(shù)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一年的日數(shù),一年中的第幾日1-366
  42. DayDdd日,1-31
  43. WeekdayDww一周的日數(shù),一周中的第幾日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. --取出每一年入職員工的個數(shù)V1
  58. selectDATEDIFF(year,FInDate,getdate()),COUNT(*)
  59. fromT_Employee
  60. groupbyDATEDIFF(year,FInDate,getdate())
  61. --取出每一年入職員工的個數(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'會員'
  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語句實現(xiàn):當(dāng)A列大于B列時選擇A列,否則選擇B列;
  110. --當(dāng)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拜仁負(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. --列出第一個表格
  170. --統(tǒng)計每支隊伍的勝負(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ù)每個隊的勝負(fù)判斷出勝負(fù)的場數(shù)

#p#

 
 
 
  1. --題5)創(chuàng)建一張表,記錄電話呼叫員的工作流水,記錄呼叫員編號,對方號碼,通話開始時間,通話結(jié)束時間,。
  2. --創(chuàng)建一張表T_Callers,記錄電話呼叫員的工作流水,記錄呼叫員編號、對方號碼、通話開始時間、通話結(jié)束時間。建表、插數(shù)據(jù)等最后都自己寫SQL語句。
  3. --要求:
  4. --1)輸出所有數(shù)據(jù)中通話時間最長的5條記錄。
  5. --2)輸出所有數(shù)據(jù)中撥打長途號碼(對方號碼以0開頭)的總時長。
  6. --3)輸出本月通話總時長最多的前三個呼叫員的編號。
  7. --4)輸出本月?lián)艽螂娫挻螖?shù)最多的前三個呼叫員的編號。
  8. --5)輸出所有數(shù)據(jù)的撥號流水,并且在最后一行添加總呼叫時長。
  9. --記錄呼叫員編號、對方號碼、通話時長
  10. --......
  11. --匯總[市內(nèi)號碼總時長][長途號碼總時長]
  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',<
    網(wǎng)站題目:SQL語句相關(guān)概念及練習(xí)之基礎(chǔ)篇
    當(dāng)前地址:http://www.5511xx.com/article/dhdoohp.html