新聞中心
寫在前面:最近在上海找工作,前前后后面試了N家單位,發(fā)現(xiàn)各個公司對程序員的數(shù)據(jù)庫知識尤其是SQL語句的掌握程度有很高的要求,作為一名光榮的程序員,不會玩兒SQL語句走在街上根本不好意思和人打招呼!好了,廢話不多說,新手菜鳥同志們了注意了,這篇文章提供的例子很簡單,但是也很重要,請認真練習!別等到面試的時候被某些人嘲諷"唉!這年頭,會寫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ù)表
- --創(chuàng)建數(shù)據(jù)表
- create table Test(Id int not null, Age char(20));
- --創(chuàng)建數(shù)據(jù)表
- create table T_Person1(Id int not null,
- Name nvarchar(50),
- Age int null);
- --創(chuàng)建表,添加外鍵
- Create table T_Students(
- StudentNo char(4),
- CourseNo char(4),
- Score int,
- Primary key(StudentNo),
- Foreign key(CourseNo) References T_Course(CourseNo)
- );
2)修改表結(jié)構(gòu)
- --修改表結(jié)構(gòu),添加字段
- Alter table T_Person add NickName nvarchar(50) null;
- --修改表結(jié)構(gòu),刪除字段
- Alter table T_Person Drop NickName;
3)刪除數(shù)據(jù)表
- --刪除數(shù)據(jù)表
- Drop table T_Person;
- --刪除數(shù)據(jù)表
- drop table test
4)創(chuàng)建索引
- Create [Unique] Index <索引名> on <基本表名>(<列明序列>);
2、DML(數(shù)據(jù)操縱語言)
1)插入語句
- insert into T_Person1(Id,Name,Age) values(1,'Vicky',20)
- --插入一條據(jù)數(shù),字段和值必須前后對應(yīng)
- insert into T_Preson1(Id,Name,Age) values(2,'Tom',19)
- insert into T_Person1(Id,Name,Age) values(4,'Jim',19)
- insert into T_Person1(Id,Name,Age) values(5,'Green',20)
- insert into T_Person1(Id,Name,Age) values(6,'Hanmeimei',21)
- insert into T_Person1(Id,Name,Age) values(7,'Lilei',22)
- insert into T_Person1(Id,Name,Age) values(8,'Sky',23)
- insert into T_Person1(Id,Name,Age) values(newid(),'Tom',19)
2)更新語句
- --修改列,把所有的age字段改為30
- update T_Person1 set age=30
- --把所有的Age字段和Name字段設(shè)置為...
- update T_Person1 set Age=50,Name='Lucy'
- update T_Person1 set Name='Frankie' where Age=30
- update T_Person1 set Name=N'中文字符' where Age=20
- --中文字符前面最好加上N,以防出現(xiàn)亂碼
- update T_Person1 set Name=N'成年人' where Age=30 or Age=50
3)刪除語句
- delete from T_Person1
- --刪除表中全部數(shù)據(jù)
- delete from T_Person1 where Name='Tom'
- --根據(jù)條件刪除數(shù)據(jù)
4)查詢語句
查詢語句非常強大,幾乎可以查任意東西!
- -----------------
- ---- 數(shù)據(jù)檢索 -----
- -----------------
- --查詢不與任何表關(guān)聯(lián)的數(shù)據(jù).
- SELECT 1+1; --簡單運算
- select 1+2 as 結(jié)果
- SELECT newid();--查詢一個GUID字符創(chuàng)
- select GETDATE() as 日期 --查詢?nèi)掌?/li>
- --可以查詢SQLServer版本
- select @@VERSION as SQLServer版本
- --一次查詢多個
- select 1+1 結(jié)果, GETDATE() as 日期, @@VERSION as 版本, NEWID() as 編號
- --簡單的數(shù)據(jù)查詢.HelloWorld級別
- SELECT * FROM T_Employee;
- --只查詢需要的列.
- SELECT FNumber FROM T_Employee;
- --給列取別名.As關(guān)鍵字
- SELECT FNumber AS 編號, FName AS 姓名 FROM T_Employee;
- --使用 WHERE 查詢符合條件的記錄.
- SELECT FName FROM T_Employee WHERE FSalary<5000;
- --對表記錄進行排序,默認排序規(guī)則是ASC
- SELECT * FROM T_Employee ORDER BY FAge ASC,FSalary DESC;
- --ORDER BY 子句要放在 WHERE 子句之后.
- SELECT * FROM T_Employee WHERE FAge>23 ORDER BY FAge DESC,FSalary DESC;
- --WHERE 中可以使用的邏輯運算符:or、and、not、<、>、=、>=、<=、!=、<>等.
- --模糊匹配,首字母未知.
- SELECT * FROM T_Employee WHERE FName LIKE '_arry';
- --模糊匹配,前后多個字符未知.
- SELECT * FROM T_Employee WHERE FName LIKE '%n%';
- --NULL 表示"不知道",有 NULL 參與的運算結(jié)果一般都為 NULL.
- --查詢數(shù)據(jù)是否為 NULL,不能用 = 、!= 或 <>,要用IS關(guān)鍵字
- SELECT * FROM T_Employee WHERE FName IS NULL;
- SELECT * FROM T_Employee WHERE FName IS NOT NULL;
- --查詢在某個范圍內(nèi)的數(shù)據(jù),IN 表示包含于,IN后面是一個集合
- SELECT * FROM T_Employee WHERE FAge IN (23, 25, 28);
- --下面兩條查詢語句等價。
- SELECT * FROM T_Employee WHERE FAge>=23 AND FAge<=30;
- SELECT * FROM T_Employee WHERE FAge BETWEEN 23 AND 30;
- ----創(chuàng)建一張Employee表,以下幾個Demo中會用的這張表中的數(shù)據(jù)
- ----在SQL管理器中執(zhí)行下面的SQL語句,在T_Employee表中進行練習
- create table T_Employee(FNumber varchar(20),
- FName varchar(20),
- FAge int,
- FSalary Numeric(10,2),
- primary key (FNumber)
- )
- insert into T_Employee(FNumber,FName,FAge,FSalary) values('DEV001','Tom',25,8300)
- insert into T_Employee(FNumber,FName,FAge,FSalary) values('DEV002','Jerry',28,2300.83)
- insert into T_Employee(FNumber,FName,FAge,FSalary) values('SALES001','Lucy',25,5000)
- insert into T_Employee(FNumber,FName,FAge,FSalary) values('SALES002','Lily',25,6200)
- insert into T_Employee(FNumber,FName,FAge,FSalary) values('SALES003','Vicky',25,1200)
- insert into T_Employee(FNumber,FName,FAge,FSalary) values('HR001','James',23,2200.88)
- insert into T_Employee(FNumber,FName,FAge,FSalary) values('HR002','Tom',25,5100.36)
- insert into T_Employee(FNumber,FName,FAge,FSalary) values('IT001','Tom',28,3900)
- insert into T_Employee(FNumber,FAge,FSalary) values('IT002',25,3800)
- --開始對T_Employee表進行各種操作
- --檢索所有字段
- select * from T_Employee
- --只檢索特定字段
- select FName,FAge from T_Employee
- --帶過濾條件的檢索
- select * from T_Employee
- where FSalary<5000
- --可更改顯示列名的關(guān)鍵字as,as—起別名
- select FName as 姓名,FAge as 年齡,FSalary as 薪水 from T_Employee
#p#
二、SQL Server 中的數(shù)據(jù)類型
1、精確數(shù)字類型
- bigint
- int
- smallint
- tinyint
- bit
- money
- smallmoney
2、字符型數(shù)據(jù)類型,MS建議用VarChar(max)代替Text
- Char
- VarChar
- Text
3、近似數(shù)字類型
- Decimal
- Numeric
- Real
- Float
4、Unicode字符串類型
- Nchar
- NvarChar
- Ntext
5、二進制數(shù)據(jù)類型,MS建議VarBinary(Max)代替Image數(shù)據(jù)類型,max=231-1
- Binary(n) 存儲固定長度的二進制數(shù)據(jù)
- VarBinary(n) 存儲可變長度的二進制數(shù)據(jù),范圍在n~(1,8000)
- Image 存儲圖像信息
6、日期和時間類型,數(shù)據(jù)范圍不同,精確地不同
- DateTime
- SmallDateTime
7、特殊用途數(shù)據(jù)類型
- Cursor
- Sql-variant
- Table
- TimeStamp
- UniqueIdentifier
- XML
#p#
三、SQL中的內(nèi)置函數(shù)
- --------------------------------------
- -----數(shù)據(jù)匯總-聚合函數(shù)---------
- --------------------------------------
- --查詢T_Employee表中數(shù)據(jù)條數(shù)
- selectCOUNT(*)fromT_Employee
- --查詢工資最高的人
- selectMAX(FSalary)asTop1fromT_Employee
- --查詢工資最低的人
- selectMin(FSalary)asBottom1fromT_Employee
- --查詢工資的平均水平
- selectAvg(FSalary)as平均水平fromT_Employee
- --所有工資的和
- selectSUM(FSalary)as總工資fromT_Employee
- --查詢工資大于5K的員工總數(shù)
- selectCOUNT(*)astotalfromT_Employee
- whereFSalary>5000
- ------------------------------
- -----數(shù)據(jù)排序-------
- ------------------------------
- --按年齡排序升序,默認是升序
- select*fromT_Employee
- orderbyFAgeASC
- --多個條件排序,先什么,后什么,在前一個條件相同的情況下,根據(jù)后一個條件進行排列
- --where在orderby之前
- select*fromT_Employee
- orderbyFAgeASC,FSalaryDESC
- ------------------------------
- -----模糊匹配-------
- ------------------------------
- --通配符查詢
- --1.單字符通配符_
- --2.多字符通配符%
- --以DEV開頭的任意個字符串
- select*fromT_Employee
- whereFNumberlike'DEV%'
- --以一個字符開頭,om結(jié)尾的字符串
- select*fromT_Employee
- whereFNamelike'_om'
- --檢索姓名中包含m的字符
- select*fromT_Employee
- whereFNamelike'%m%'
- ------------------------------
- -----空值處理-------
- ------------------------------
- --null表示不知道,不是沒有值
- --null和其他值計算結(jié)果是null
- selectnull+1
- --查詢名字是null的數(shù)據(jù)
- select*fromT_Employee
- whereFNameisnull
- --查詢名字不為空null的數(shù)據(jù)
- select*fromT_Employee
- whereFNameisnotnull
- --年齡是23,25,28中的員工
- select*fromT_Employee
- whereFAge=23orFAge=25orFAge=28
- --或者用in集合查詢
- --年齡是23,25,28中的員工
- select*fromT_Employee
- whereFAgein(23,25,28)
- --年齡在20到25之間的員工信息
- select*fromT_Employee
- whereFAge>20andFAge<25
- --年齡在20到25之間的員工信息,包含25
- select*fromT_Employee
- whereFAgebetween20and25
- ------------------------------
- -----數(shù)據(jù)分組-------
- ------------------------------
- SelectFAge,COUNT(*)fromT_Employee
- groupbyFAge
- --1.根據(jù)年齡進行分組
- --2.再取出分組后的年齡的個數(shù)
- --注意:沒有出現(xiàn)在groupby子句中的字段,不能出現(xiàn)在select語句后的列名列表中(聚合函數(shù)除外)
- --groupby必須出現(xiàn)在where后面
- SelectFAge,AVG(FSalary),COUNT(*)fromT_Employee
- groupbyFAge
- --錯誤用法
- SelectFAge,FName,COUNT(*)fromT_Employee
- groupbyFAge
- --加上where的groupby子句
- --groupby必須出現(xiàn)在where后面
- SelectFAge,AVG(FSalary),COUNT(*)fromT_Employee
- whereFAge>=25
- groupbyFAge
- --Having不能包含查不到的字段,只能包含聚合函數(shù)和本次查詢有關(guān)的字段
- selectFAge,COUNT(*)fromT_Employee
- groupbyFAge
- HavingCOUNT(*)>1
- selectFAge,COUNT(*)fromT_Employee
- whereFSalary>2500
- groupbyFAge
- --HAVING子句中的列'T_Employee.FSalary'無效,因為該列沒有包含在聚合函數(shù)或GROUPBY子句中
- --Having是對分組后信息的過濾,能用的列和select中能有的列是一樣的。
- --因此,having不能代替where
- selectFAge,COUNT(*)fromT_Employee
- groupbyFAge
- HavingFSalary>2500
- ------------------------------
- -----確定結(jié)果集行數(shù)-------
- ------------------------------
- --取出所有員工的信息,根據(jù)工資降序排列
- select*fromT_Employee
- orderbyFSalaryDESC
- --取出前三名員工的信息,根據(jù)工資降序排列
- selecttop3*fromT_Employee
- orderbyFSalaryDESC
- --根據(jù)工資取出排名在6-8的員工信息,按工資降排列
- selecttop3*fromT_Employee
- whereFNumbernotin
- (selecttop5FNumberfromT_EmployeeorderbyFSalaryDESC)
- orderbyFSalaryDESC
- ---修改數(shù)據(jù)表,添加字段,更新字段的值等操作。
- altertableT_EmployeeaddFSubCompanyvarchar(20)
- altertableT_EmployeeaddFDepartmentvarchar(20)
- updateT_EmployeesetFSubCompany='Beijing',FDepartment='Development'
- whereFNumber='DEV001';
- updateT_EmployeesetFSubCompany='ShenZhen',FDepartment='Development'
- whereFNumber='DEV002';
- updateT_EmployeesetFSubCompany='Beijing',FDepartment='HumanResource'
- whereFNumber='HR001';
- updateT_EmployeesetFSubCompany='Beijing',FDepartment='HumanResource'
- whereFNumber='HR002';
- updateT_EmployeesetFSubCompany='Beijing',FDepartment='InfoTech'
- whereFNumber='IT001';
- updateT_EmployeesetFSubCompany='ShenZhen',FDepartment='InfoTech'
- whereFNumber='IT002'
- updateT_EmployeesetFSubCompany='Beijing',FDepartment='Sales'
- whereFNumber='SALES001';
- updateT_EmployeesetFSubCompany='Beijing',FDepartment='Sales'
- whereFNumber='SALES002';
- updateT_EmployeesetFSubCompany='ShenZhen',FDepartment='Sales'
- whereFNumber='SALES003';
- select*fromT_Employee
- ------------------------------
- ------去掉重復數(shù)據(jù)------
- ------------------------------
- --所有員工的部門信息
- selectDistinctFDepartmentfromT_Employee;
- selectFDepartment,FSubCompany
- fromT_Employee
- --以上兩個例子結(jié)合起來比較,Distinct針對的是整行進行比較的
- selectDistinctFDepartment,FSubCompany
- fromT_Employee
- -----------------------------
- -----聯(lián)合結(jié)果集Union--------
- ------------------------------
- --創(chuàng)建一個測試表T_TempEmployee,并插入數(shù)據(jù)
- CreateTableT_TempEmployee(FIdCardNumbervarchar(20),FNamevarchar(20),FAgeint,Primarykey(FIdCardNumber));
- insertintoT_TempEmployee(FIdCardNumber,FName,FAge)values('1234567890121','Sarani',33);
- insertintoT_TempEmployee(FIdCardNumber,FName,FAge)values('1234567890122','Tom',26);
- insertintoT_TempEmployee(FIdCardNumber,FName,FAge)values('1234567890123','Yamaha',38);
- insertintoT_TempEmployee(FIdCardNumber,FName,FAge)values('1234567890124','Tina',36);
- insertintoT_TempEmployee(FIdCardNumber,FName,FAge)values('1234567890125','Konkaya',29);
- insertintoT_TempEmployee(FIdCardNumber,FName,FAge)values('1234567890126','Foortia',29);
- select*fromT_TempEmployee
- --Union關(guān)鍵字,聯(lián)合2個結(jié)果
- --把2個查詢結(jié)果結(jié)合為1個查詢結(jié)果
- --要求:上下2個查詢語句的字段(個數(shù),名字,類型相容)必須一致
- selectFName,FagefromT_TempEmployee
- union
- selectFName,FagefromT_Employee
- selectFNumber,FName,Fage,FDepartmentfromT_Employee
- union
- selectFIdCardNumber,FName,Fage,'臨時工,無部門'fromT_TempEmployee
- ---UnionAll:不合并重復數(shù)據(jù)
- --Union:合并重復數(shù)據(jù)
- selectFName,FAgefromT_Employee
- unionall
- selectFName,FAgefromT_TempEmployee
- selectFAgefromT_Employee
- union
- selectFAgefromT_TempEmployee
- --注意:Union因為要進行重復值掃描,所以效率低,因此如果不是確定要合并重復,那么就用Unionall
- --例子:報名
- select'正式員工最高年齡',MAX(FAge)fromT_Employee
- unionall
- select'正式員工最低年齡',MIN(FAge)fromT_Employee
- unionall
- select'臨時工最高年齡',MAX(FAge)fromT_TempEmployee
- unionall
- select'臨時工最低年齡',MIN(FAge)fromT_TempEmployee
- --查詢每位正式員工的信息,包括工號,工資,并且在最后一行加上員工工資額合計
- selectFNumber,FSalaryfromT_Employee
- unionall
- select'工資額合計',SUM(FSalary)fromT_Employee
#p#
- ------------------------------
- -----SQL其他內(nèi)置函數(shù)------
- ------------------------------
- --1.數(shù)學函數(shù)
- --ABS():求絕對值
- --CEILING():舍入到最大整數(shù)
- --FLOOR():舍入到最小整數(shù)
- --ROUND():四舍五入
- selectABS(-3)
- selectCEILING(3.33)
- selectCEILING(-3.61)
- selectFLOOR(2.98)
- selectFLOOR(-3.61)
- selectROUND(-3.61,1)--第二個參數(shù)是精度,小數(shù)點后的位數(shù)
- selectROUND(-3.61,0)
- selectROUND(3.1415926,3)
- --2.字符串函數(shù)
- --LEN():計算字符串長度
- --LOWER(),UPPER():轉(zhuǎn)大小寫
- --LTRIM():去掉字符串左側(cè)的空格
- --RTRIM():去掉字符串右側(cè)的空格
- --SUBSTRING(string,start_positoin,length):
- --索引從1開始
- selectSUBSTRING('abc111',2,3)--結(jié)果是bc1
- selectFName,SUBSTRING(FName,2,2)fromT_Employee
- selectLEN('abc')--結(jié)果是3
- selectFName,LEN(FName)fromT_Employee
- --沒有可以同時既去掉左邊空格、又去掉右邊空格的TRIM()內(nèi)置函數(shù),所以先左后右的進行TRim,當然,你也可以先右后左
- selectLTRIM('abc'),RTRIM('abc'),LEN(LTRIM(RTRIM('abc')))
- --3.日期函數(shù)
- --GETDATE():獲取當前日期時間
- --DATEADD(datepart,numbre,date):計算增加以后的日期,
- --參數(shù)date為待計算的日期;參數(shù)number為增量;參數(shù)datepart為計量單位,時間間隔單位;
- --DATEDIFF(datepart,startdate,enddate):計算2個日期之間的差額
- --DATEPART(datepart,date):返回一個日期的特定部分,比如年月日,時分秒等.
- /*
- 值縮寫(SqlServer)(Access和ASP)說明
- YearYyyyyy年1753~9999
- QuarterQqq季1~4
- MonthMmm月1~12
- DayofyearDyy一年的日數(shù),一年中的第幾日1-366
- DayDdd日,1-31
- WeekdayDww一周的日數(shù),一周中的第幾日1-7
- WeekWkww周,一年中的第幾周0~51
- HourHhh時0~23
- MinuteMin分鐘0~59
- SecondSss秒0~59
- MillisecondMs-毫秒0~999
- */
- selectDATEADD(DAY,3,getdate())
- selectDATEADD(MONTH,-3,getdate())
- selectDATEADD(HOUR,8,getdate())
- selectDATEDIFF(YEAR,'1989-05-01',GETDATE())
- selectDATEDIFF(HH,GETDATE(),DATEADD(DAY,-3,GETDATE()))
- --查詢員工的工齡,年為單位
- selectFName,FInDate,DATEDIFF(year,FInDate,getdate())as工齡fromT_Employee
- --取出每一年入職員工的個數(shù)V1
- selectDATEDIFF(year,FInDate,getdate()),COUNT(*)
- fromT_Employee
- groupbyDATEDIFF(year,FInDate,getdate())
- --取出每一年入職員工的個數(shù)V2
- selectDATEPART(YEAR,FInDate),COUNT(*)
- fromT_Employee
- groupbyDATEPART(YEAR,FInDate)
- selectDATEPART(YEAR,GETDATE())
- selectDATEPART(MONTH,GETDATE())
- selectDATEPART(DAY,GETDATE())
- selectDATEPART(HH,GETDATE())
- selectDATEPART(MINUTE,GETDATE())
- selectDATEPART(SECOND,GETDATE())
- --4.類型轉(zhuǎn)換函數(shù)
- --CAST(expressionasdata_type)
- --CONVERT(data_type,expression)
- selectCAST('123'asint),CAST('2010-09-08'asdatetime),
- CONVERT(datetime,'2010-09-08'),CONVERT(varchar(20),123)
- --5.空值處理函數(shù)isNull
- --ISNULL(expression,value)
- selectISNULL(FName,'佚名')as姓名fromT_Employee
- --6.CASE函數(shù)用法:
- --1.單值判斷:相當于switch.case
- --CASEexpression
- --WHENvalue1thenreturnvalue1
- --WHENvalue2thenreturnvalue2
- --WHENvalue3thenreturnvalue3
- --ELSEdefault_return_value
- --END
- --判斷客戶類型
- selectFName,
- (
- caseFLevel
- when1then'普通客戶'
- when2then'會員'
- when3then'VIP'
- else'未知客戶類型'
- End
- )as客戶類型
- fromT_Customer
- --收入水平查詢
- selectFName,
- (
- case
- whenFSalary<2000then'低收入'
- whenFSalary>=2000andFSalary<=5000then'中等收入'
- else'高收入'
- end
- )as收入水平
- fromT_Employee
- --這里有一道關(guān)于CASE用法的面試題
- --表T中有ABC三列,用SQL語句實現(xiàn):當A列大于B列時選擇A列,否則選擇B列;
- --當B列大于C列時選擇B列,否則選擇C列。
- select
- (
- case
- whena>bthenaelseb
- end
- ),
- (
- case
- whenb>cthenbelsec
- end
- )
- fromT
- ---------------------------------------
- selectFNumber,
- (
- case
- whenFAmount>0thenFAmount
- else0
- end
- )as收入,
- (
- case
- whenFAmount<0thenABS(FAmount)
- else0
- end
- )as支出
- fromT
- -----------------------------------------
- --球隊比賽那個題
- --有一張表T_Scroes,記錄比賽成績:
- --DateNameScroe
- --2008-8-8拜仁勝
- --2008-8-9奇才勝
- --2008-8-8湖人勝
- --2008-8-10拜仁負
- --2008-8-8拜仁負
- --2008-8-12奇才勝
- --要求輸出下面格式:
- --Name勝負
- --拜仁12
- --湖人10
- --奇才20
- --注意:在中文字符串前加N,比如N'勝'
- createtableT_Scores(
- [Date]datetimenullcollate
- [Name]nvarchar(50)
- )
- CREATETABLE[T_Scores]([Date][datetime]NULL,
- [Name][nvarchar](50)COLLATEChinese_PRC_CI_ASNULL,
- [Score][nvarchar](50)COLLATEChinese_PRC_CI_ASNULL
- );
- INSERT[T_Scores]([Date],[Name],[Score])VALUES(CAST(0x00009AF200000000ASDateTime),N'拜仁',N'勝');
- INSERT[T_Scores]([Date],[Name],[Score])VALUES(CAST(0x00009AF300000000ASDateTime),N'奇才',N'勝');
- INSERT[T_Scores]([Date],[Name],[Score])VALUES(CAST(0x00009AF300000000ASDateTime),N'湖人',N'勝');
- INSERT[T_Scores]([Date],[Name],[Score])VALUES(CAST(0x00009AF400000000ASDateTime),N'拜仁',N'負');
- INSERT[T_Scores]([Date],[Name],[Score])VALUES(CAST(0x00009AF200000000ASDateTime),N'拜仁',N'負');
- INSERT[T_Scores]([Date],[Name],[Score])VALUES(CAST(0x00009AF600000000ASDateTime),N'奇才',N'勝');
- select*fromT_Scores
- --列出第一個表格
- --統(tǒng)計每支隊伍的勝負情況
- selectName,
- (
- caseScore
- whenN'勝'then1
- else0
- end
- )as勝,
- (
- caseScore
- whenN'負'then1
- else0
- end
- )as負
- fromT_Scores
- selectName,
- sum
- (
- caseScore
- whenN'勝'then1
- else0
- end
- )as勝,
- sum
- (
- caseScore
- whenN'負'then1
- else0
- end
- )as負
- fromT_Scores
- groupbyName
- --根據(jù)每個隊的勝負判斷出勝負的場數(shù)
#p#
- --題5)創(chuàng)建一張表,記錄電話呼叫員的工作流水,記錄呼叫員編號,對方號碼,通話開始時間,通話結(jié)束時間,。
- --創(chuàng)建一張表T_Callers,記錄電話呼叫員的工作流水,記錄呼叫員編號、對方號碼、通話開始時間、通話結(jié)束時間。建表、插數(shù)據(jù)等最后都自己寫SQL語句。
- --要求:
- --1)輸出所有數(shù)據(jù)中通話時間最長的5條記錄。
- --2)輸出所有數(shù)據(jù)中撥打長途號碼(對方號碼以0開頭)的總時長。
- --3)輸出本月通話總時長最多的前三個呼叫員的編號。
- --4)輸出本月?lián)艽螂娫挻螖?shù)最多的前三個呼叫員的編號。
- --5)輸出所有數(shù)據(jù)的撥號流水,并且在最后一行添加總呼叫時長。
- --記錄呼叫員編號、對方號碼、通話時長
- --......
- --匯總[市內(nèi)號碼總時長][長途號碼總時長]
- --IdCallerNumberTellNumberStartDateTimeEndDateTime
- --1001020888888882010-7-1010:012010-7-1010:05
- --2001020888888882010-7-1113:412010-7-1113:52
- --3001898989892010-7-1114:422010-7-1114:49
- --4002021883689812010-7-1321:042010-7-1321:18
- --5002767676762010-6-2920:152010-6-2920:30
- --6001022888782432010-7-1513:402010-7-1513:56
- --7003672546862010-7-1311:062010-7-1311:19
- --8003862314452010-6-1919:192010-6-1919:25
- --9001874223682010-6-1919:252010-6-1919:36
- --10004400458622452010-6-1919:502010-6-1919:59
- --創(chuàng)建表
- createtableT_CallRecords(
- idintnotnull,
- CallerNumbervarchar(3),
- TellNumbervarchar(13),
- StartDateTImedatetime,
- EndDateTimedatetime,
- Primarykey(Id)
- );
- --插入數(shù)據(jù)
- insertintoT_CallRecords(Id,CallerNumber,TellNumber,StartDateTime,EndDateTIme)
- values(1,'001','02088888888','2010-7-1010:01','2010-7-1010:05');
- INSERTINTOT_CallRecords(Id,CallerNumber,TellNumber,StartDateTime,EndDateTime)
- VALUES(2,'002','02088888888','2010-7-1113:41','2010-7-1113:52');
- INSERTINTOT_CallRecords(Id,CallerNumber,TellNumber,StartDateTime,EndDateTime)
- VALUES(3,'003','89898989','2010-7-1114:42','2010-7-1114:49');
- INSERTINTOT_CallRecords(Id,CallerNumber,TellNumber,StartDateTime,EndDateTime)
- VALUES(4,'004','02188368981','2010-7-1321:04','2010-7-1321:18');
- INSERTINTOT_CallRecords(Id,CallerNumber,TellNumber,StartDateTime,EndDateTime)
- VALUES(5,'005',<
網(wǎng)站名稱:SQL語句相關(guān)概念及練習之基礎(chǔ)篇
鏈接地址:http://m.fisionsoft.com.cn/article/dhdoohp.html


咨詢
建站咨詢
