SQLServer常用關鍵字數(shù)據(jù)類型和常用語法_第1頁
SQLServer常用關鍵字數(shù)據(jù)類型和常用語法_第2頁
SQLServer常用關鍵字數(shù)據(jù)類型和常用語法_第3頁
SQLServer常用關鍵字數(shù)據(jù)類型和常用語法_第4頁
SQLServer常用關鍵字數(shù)據(jù)類型和常用語法_第5頁
已閱讀5頁,還剩16頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、SQL Server 2008常用關鍵字、數(shù)據(jù)類型和常用語法常用關鍵字:SQL server 2008一共大約有180多個關鍵字。簡要分為主要關鍵字、輔助關鍵字和函數(shù)類關鍵字。本文就常用的這三類關鍵字進行語法說明和用例。說明:1、比較好的習慣是,數(shù)據(jù)庫名以D_開頭,表名用T_開頭,字段名以F_開頭,這樣可以防止和關鍵字重名。2、如果確實用到了系統(tǒng)關鍵字,就要在關鍵上加方括號,以與關鍵字進行區(qū)別。例如有一個用戶表被命名為USER,則查詢該表內(nèi)容的時候:SELECT * FROM USER語句是錯誤的,應該是SELECT * FROM USER。因為USER是關鍵字。編號關鍵字應用場景主要關鍵字1

2、CREATE創(chuàng)建表2ALTER修改表結構3DROP刪除數(shù)據(jù)庫和表4INSERT插入表數(shù)據(jù)5INTO與INSERT連用,插入表數(shù)據(jù)6VALUES插入表數(shù)據(jù)時,指定列值7UPDATE更新表數(shù)據(jù)8SET與UPDATE連用,設定列值9SELECT查詢表數(shù)據(jù)10FROM從哪個表中查詢11WHERE查詢表數(shù)據(jù)的條件12DATABASE數(shù)據(jù)庫13TABLE數(shù)據(jù)表14NOT15NULL空值16IDENTITY(1,1)標識列17CONSTRAINT約束,后邊跟約束名18PRIMARY 主鍵,PRIMARY KEY(列名)19FOREIGN外鍵 FOREIGN KEY(列名)20KEY21REFERENCES把

3、印作參考,指定外鍵的時候用22CHECKCHECK約束23UNIQUE唯一性約束24COLUMN列25DEFAULT默認值26AND和27OR或28TRUNCATE截斷,快速清空表內(nèi)數(shù)據(jù)29ORDER常與by連用30BY與GROUP或ORDER連用31ASC升序32DESC降序33AS列名別稱34DELETE刪除表數(shù)據(jù)35LIKE通配符36IS用于NULL值37IN離散值38BETWEEN連續(xù)值,常與and連用39GROUP分組,常與by連用40HAVING對GROUP BY分組內(nèi)的數(shù)據(jù)進行過濾41TOP篩選結果集42DISTINCT去重43UNION44ALL45CASE類似與C#中的SWI

4、TCH-CASE語法,查詢離散值46ELSE設定case的默認值47END結束case語句48WHEN與case連用49VIEW視圖50INDEX索引51JOIN聯(lián)合查詢52ON與JOIN連用數(shù)據(jù)類型:SQL Server 2008一共有36種數(shù)據(jù)類型。具體如下:編號數(shù)據(jù)類型存儲空間字符類型說明整數(shù)型(4)1tinyint1字節(jié)取值范圍:0-2552smallint2字節(jié)取值范圍:-2768-327673int4字節(jié)取值范圍:-231231-14bigint8字節(jié)取值范圍:-263263-1浮點類型(6)5decimal(p,s)517字節(jié)取值范圍:-1038+11038-1。p (有效位數(shù),

5、p的取值小于38),可儲存的最大十進位數(shù)總數(shù),小數(shù)點左右兩側都包括在內(nèi)。s (小數(shù)位數(shù),0 <= s <= p <= 38) 小數(shù)點右側的小數(shù)位數(shù)。例如:decimal(3,1)表示,一共3位有效位,其中整數(shù)部分2位,小數(shù)部分1位,最大值是99.9,最小值是-99.96numeric(p,s)4字節(jié)取值范圍:-214,768.3648-214,768.3647。用法類似decimal7smallmoney4字節(jié)取值范圍:214748.3648214748.3647。主要是用于貨幣8money8字節(jié)取值范圍:-3.4383.438主要用于貨幣9real4或8字節(jié)取值范圍:-3.

6、40E38-1.18E-38,0,1.18E-383.40E3810float4字節(jié)取值范圍:-3.4E383.4E38字符類型(8)11char(n)每字符1字節(jié),最大可達8000字節(jié)。ANSI字符,會用空格填充。12nchar(n)每字符2字節(jié),最大可達4000字節(jié)。UNICODE字符,會用空格填充。13varchar(n)每字符1字節(jié),最大可達8000字節(jié)。ANSI字符,可變長度,不會用空格填充。14varchar(MAX)ANSI字符,最大可達2G15nvarchar(n)每字符2字節(jié),最大可達4000字節(jié)。UNICODE字符,可變長度,不會用空格填充。16nvarchar(MAX)最

7、多為2311(2147483647)字符17text每字符1字節(jié),最大可達2G。18ntext每字符2字節(jié),最大可達2G。二進制數(shù)據(jù)類型(5)19bit1比特NULL,0或120binary(n)固定長度二進制數(shù)據(jù),最高可達8000字節(jié)。21varbinary可變長度二進制數(shù)據(jù),最高可達8000字節(jié)。22varbinary(MAX)最多為232-1字節(jié)23image可變長度二進制數(shù)據(jù),最高可達2GB。日期和時間類型(7)24smalldatetime25date3字節(jié)精度一天,支持范圍01/01/000031/12/9999。26datetime8字節(jié)0.00333秒,支持的范圍是'1

8、000-01-01 00:00:00'到'9999-12-31 23:59:59'。以'YYYY-MM-DD HH:MM:SS'格式顯示DATETIME值27datetime2(n)6-8字節(jié)100納秒28datetimeoffset(n)8-10字節(jié)100納秒29time35字節(jié)100納秒30timestampTIMESTAMP值返回后顯示為'YYYY-MM-DD HH:MM:SS'格式的字符串。其他數(shù)據(jù)類型(6)31xml用于存儲xml格式的文檔,最大可達2GB,支持128級層次。32geography地理數(shù)據(jù)。33geometry幾

9、何數(shù)據(jù)。34hierarchyid主要解決的問題是擁有層次關系的表格,通常用來建立樹形結構35sql_variant用于存儲 SQL Server 2005 支持的各種數(shù)據(jù)類型(不包括 text、ntext、image、timestamp 和 sql_variant)的值。對于 sql_variant 數(shù)據(jù)類型,必須先將它轉換為其基本數(shù)據(jù)類型值,然后才能參與諸如加減這類運算36uniqueidentifierUniqueidentifier 是全局唯一的標識,可存儲16字節(jié)的二進制值,其作用與全局唯一標記符(GUID)一樣,一般用來做主鍵。常用語法:一、數(shù)據(jù)庫【創(chuàng)建數(shù)據(jù)庫】CREATE DAT

10、ABASE <dbname>【修改數(shù)據(jù)庫】ALTER DATABASE <dbname>【刪除數(shù)據(jù)庫】DROP DATABASE <dbname>二、表結構【創(chuàng)建數(shù)據(jù)表】1、設定字段是允許空,非空、標識列,自增和主鍵約束。CREATE TABLE T_CUSTOMER -表名(CUSTOMERID INT IDENTITY(1,1),-客戶ID,標識列,從開始,每次自增COMPANYNAME NVARCHAR(50) NOT NULL,-,如果不顯示指明NOT NULL,系統(tǒng)默認是允許空的USERNAME NVARCHAR(10) NOT NULL,-聯(lián)系人

11、姓名,非空PHONENUMBER CHAR(11) NULL,-聯(lián)系電話,允許為空CONSTRAINT T_CUSTOMER_PrimaryKey PRIMARY KEY (CUSTOMERID) -設定USERID為主鍵,用括號括起來/*每個單詞之間是空格隔開,每個字段之間用單引號隔開,整個字段定義部分用括號括起來*/*T_RegUser_PrimaryKey是約束名*/2、設定字段是UNIQUEIDENTIFIER數(shù)據(jù)類型,唯一性約束,CHECK約束和默認值約束。CREATE TABLE T_CUSTOMER (CUSTOMERID UNIQUEIDENTIFIER UNIQUE,-客戶I

12、D,UNIQUEIDENTIFIER類型,唯一性約束COMPANYNAME NVARCHAR(50) NOT NULL UNIQUE,-公司名稱,非空,唯一性約束USERNAME NVARCHAR(10) NOT NULL,PHONENUMBER CHAR(11) NULL,AGE TINYINT NULL CHECK(AGE>0),-聯(lián)系人年齡,允許空,check約束必須大于MODIFIEDDATE DATE NULL CONSTRAINT T_CUSTOMER_DEFAULT DEFAULT GETDATE(),-默認值約束,并調(diào)用SQL函數(shù)GETDATE()CONSTRAINT T

13、_CUSTOMER_PrimaryKey PRIMARY KEY (CUSTOMERID)3、設定字段外鍵CREATE TABLE T_ORDER -訂單表(ORDERID INT IDENTITY(1,1),-訂單ID,標識字段,自增PRODUCT NVARCHAR(50) NOT NULL,-產(chǎn)品PAYMENT MONEY NOT NULL,-貨款ORDER_CUSTOMERID UNIQUEIDENTIFIER NOT NULL,-客戶ID,為外鍵,外鍵內(nèi)容是T_CUSTOMER表的CUSTOMERID列CONSTRAINT T_ORDER_PrimaryKey PRIMARY KEY(

14、ORDERID),-設置ORDERID為主鍵CONSTRAINT T_ORDER_T_CUSTOMER_ForeignKey FOREIGN KEY(ORDER_CUSTOMERID) REFERENCES T_CUSTOMER(CUSTOMERID)/*設定外鍵基本語法*/CONSTRAINT <約束名> FOREIGN KEY(<外鍵表列名>) REFERENCES <主鍵表>(<主鍵表列名>)/*設置外鍵,T_ORDER_T_CUSTOMER_ForeignKey是外鍵約束名,F(xiàn)OREIGN KEY后邊是本表內(nèi)要被設置的外鍵列REFEREN

15、CES后邊是主鍵所在的表,括號內(nèi)是主鍵表的鏈接列*/*表名后的所有內(nèi)容,都要拿括號括起來*/*外鍵的數(shù)據(jù)類型要和主鍵一模一樣,哪怕主鍵是UNIQUEIDENTIFIER也必須設置成一樣*/【修改表名】/*修改表名,可能會破壞腳本和存儲過程。*/EXEC SP_RENAME '<原表名>','<新表名>'示例:EXEC SP_RENAME 'T_CUSTOMER2','T_CUSTOMER22'【修改表結構】1、添加列和列的約束/*添加列、添加唯一性約束*/ALTER TABLE <表名>ADD

16、<列名1> BIT NOT NULL,-添加多個列不用括號,用逗號分開即可<列名2> INT NOT NULL UNIQUE-聲明的時候,和創(chuàng)建表的時候一樣示例:ALTER TABLE T_CUSTOMERADD GENDER BIT NOT NULL,-添加多個列不用括號,用逗號分開即可CUSTOMERADDRESS INT NOT NULL UNIQUE-聲明的時候,和創(chuàng)建表的時候一樣2、刪除列/*刪除列*/ALTER TABLE <表名>DROP COLUMN <列名1>,<列名2>-使用關鍵字COLUNM(列)示例:ALTER

17、 TABLE T_CUSTOMERDROP COLUMN GENDER,CUSTOMERADDRESS-使用關鍵字COLUNM(列)/*每個列名之間用逗號隔開,如果列上有任何約束,則需要先刪除約束*/3、添加主鍵約束,唯一性約束、check約束和默認值約束/*添加主鍵約束,唯一性約束,check約束和默認值約束*/ALTER TABLE <表名>ADD CONSTRAINT <約束名> CHECK (CHECK約束內(nèi)容),-CHECK約束,每個約束之間用逗號隔開CONSTRAINT <約束名> UNIQUE(<列名>),-唯一性約束CONSTRA

18、INT <約束名> DEFAULT <默認約束值或函數(shù)> FOR <列名> -默認值約束示例:ALTER TABLE T_CUSTOMERADD CONSTRAINT T_CUMSTOMER_AGE_CHECK CHECK (AGE>0),-CHECK約束CONSTRAINT T_CUSTOMER_USERNAME_UNIQUE UNIQUE(USERNAME),-唯一性約束CONSTRAINT T_CUSTOMER_DEFAULT DEFAULT GETDATE() FOR MODIFIEDDATE -默認值約束4、刪除主鍵約束,唯一性約束、chec

19、k約束和默認值約束/*刪除主鍵約束,刪除唯一性約束、刪除check約束,刪除默認值約束*/ALTER TABLE <表名>DROP <約束名1>,<約束名2>,<約束名3>-后邊直接跟約束名,用逗號隔開示例:ALTER TABLE T_CUSTOMERDROP T_CUSTOMER_DEFAULT,-后邊直接跟約束名,用逗號隔開UQ_T_CUSTOM_EDBD0E1935BCFE0A,CK_T_CUSTOMER_AGE_276EDEB3如果創(chuàng)建的時候,沒有顯性的指定約束名,例如UNIQUE,CHECK等約束,可以通過SP_HELP T_CUSTO

20、MER來查詢所有的約束名。在查詢結果的第7個結果集中,可以看到類似下圖的結果,第一列是約束類型,第二列就是約束名,最后一列是列名。5、修改列的字段類型/*修改列的字段類型和非空*/ALTER TABLE <表名>ALTER COLUMN <列名> <新數(shù)據(jù)類型>示例:ALTER TABLE T_CUSTOMERALTER COLUMN CUSTOMERADDRESS NVARCHAR(100) -修改多列的字段類型還不知道怎么改6、設置列的空/非空/*修改列的空和非空*/ALTER TABLE <表名>ALTER COLUMN <列名>

21、; <數(shù)據(jù)類型> NOT NULL必須跟數(shù)據(jù)類型,否則會示例:ALTER TABLE T_CUSTOMERALTER COLUMN MODIFIEDDATE DATE NULL7、修改列名/*修改列名,可能會破壞腳本和存儲過程*/EXEC SP_RENAME '<tbname>.<原列名>','<新列名>','COLUMN'-后邊的column是固定寫法示例:EXEC SP_RENAME 'T_CUSTOMER.PHONENUMBER','PHONE','CO

22、LUMN'-將原來的PHONENUMBER電話號碼,改成PHONE電話【刪除表】DROP TABLE <tbname>三、表數(shù)據(jù)【插入數(shù)據(jù)】1、插入一行全字段數(shù)據(jù)/*插入一行全字段數(shù)據(jù)*/INSERT INTO <tbname>VALUES('值1','值2','值3') -值的數(shù)量必須和表定義的一樣多,而且數(shù)據(jù)類型必須一一對應示例:INSERT INTO T_CUSTOMERVALUES (NEWID(),'公司3','用戶3','123',DEFAULT,'

23、;xxx') -要到了NEWID()函數(shù)2、插入一行部分字段數(shù)據(jù)/*插入一行數(shù)據(jù)*/INSERT INTO <tbname>(列1,列2,列3.) VALUES('值1','值2','值3') -字符串是要用單引號括起來,數(shù)字值不用示例:INSERT INTO T_CUSTOMER2(COMPANYNAME,USERNAME,PHONENUMBER) VALUES('公司1','用戶1','#39;)與要插入的列一一對應,可以不同于表定義的順序,可以亂序,只要一一

24、對應即可/*CUSTOMERID是標識列,自增的,所以不用指定*/3、插入多行數(shù)據(jù)INSERT INTO T_CUSTOMER2(COMPANYNAME,USERNAME,PHONENUMBER) VALUES('公司2','用戶2','#39;),('公司3','用戶3','#39;), -用括號將每一行數(shù)據(jù)括起來,括號與括號之間用逗號隔開('公司4','用戶4','#39;) 4、插入函數(shù)值和默認值/

25、*UNIQUEIDENTIFIER類型字段,使用NEWID()函數(shù)。有默認值的使用DEFAULT關鍵字*/INSERT INTO <tbname>(列1, 列2, 列3, 列4,) VALUES(NEWID(),'值1','值2',DEFAULT)示例:/*CUSTOMERID是UNIQUEIDENTIFIER類型,所以要使用NEWID()函數(shù),MODIFIEDDATE字段有模式值,是取得當前的日期時間GETDATE()函數(shù)*/INSERT INTO T_CUSTOMER(CUSTOMERID,COMPANYNAME,USERNAME,PHONE,M

26、ODIFIEDDATE) VALUES(NEWID(),'公司','用戶','#39;,DEFAULT)【修改數(shù)據(jù)】/*UPDATE通常是與SET和WHERE配合使用,如果不用WHERE,則會把整個列都修改*/UPDATE <tbname>SET 列='值'WHERE 列='值' AND 列='值'-可以是任何刪選條件示例:/*將公司2的電話號碼修改/UPDATE T_CUSTOMERSET PHONE='#39;

27、WHERE COMPANYNAME='公司2'【查詢數(shù)據(jù)】1、查詢所有數(shù)據(jù),或者部分行數(shù)據(jù)(用where進行過濾)/*查詢表中的所有數(shù)據(jù)用星號*/SELECT *FROM <tbname>WHERE <篩選條件1> AND <篩選條件2> OR <篩選條件3>示例:/*查詢客戶表中的所有數(shù)據(jù)*/SELECT * FROM T_CUSTOMER2、查詢表中的部分列數(shù)據(jù),/*查詢部分列的所有數(shù)據(jù),或者部分行部分列的數(shù)據(jù)*/SELECT <列名1>,<列名2>,<> -這個列名順序可以按照自己的想法來

28、,不用非要和表定義一致FROM T_ORDERWHERE <篩選條件1> AND <篩選條件2> OR <篩選條件3>示例:/*查詢訂單表中的所有數(shù)據(jù)*/SELECT PRODUCT, PAYMENTFROM T_ORDER3、對查詢出來的數(shù)據(jù)進行排序/*ORDER BY 的默認排序是升序ASC,如果BY的列是數(shù)字,則是從大到小,如果是字符串,則是從A到Z,如果是時間從遠至近。降序的話是加關鍵字DESC。假如是升序,最好也加上ASC*/SELECT *FROM <tbname>WHERE <篩選條件1> AND <篩選條件2&g

29、t; OR <篩選條件3>ORDER BY <列名1> ASC(升序)/DESC(降序),<列名2> ASC(升序)/DESC(降序)/*列1和列2可以采用不一樣的排序*/示例:/*查詢客戶表中的所有數(shù)據(jù)*/SELECT * FROM T_ORDERWHERE PAYMENT>100 價格大于100ORDER BY PRODUCT ASC, PAYMENT DESC -產(chǎn)品名稱使用升序,產(chǎn)品價格使用降序【刪除數(shù)據(jù)】1、刪除一般數(shù)據(jù)/*刪除公司一般數(shù)據(jù)*/DELETE FROM <tbname>WHERE <篩選條件1> AND

30、<篩選條件2> OR <篩選條件3>示例:/*刪除公司,公司ID是訂單表的外鍵*/DELETE FROM T_CUSTOMERWHERE COMPANYNAME='公司1'2、快速高效的刪除表內(nèi)的全部數(shù)據(jù)/*快速高效的清空表內(nèi)的全部數(shù)據(jù),TRUNCATE本意是截短、把截短。TRUNCATE只能用來刪除表中的所有數(shù)據(jù),不能用來刪除部分數(shù)據(jù),而且有外鍵約束的主鍵表不能被刪除*/TRUNCATE TABLE <tbname>示例:/*刪除公司,公司ID是訂單表的外鍵*/TRUNCATE TABLE T_CUSTOMER 3、刪除有外鍵約束的數(shù)據(jù)/*

31、如果該條數(shù)據(jù)已經(jīng)被外鍵表引用,則無法刪除。被引用的數(shù)據(jù)必須置于未被使用的狀況,方法就是修改外鍵表字段,或者刪除外鍵表中的引用數(shù)據(jù)*/示例:/*刪除公司,公司ID是訂單表的外鍵*/UPDATE T_ORDER 將所有引用公司1的數(shù)據(jù)全部改成公司2SET ORDER_CUSTOMERID='2f20b157-a287-43e0-be99-1fb917618629'WHERE ORDER_CUSTOMERID='c013076f-7889-400e-aa7a-b38436730d70'/*然后才可以在主鍵表中刪除公司1*/DELETE FROM T_CUSTOMERW

32、HERE COMPANYNAME='公司1'四、其他輔助關鍵字【LIKE通配符】1、單字符通配符,只能用于字符串匹配/*單字符通配符_*/SELECT *FROM T_CUSTOMERWHERE <列名1> LIKE '_通配符_' AND <篩選條件2> OR <篩選條件3>示例:SELECT *FROM T_CUSTOMERWHERE USERNAME LIKE '用戶_'-將客戶表中包含”用戶+任意字符”的行數(shù)據(jù)查出來2、多字符通配符,只能用于字符串匹配/*單字符通配符%,百分號代表*從0到N的字符串/S

33、ELECT *FROM T_CUSTOMERWHERE <列名1> LIKE '%通配符%' AND <篩選條件2> OR <篩選條件3>示例:SELECT *FROM T_CUSTOMERWHERE USERNAME LIKE '%用戶%'-查詢客戶表中用戶名包含“用戶”二字的所有數(shù)據(jù)【AS列名】1、AS可以將查詢結果的英文定義表頭改成非英語的別名表頭/*單字符通配符_*/SELECT <列名1> AS <別名1>,<列名2> AS <別名2>-每個列之間用逗號隔開FROM &

34、lt;tbname>示例:SELECT COMPANYNAME AS 公司,USERNAME AS 聯(lián)系人,PHONE AS 聯(lián)系電話FROM T_CUSTOMER【NULL值】1、NULL值要用特殊的關鍵字IS 或IS NOT,而不能用!=或<>之類的符號示例:SELECT COMPANYNAME,USERNAMEFROM T_CUSTOMERWHERE PHONE IS NULL-選出電話號碼是NULL的行,也可以與其他條件一起使用或者SELECT COMPANYNAME,USERNAMEFROM T_CUSTOMERWHERE PHONE IS NOT NULL-選出電

35、話號碼不是NULL的行【IN匹配離散值】1、如果要查詢離散值,一個方法是很多個OR條件,可以可以用IN或NOT IN關鍵字。示例:SELECT *FROM T_DOCTORWHERE AGE IN (23,24,34) -選出年齡是23,24和34歲的醫(yī)生或者SELECT *FROM T_DOCTORWHERE AGE NOT IN (23,24,34) -選出年齡不是23,24和34歲的醫(yī)生【BETWEEN匹配連續(xù)值】1、如果要查詢離散值,一個方法是很多個OR條件,可以可以用IN或NOT IN關鍵字。示例:SELECT *FROM T_DOCTORWHERE AGE BETWEEN 20 A

36、ND 50-查詢出年齡介于20到50之間的醫(yī)生數(shù)據(jù)或者SELECT *FROM T_DOCTORWHERE AGE NOT BETWEEN 20 AND 50-查詢出年齡不介于20到50之間的醫(yī)生數(shù)據(jù)【GROUP分組】1、按照某列分組/*先按照GROUP BY字段進行分組,然后在分組內(nèi)進行操作。所以SELECT后的列名只能是GROUP BY內(nèi)的列,或者是聚合函數(shù)。如果有WHERE的話,GROUP和ORDER都必須放在WHERE之后*/SELECT 分組列名 AS 列別名,聚合函數(shù)1,聚合函數(shù)2FROM <tbname>GROUP BY 分組列名示例:SELECT F_AGE AS

37、年齡,COUNT(*) AS 人數(shù), AVG(F_SALARY) AS 工資平均值FROM T_EMPLOYEEGROUP BY F_AGE按照年齡分組輸出結果:2、按照多列分組/*先按照列名1分組,再按照列名2分組。如何列名1分為3組,每一組里邊按照列名2又分為2組,則輸出就是6行數(shù)據(jù)*/SELECT 列名1,列名2,聚合函數(shù)FROM <tbname>GROUP BY 列名1,列名2-直接用逗號隔開多個列名即可示例:SELECT F_AGE AS 年齡,F_SALARY AS 工資, COUNT(*) AS 人數(shù)FROM T_EMPLOYEEGROUP BY F_AGE,F_SA

38、LARY-按照年齡分組,再按照工資分組,然后統(tǒng)計人數(shù)ORDER BY F_AGE ASC-ORDER BY也可以一起使用輸出結果:【HAVING數(shù)據(jù)分組后的再篩選】1、數(shù)據(jù)分組后的篩選/*HAVING 是對分組以后的數(shù)據(jù)進行過濾。有了GROUP BY才能使用HAVING,無GROUP BY 是不能使用HAVING的。HAVING中的列,也只能和SELECT語句一樣,使用GROUP BY列或者聚合函數(shù)*/SELECT 列名1,列名2,聚合函數(shù)FROM <tbname>GROUP BY 列名1,列名2-直接用逗號隔開多個列名即可HAVING 聚合函數(shù)的篩選條件示例:SELECT F_A

39、GE AS 年齡,F_SALARY AS 工資, COUNT(*) AS 人數(shù)FROM T_EMPLOYEEGROUP BY F_AGE,F_SALARY-按照年齡分組,再按照工資分組,然后統(tǒng)計人數(shù)HAVING COUNT(*)>1-在分組中剔除count數(shù)為的小分組輸出結果:【TOP限制結果集】1、對查詢出的前幾條數(shù)據(jù)的篩選/*一般是與ORDER BY連用,而且TOP 必須放在*型號或者列名的前面。不和ORDER BY也可以使用,但是查詢結果不確定*/SELECT TOP 數(shù)量 列1,列2FROM <tbname>ORDER BY 排序列1,排序列2 DESC/ASC示例:

40、SELECT TOP 3 F_NAME,F_SALARY-選出工資最高的三個人FROM T_EMPLOYEEORDER BY F_SALARY DESC2、對查詢出的中間結果進行篩選,使用子查詢。這個非常重要的是用在分頁上。/*如果要選擇從X開始后Y個結果的子集,第一步先查詢出TOP X-1個結果子集,然后把它排除掉就是從X到X+Y的結果子集。刪除的時候一般是用主鍵,或者沒有重復的數(shù)據(jù)列。最主要的是NOT IN關鍵字*/SELECT TOP X 列名1,列名2FROM <tbname>WHERE 主鍵列 NOT IN (SELECT TOP X-1 主鍵 FROM <tbna

41、me> ORDER BY 排序列名 DESC )ORDER BY 排序列名 DESC/*WHERE后的列名必須和子查詢的SELECT列名一致*/*主查詢的ORDER BY 列名必須和子查詢的ORDER BY列名一致,而且排序方式也必須一致*/示例:/*查詢出工資排名是4,5,6名*/SELECT TOP 3 F_NAME,F_SALARYFROM T_EMPLOYEEWHERE F_ID NOT IN (SELECT TOP 3 F_ID FROM T_EMPLOYEE ORDER BY F_SALARY DESC )ORDER BY F_SALARY DESC【DISTINCT去除重復

42、數(shù)據(jù)】1、查詢一列中的無重復數(shù)據(jù)/*只能查詢列的結果集。DISTINCT要放在SELECT之后,和所有列名的前面*/SELECT DISTINCT 去重列名 FROM <tbname>示例:SELECT DISTINCT F_DEPARTMENT-查詢出的部門列去重FROM T_EMPLOYEE2、多列組合去重/*每個列都一樣的,才算重復。如果一列不一樣,就不算重復*/SELECT DISTINCT 去重列名1,去重列名2FROM <tbname>示例:SELECT DISTINCT F_DEPARTMENT,F_SUBCOMPANYFROM T_EMPLOYEE【UN

43、ION合并查詢結果】1、合并查詢結果/*合并查詢結果集,所以每個每個結果集必須有相同的列數(shù),每個結果集的列必須類型相容,位置也必須一致,可以合并2個以上的查詢結果。但是默認會合并重復數(shù)據(jù)*/*如果列數(shù)不一樣,必須再相應的位置補齊。默認查詢結果是對第一列排序*/*如果列名不一致,則表頭默認是采用第一個查詢的列名*/*外鍵是把多個列組合在一起,而UNION是把多個行組合在一起*/SELECT 列1,列2, 補齊列 FROM <tbname1>UNIONSELECT 列1,列2, 列3 FROM <tbname2>示例:SELECT FNAME,FAGE,0 AS "

44、;工資" FROM T_TEMPEMPLOYEE-臨時工沒工資,所以要補齊UNIONSELECT F_NAME,F_AGE,F_SALARY FROM T_EMPLOYEE2、ALL合并查詢出的所有結果,不去重/*除非程序需要,一般要加ALL,因為判斷去重,會讓數(shù)據(jù)庫消耗掉大量的資源*/SELECT 列1,列2, 補齊列 FROM <tbname1>UNION ALLSELECT 列1,列2, 列3 FROM <tbname2>示例:SELECT FNAME FROM T_TEMPEMPLOYEE-名字里頭有重復的UNION ALLSELECT F_NAME

45、FROM T_EMPLOYEE3、利用UNION 多加一行,做一些函數(shù)操作示例:SELECT F_NAME,F_SALARY FROM T_EMPLOYEEUNION ALLSELECT '工資合計',SUM(F_SALARY) FROM T_EMPLOYEE-工資合計UNION ALLSELECT '平均工資',AVG(F_SALARY) FROM T_EMPLOYEE-平均工資【JOIN聯(lián)合查詢】1、JOIN聯(lián)合查詢/*JOIN聯(lián)合查詢不光是可以查有主/外鍵關聯(lián)的,也可以查沒有關聯(lián)的幾張數(shù)據(jù)表,但是得有一列數(shù)據(jù)相等.而且可以列出幾張表中所有的列*/SELEC

46、T 表1.列1,表2.列3,表2.列4FROM 表1 JOIN 表2 ON 表1.列1=表2.列2/*或者給表取個別名,比較容易查看*/SELECT O.列1,O.列2,C.列3FROM 表1 AS C JOIN 表2 AS O ON C.列1=O.列2示例:SELECT O.ORDERID,O.PRODUCT,C.PHONEFROM T_CUSTOMER AS C JOIN T_ORDER AS O ON C.CUSTOMERID=O.ORDER_CUSTOMERID五、常用函數(shù):函數(shù)名函數(shù)意義示例數(shù)學函數(shù)SUM()求某一列的和AVG()求某一列的平均值MAX()取出某一列的最大值MIN()

47、取出某一列的最小值ABS()求絕對值CEILING()舍入到比它大的、最近的最大整數(shù)。注意不是數(shù)學意義上的四舍五入例如:3.33舍入到4,-3.33舍入到-3FLOOR()舍入到比它小的、最近的最大整數(shù)。注意不是數(shù)學意義上的四舍五入例如:3.33舍入到3,-3.33舍入到-4ROUND()舍入到離我半徑的整數(shù),就是傳統(tǒng)意義上的數(shù)學上的四舍五入例如:3.65舍入到4,-3.65舍入到-4。ROUND(3.14159,3)就是保留小數(shù)點后3位,將舍入為3.14200字符串函數(shù)LEN()字符串的長度括號里頭是字符串或列名LOWER()字符串轉成小寫同上UPPER()字符串轉成大寫同上LTRIM()去

48、掉字符串左邊的空格同上RTRIM()去掉字符串右邊的空格同上。如果要去掉兩邊的空格,就想L再R,或者先R再LSUBSTRING()取子字符串。有三個參數(shù),SUBSTRING(STRING START_POSITION LENGHT)取子字符串SELECT SUBSTRING('abcdef111',2,3)日期函數(shù)GETDATE()獲取服務器當前日期和時間DATEADD()DATEADD (datepart , number, date ),計算增加以后的日期。參數(shù)date為待計算的日期;參數(shù)number為增量;參數(shù)datepart為計量單位(可取值year、quarter季度

49、、month、day、week、hour、minute、second等,具體參考書)SELECT DATEADD(MONTH ,-8,GETDATE()-為計算日期date的個月之前的日期DATEDIFF()DATEDIFF(datepart,startdate,enddate):計算兩個日期之間的差額。datepart 為計量單位,可取值參考DateAdd。統(tǒng)計不同工齡的員工的個數(shù):select DateDiff(year,FInDate,getdate(),count(*) from T_Employeegroup by DateDiff(year,FInDate,getdate()DATEPART()DATEPART (datepart,date):返回

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論