sqlserver常用关键字、数据类型和常用语法_第1页
sqlserver常用关键字、数据类型和常用语法_第2页
sqlserver常用关键字、数据类型和常用语法_第3页
sqlserver常用关键字、数据类型和常用语法_第4页
sqlserver常用关键字、数据类型和常用语法_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、SQL Server 200SQL server 2008一共大约有180 多个关键字。简要分为主要关键字、辅助关键字和函数类关键字。本文就常用的这三类关键字进行语法说明和用例。说明:1、比较好的习惯是,数据库名以D_开头,表名用T_开头,字段名以F_开头,这样可以防止和关键字重名。2、如果确实用到了系统关键字,就要在关键上加方括号,以与关键字进行区别。例如有一个用户表被命名为USER,则查询该表内容的时候:SELECT*FROM USER语句是错误的,应该是SELECT * FROM USE。因为 RUSER是关键字。编号关键字应用场景主要关键字1CREATE创建表2ALTER修改表结构3D

2、ROP删除数据库和表4INSERT插入表数据5INTO与 INSERT连用,插入表数据6VALUES插入表数据时,指定列值7UPDATE更新表数据8SET与 UPDATE连用,设定列值9SELECT查询表数据10FROM从哪个表中查询11WHERE查询表数据的条件12DATABASE数据库13TABLE数据表14NOT15NULL空值16IDENTITY(1,1)标识列17CONSTRAINT约束,后边跟约束名18PRIMARY主键,PRIMARY KE(列名)Y19FOREIGN外键FOREIGN KE(列名)Y20KEY21REFERENCES把印作参考,指定外键的时候用22CHECKCH

3、ECK约束23UNIQUE唯一性约束24COLUMN列25DEFAULT默认值26AND和27OR或28TRUNCATE截断,快速清空表内数据29ORDER常与by 连用30BY与 GROUP或 ORDER连用31ASC升序32DESC降序33AS列名别称34DELETE删除表数据35LIKE通配符36IS用于NULL值37IN离散值38BETWEEN连续值,常与and 连用39GROUP分组,常与by连用40HAVING对 GROUP BY分组内的数据进行过滤41TOP筛选结果集42DISTINCT去重43UNION44ALL45CASE类似与C#中的SWITCH-CASE语法,查询离散值4

4、6ELSE设定case的默认值47END结束case语句48WHEN与 case连用49VIEW视图50INDEX索引51JOIN联合查询52ON与 JOIN连用数据类型:SQL Server 2008一共有36 种数据类型。具体如下:编号数据类型存储空间字符类型说明整数型(4)1tinyint1 字节取值范围:0-2552smallint2 字节取值范围:-2768-327673int4 字节取值范围:-231 231-14bigint8 字节取值范围:-263 263-1浮点类型(6)5decimal(p,s)517字节取值范围:-1038+1 1038-1。 p (有效位数,p 的取值小

5、于38),可储存的最大十进位数总数,小数点左右两侧都包括在内。s (小数位数,0 <= s <= p <= 38) 小数点右侧的小数位数。例如:decimal(3,1)表示,一共3 位有效位,其中整数部分2 位,小数部分1 位,最大值是,最小值是6numeric(p,s)4 字节取值范围:-214,。用法类似decimal7smallmoney4 字节取值范围: 214 2 14 。主要是用于货币8money8 字节取值范围: 主要用于货币9real4或 8字 节取值范围:38,0, 3810float4 字节取值范围:字符类型(8)11char(n)每字符1 字节,最大可达

6、8000 字节。ANSI字符,会用空格填充。12nchar(n)每字符2 字节,最大可达4000 字节。UNICODE字符,会用空格填充。13varchar(n)每字符1 字节,最大可达8000 字节。ANSI字符,可变长度,不会用空格填充。14varchar(MAX)ANSI字符,最大可达2G15nvarchar(n)每字符2 字节,最大可达4000 字节。UNICODE字符,可变长度,不会用空格填充。16nvarchar(MAX)最多为231 1(2 147 483 647)字符17text每字符1 字节,最大可达2G。18ntext每字符2 字节,最大可达2G。二进制数据类型(5)19b

7、it1 比特NULL, 0 或 120binary(n)固定长度二进制数据,最高可达8000 字节。21varbinary可变长度二进制数据,最高可达8000 字节。22varbinary(MAX)最多为232-1 字节23image可变长度二进制数据,最高可达2GB。日期和时间类型(7)24smalldatetime25date3 字节精度一天,支持范围01/01/0000 31/12/9999。26datetime8 字节秒,支持的范围是'1000-01-01 00:00:00' 到 '9999-12-3123:59:59'。以 'YYYY-MM-D

8、D HH:MM:SS格式显示'DATETIME值27datetime2(n)6-8 字节100 纳秒28datetimeoffset(n)8-10 字节100 纳秒29time35 字节100 纳秒30timestampTIMESTAMP值返回后显示为'YYYY-MM-DD HH:MM:SS'格式的字符串。其他数据类型(6)31xml用于存储xml 格式的文档,最大可达2GB,支持128级层次。32geography地理数据。33geometry几何数据。34hierarchyid主要解决的问题是拥有层次关系的表格,通常用来建 立树形结构35sql_variant用于存

9、储SQL Server 2005 支持的各种数据类型(不包括text 、 ntext 、 image、 timestamp 和 sql_variant)的值。对于sql_variant 数据类型,必须先将它转换为其基本数据类型值,然后才能参与诸如加减这类运算36uniqueidentifierUniqueidentifier 是全局唯一的标识,可存储16 字节的二进制值,其作用与全局唯一标记符( GUID) 一样,一般用来做主键。一、数据库【创建数据库】CREATE DATABA<SdEbname>【修改数据库】ALTER DATABA S<dEbname>【删除数据库

10、】DROP DATABA S<Edbname>二、表结构【创建数据表】1、设定字段是允许空,非空、标识列,自增和主键约束。CREATETABLET_CUSTOMER-表名(CUSTOMERIDINTIDENTITY(1, 1),-客户ID,标识列,从开始,每次自增COMPANYNAMENVARCHAR(50) NOTNULL,-,如果不显示指明NOT NULL,系统默认是允许空的USERNAMENVARCHAR(10) NOTNULL,-联系人姓名,非空PHONENUMBERCHAR(11)NULL,-联系电话,允许为空CONSTRAINTT_CUSTOMER_PrimaryKey

11、PRIMARYKEY( CUSTOMERID) -设定USERID为主键,用括号括起来/* 每个单词之间是空格隔开,每个字段之间用单引号隔开,整个字段定义部分用括号括起来*/*T_RegUser_PrimaryKey 是约束名*/2、 设定字段是UNIQUEIDENTIFIER数据类型,唯一性约束,CHECK约束和默认值约束。CREATETABLET_CUSTOMER(CUSTOMERIDUNIQUEIDENTIFIERUNIQUE,-客户ID, UNIQUEIDENTIFIER类型,唯一性约束COMPANYNAMENVARCHAR(50) NOT NULLUNIQUE,-公司名称,非空,唯一

12、性约束USERNAMENVARCHAR(10) NOTNULL,PHONENUMBERCHAR(11) NULL,AGETINYINTNULLCHECK(AGE>0),-联系人年龄,允许空,check约束必须大于MODIFIEDDATEDATENULLCONSTRAINTT_CUSTOMER_DEFAULDTEFAULTGETDATE(),-默认值约束,并调用SQL函数GETDATE()CONSTRAINTT_CUSTOMER_PrimaryKeyPRIMARYKEY( CUSTOMERID)3、设定字段外键CREATETABLET_ORDER -订单表(ORDERIDINTIDENTI

13、TY(1,1),-订单ID,标识字段,自增PRODUCTNVARCHAR(50) NOTNULL,-产品PAYMENTMONEY NOTNULL,-货款ORDER_CUSTOMERIUDNIQUEIDENTIFIERNOT NULL,-客户ID,为外键,外键内容是T_CUSTOMER表的CUSTOMERID列CONSTRAINTT_ORDER_PrimaryKeyPRIMARYKEY(ORDERID),-设置ORDERID为主键CONSTRAINTT_ORDER_T_CUSTOMER_ForeignKeFyOREIGNKEY(ORDER_CUSTOMERI)DREFERENCES T_CUST

14、OMER(CUSTOMERID) /* 设定外键基本语法*/CONSTRAIN T<约束名> FOREIGNKEY(<外键表列名>) REFERENCE<S主键表>(<主键表列名>)/* 设置外键,T_ORDER_T_CUSTOMER_ForeignK是外键约束名,eyFOREIGN KE后边是本表内要被设置的外键Y列REFERENCE后边是主键所在的表,括号内是主键表的链接列 S*/* 表名后的所有内容,都要拿括号括起来*/* 外键的数据类型要和主键一模一样,哪怕主键是UNIQUEIDENTIFIER也必须设置成一样*/【修改表名】/* 修改表

15、名,可能会破坏脚本和存储过程。*/EXECSP_RENAME'<原表名>','<新表名>'示例:EXECSP_RENAME'T_CUSTOMER2,''T_CUSTOMER22'【修改表结构】1、添加列和列的约束/* 添加列、添加唯一性约束*/ALTERTABLE<表名>ADD <列名1> BITNOTNULL,-添加多个列不用括号,用逗号分开即可<列名2> INT NOTNULLUNIQUE-声明的时候,和创建表的时候一样示例:ALTERTABLET_CUSTOMERA

16、DDGENDERBITNOTNULL,-添加多个列不用括号,用逗号分开即可CUSTOMERADDRESISNTNOT NULLUNIQUE-声明的时候,和创建表的时候一样2、删除列/* 删除列 */ALTERTABLE<表名>DROPCOLUMN <列名1>,<列名2>-使用关键字COLUNM(列)示例:ALTERTABLET_CUSTOMERDROPCOLUMNGENDER,CUSTOMERADDRES-S使用关键字COLUNM(列)/* 每个列名之间用逗号隔开,如果列上有任何约束,则需要先删除约束*/3、添加主键约束,唯一性约束、check约束和默认值约

17、束/* 添加主键约束,唯一性约束,check约束和默认值约束*/ALTERTABLE<表名>ADDCONSTRAIN T<约束名> CHECK( CHECK约束内容),-CHECK约束,每个约束之间用逗号隔开CONSTRAIN T<约束名> UNIQUE(<列名>),-唯一性约束CONSTRAINT< 约束名> DEFAULT<默认约束值或函数> FOR <列名> -默认值约束示例:ALTERTABLET_CUSTOMERADDCONSTRAINTT_CUMSTOMER_AGE_CHECCKHECK(AGE&g

18、t;0),-CHECK约束 CONSTRAINTT_CUSTOMER_USERNAME_UNIQUUENIQUE(USERNAME),-唯一性约束CONSTRAINTT_CUSTOMER_DEFAULDTEFAULTGETDATE() FORMODIFIEDDATE-默认值约束4、删除主键约束,唯一性约束、check约束和默认值约束/* 删除主键约束,删除唯一性约束、删除check约束,删除默认值约束*/ALTERTABLE<表名>DROP <约束名1>,<约束名2>,<约束名3>-后边直接跟约束名,用逗号隔开示例:ALTERTABLET_CUS

19、TOMER DROPT_CUSTOMER_DEFAUL,-T-后边直接跟约束名,用逗号隔开 UQ_T_CUSTOM_EDBD0E1935BCFE0, ACK_T_CUSTOMER_AGE_276EDEB3如果创建的时候,没有显性的指定约束名,例如UNIQUE, CHECK等约束,可以通过SP_HELPT_CUSTOMER来查询所有的约束名。在查询结果的第7 个结果集中,可以看到类似下图的结果,第一列是约束类型,第二列就是约束名,最后一列是列名。5、修改列的字段类型/* 修改列的字段类型和非空*/ALTERTABLE<表名>ALTERCOLUMN <列名> <新数据

20、类型>示例:ALTERTABLET_CUSTOMERALTERCOLUMNCUSTOMERADDRESNSVARCHAR(100) -修改多列的字段类型还不知道怎么改6、设置列的空/非空/* 修改列的空和非空*/ALTERTABLE<表名>ALTERCOLUMN <列名> <数据类型> NOT NULL 必须跟数据类型,否则会示例:ALTERTABLET_CUSTOMERALTERCOLUMNMODIFIEDDATEDATENULL7、修改列名/* 修改列名,可能会破坏脚本和存储过程*/EXECSP_RENAME'< tbname>

21、.<原列名>','<新列名>','COLUMN' -后边的column 是固定写法示例:EXECSP_RENAME'','PHONE','COLUMN'-将原来的PHONENUMBER电话号码,改成PHONE电话【删除表】DROPTABLE<tbname>三、表数据【插入数据】1、插入一行全字段数据/* 插入一行全字段数据*/INSERTINTO <tbname>VALUES('值 1','值 2','值 3')

22、 -值的数量必须和表定义的一样多,而且数据类型必须一一对应示例:INSERTINTO T_CUSTOMERVALUES( NEWID(),'公司3','用户3','123',DEFAULT,'xxx') -要到了NEWID()函数2、插入一行部分字段数据INSERTINTO <tbname>(列 1,列2,列3.)VALUES('值 1','值 2','值 3') -字符串是要用单引号括起来,数字值不用示例:INSERTINTO T_CUSTOMER2(COMPANYNA

23、ME,USERNAME,PHONENUMBER)VALUES('公司1','用户1','') 与要插入的列一一对应,可以不同于表定义的顺序,可以乱序,只要一一对应即可/*CUSTOMERID是标识列,自增的,所以不用指定*/3、插入多行数据INSERTINTO T_CUSTOMER2(COMPANYNAME,USERNAME,PHONENUMBER)VALUES('公司2','用户 2',''),('公司 3','用户3',''), -用括号将每一行数

24、据括起来,括号与括号之间用逗号隔开('公司 4','用户4','' )4、插入函数值和默认值/*UNIQUEIDENTIFIER类型字段,使用NEWID()函数。有默认值的使用DEFAULT关键字*/INSERTINTO <tbname>(列 1, 列 2, 列 3, 列 4,)VALUES(NEWID(),'值 1','值 2',DEFAULT)示例:/*CUSTOMERID是 UNIQUEIDENTIFIER类型,所以要使用NEWID()函数,MODIFIEDDATE字段有模式值,是取得当前的日期时

25、间GETDATE(函数 )*/INSERTINTO T_CUSTOMER(CUSTOMERID,COMPANYNAME,USERNAME,PHONE,MODIFIEDDATE)VALUES(NEWID(),'公司','用户','',DEFAULT)【修改数据】/*UPDATE 通常是与SET和 WHERE配合使用,如果不用WHERE,则会把整个列都修改*/UPDATE<tbname>SET列 ='值 'WHERE 列 ='值 ' AND 列 ='值 ' -可以是任何删选条件示例:/* 将

26、公司 2 的电话号码修改成*/UPDATET_CUSTOMERSETPHONE=''WHERECOMPANYNAME='公司2'【查询数据】1、查询所有数据,或者部分行数据(用where 进行过滤)/* 查询表中的所有数据用星号*/SELECT*FROM <tbname>WHERE<筛选条件1> AND <筛选条件2> OR <筛选条件3>示例:/* 查询客户表中的所有数据*/SELECT* FROMT_CUSTOMER2、查询表中的部分列数据,/* 查询部分列的所有数据,或者部分行部分列的数据*/SELECT&l

27、t;列名1>,<列名2>,< > -这个列名顺序可以按照自己的想法来,不用非要和表定义一致FROMT_ORDERWHERE<筛选条件1> AND <筛选条件2> OR <筛选条件3>示例:/* 查询订单表中的所有数据*/SELECTPRODUCT, PAYMENTFROMT_ORDER3、对查询出来的数据进行排序/*ORDER BY 的默认排序是升序ASC,如果BY的列是数字,则是从大到小,如果是字符串,则是从A到 Z,如果是时间从远至近。降序的话是加关键字DESC。假如是升序,最好也加上ASC*/SELECT*FROM <

28、;tbname>WHERE<筛选条件1> AND <筛选条件2> OR <筛选条件3>ORDERBY<列名1> ASC(升序)/DESC(降序),<列名2> ASC(升序)/DESC(降序)/* 列 1 和列2可以采用不一样的排序*/示例:/* 查询客户表中的所有数据*/SELECT*FROMT_ORDERWHEREPAYMENT>100 价格大于100ORDERBYPRODUCTASC, PAYMENTDESC-产品名称使用升序,产品价格使用降序【删除数据】1、删除一般数据/* 删除公司一般数据*/DELETEFROM&

29、lt;tbname>WHERE<筛选条件1> AND <筛选条件2> OR <筛选条件3>示例:/* 删除公司,公司ID是订单表的外键*/DELETEFROMT_CUSTOMERWHERECOMPANYNAME='公司 1'2、快速高效的删除表内的全部数据/* 快速高效的清空表内的全部数据,TRUNCATE本意是截短、把 截短。TRUNCATE只能用来删除表中的所有数据,不能用来删除部分数据,而且有外键约束的主键表不能被删除*/TRUNCATETABLE<tbname>示例:/* 删除公司,公司ID是订单表的外键*/TRUN

30、CATETABLET_CUSTOMER3、删除有外键约束的数据/* 如果该条数据已经被外键表引用,则无法删除。被引用的数据必须置于未被使用的状况,方法就是修改外键表字段,或者删除外键表中的引用数据*/示例:/* 删除公司,公司ID是订单表的外键*/UPDATET_ORDER 将所有引用公司1 的数据全部改成公司2SETORDER_CUSTOMERI=D'2f20b157-a287-43e0-be99-1fb9'WHEREORDER_CUSTOMER=ID'c013076f-7889-400e-aa7a-bd70'/* 然后才可以在主键表中删除公司1*/DELET

31、EFROMT_CUSTOMERWHERECOMPANYNAME='公司 1'四、其他辅助关键字【 LIKE通配符】1、单字符通配符,只能用于字符串匹配/* 单字符通配符_*/SELECT*FROMT_CUSTOMERWHERE<列名1>LIKE'_通配符_' AND <筛选条件2> OR <筛选条件3>示例:SELECT*FROMT_CUSTOMERWHEREUSERNAMELIKE'用户_' -将客户表中包含”用户+任意字符”的行数据查出来2、多字符通配符,只能用于字符串匹配/* 单字符通配符%,百分号代表*

32、从 0到 N的字符串/SELECT*FROMT_CUSTOMERWHERE<列名1>LIKE'%通配符%' AND <筛选条件2> OR <筛选条件3>示例:SELECT*FROMT_CUSTOMERWHEREUSERNAMELIKE'%用户%' -查询客户表中用户名包含“用户”二字的所有数据【 AS 列名】1、 AS 可以将查询结果的英文定义表头改成非英语的别名表头/* 单字符通配符_*/SELECT<列名1> AS<别名1>,<列名2> AS<别名2> -每个列之间用逗号隔开

33、FROM <tbname>示例:SELECTCOMPANYNAMEAS 公司 ,USERNAMEAS 联系人 , PHONEAS 联系电话FROMT_CUSTOMER【 NULL值】1、 NULL值要用特殊的关键字IS 或 IS NOT,而不能用!=或 <>之类的符号示例:SELECTCOMPANYNAME,USERNAMEFROMT_CUSTOMERWHEREPHONEISNULL-选出电话号码是NULL的行,也可以与其他条件一起使用或者SELECTCOMPANYNAME,USERNAMEFROMT_CUSTOMERWHEREPHONEISNOTNULL-选出电话号码

34、不是NULL的行【 IN 匹配离散值】1、如果要查询离散值,一个方法是很多个OR条件,可以可以用IN 或 NOTIN 关键字。示例:SELECT*FROMT_DOCTORWHEREAGEIN (23,24,34) -选出年龄是23,24和 34 岁的医生或者SELECT*FROMT_DOCTORWHEREAGENOTIN (23,24,34) -选出年龄不是23,24 和 34 岁的医生【 BETWEEN匹配连续值】1、如果要查询离散值,一个方法是很多个OR条件,可以可以用IN 或 NOTIN 关键字。示例:SELECT*FROMT_DOCTORWHEREAGEBETWEEN20 AND 50

35、-查询出年龄介于20到 50之间的医生数据或者SELECT*FROMT_DOCTORWHEREAGENOTBETWEEN20 AND 50-查询出年龄不介于20到 50之间的医生数据【 GROUP分组】1、按照某列分组/* 先按照 GROUP BY字段进行分组,然后在分组内进行操作。所以SELEC后的列名只能是TGROUP BY内的列,或者是聚合函数。如果有WHERE的话,GROUP和 ORDER都必须放在WHERE之后*/SELECT分组列名AS 列别名,聚合函数1,聚合函数2FROM <tbname>GROUPBY 分组列名示例:SELECTF_AGEAS 年龄 ,COUNT(

36、*) AS 人数, AVG(F_SALARY) AS 工资平均值FROMT_EMPLOYEEGROUPBYF_AGE按照年龄分组输出结果:2、按照多列分组/* 先按照列名1 分组,再按照列名2分组。如何列名1分为3组,每一组里边按照列名2又分为2组,则输出就是 6行数据 */SELECT列名1,列名2,聚合函数FROM <tbname>GROUPBY 列名1,列名2-直接用逗号隔开多个列名即可示例:SELECTF_AGEAS 年龄 ,F_SALARYAS 工资 , COUNT(*) AS 人数FROM T_EMPLOYEEGROUPBYF_AGE, F_SALAR-Y-按照年龄分组

37、,再按照工资分组,然后统计人数ORDERBYF_AGEASC-ORDER BY也可以一起使用输出结果:【 HAVING数据分组后的再筛选】1、数据分组后的筛选/*HAVING 是对分组以后的数据进行过滤。有了GROUP BY才能使用HAVING,无GROUP BY 是不能使用HAVING的。HAVING中的列,也只能和SELEC语句一样,使用TGROUP BY列或者聚合函数*/SELECT列名1,列名2,聚合函数FROM <tbname>GROUPBY 列名 1,列名2-直接用逗号隔开多个列名即可HAVING 聚合函数的筛选条件示例:SELECTF_AGEAS 年龄 ,F_SALA

38、RYAS 工资 , COUNT(*) AS 人数 FROM T_EMPLOYEEGROUPBYF_AGE, F_SALAR-Y-按照年龄分组,再按照工资分组,然后统计人数HAVINGCOUNT(*)>1-在分组中剔除count数为的小分组输出结果:【 TOP限制结果集】1、对查询出的前几条数据的筛选/*一般是与ORDER BY连用,而且TOP 必须放在*型号或者列名的前面。不和ORDER B也可以使用,但是查Y询结果不确定*/SELECTOP 数量列 1,列2FROM <tbname>ORDERBY 排序列 1,排序列2 DESC/ASC示例:SELECTOP 3 F_NAM

39、E,F_SALARY-选出工资最高的三个人FROMT_EMPLOYEEORDERBYF_SALARYDESC2、对查询出的中间结果进行筛选,使用子查询。这个非常重要的是用在分页上。/* 如果要选择从X开始后Y个结果的子集,第一步先查询出TOP X-1个结果子集,然后把它排除掉就是从X到X+Y的结果子集。删除的时候一般是用主键,或者没有重复的数据列。最主要的是NOT IN关键字*/SELECTOP X 列名1 ,列名 2FROM <tbname>WHERE 主键列 NOTIN (SELECTTOP X-1 主键 FROM<tbname> ORDERBY 排序列名DESC)

40、ORDERBY 排序列名DESC/*WHERE后的列名必须和子查询的SELEC列名一致T*/* 主查询的ORDER BY列名必须和子查询的ORDER B列名一致,而且排序方式也必须一致Y*/示例:/* 查询出工资排名是4,5, 6名 */SELECTOP 3 F_NAME, F_SALARYFROMT_EMPLOYEEWHEREF_IDNOT IN (SELECTTOP 3 F_IDFROMT_EMPLOYEEORDERBYF_SALARYDESC)ORDERBYF_SALARYDESC【 DISTINCT去除重复数据】1、查询一列中的无重复数据/* 只能查询列的结果集。DISTINCT要放在

41、SELEC之后,和所有列名的前面 T*/SELECTDISTINCT去重列名FROM <tbname>示例:SELECTDISTINCTF_DEPARTMENT-查询出的部门列去重FROMT_EMPLOYEE2、多列组合去重/* 每个列都一样的,才算重复。如果一列不一样,就不算重复*/SELECTDISTINCT去重列名1,去重列名2FROM <tbname>示例:SELECTDISTINCTF_DEPARTMENT,F_SUBCOMPANYFROMT_EMPLOYEE【 UNION合并查询结果】1、合并查询结果/* 合并查询结果集,所以每个每个结果集必须有相同的列数,

42、每个结果集的列必须类型相容,位置也必须一致,可以合并2个以上的查询结果。但是默认会合并重复数据*/* 如果列数不一样,必须再相应的位置补齐。默认查询结果是对第一列排序*/* 如果列名不一致,则表头默认是采用第一个查询的列名*/* 外键是把多个列组合在一起,而UNION是把多个行组合在一起*/SELECT列 1,列 2, 补齐列 FROM<tbname1>UNIONSELECT列 1,列 2, 列 3 FROM<tbname2>示例:SELECTFNAME, FAGE,0 AS"工资" FROMT_TEMPEMPLOYE-E-临时工没工资,所以要补齐U

43、NIONSELECTF_NAME,F_AGE,F_SALARYFROMT_EMPLOYEE2、 ALL合并查询出的所有结果,不去重/* 除非程序需要,一般要加ALL,因为判断去重,会让数据库消耗掉大量的资源*/SELECT列 1,列 2, 补齐列 FROM<tbname1>UNIONALLSELECT列 1,列 2, 列 3 FROM<tbname2>示例:SELECTFNAMEFROMT_TEMPEMPLOYE-E-名字里头有重复的UNION ALLSELECTF_NAMEFROMT_EMPLOYEE3、利用 UNION 多加一行,做一些函数操作示例:SELECTF_

44、NAME,F_SALARYFROMT_EMPLOYEEUNION ALLSELECT'工资合计',SUM(F_SALARY) FROMT_EMPLOYEE-工资合计UNION ALLSELECT'平均工资',AVG(F_SALAR)YFROMT_EMPLOYE-E-平均工资【 JOIN联合查询】1、 JOIN联合查询/*JOIN联合查询不光是可以查有主/外键关联的,也可以查没有关联的几张数据表,但是得有一列数据相等.而且可以列出几张表中所有的列*/SELECT表 1.列 1 ,表2.列 3,表2.列 4FROM 表 1 JOIN 表 2 ON 表 1.列 1=表

45、 2.列 2/* 或者给表取个别名,比较容易查看*/SELECTO.列 1,O.列 2, C.列 3FROM 表 1 ASCJOIN 表 2ASOON C.列 1=O.列 2示例:SELECT,FROMT_CUSTOMERASCJOINT_ORDERASOON=五、常用函数:函数名函数意义示例数学函数SUM()求某一列的和AVG()求某一列的平均值MAX()取出某一列的最大值MIN()取出某一列的最小值ABS()求绝对值CEILING()舍入到比它大的、最近的最大整数。注意不 是数学意义上的四舍五入例如:舍入到4,舍入到-3FLOOR()舍入到比它小的、最近的最大整数。注意不 是数学意义上的四

46、舍五入例如:舍入到3,舍入到-4ROUND()舍入到离我半径的整数,就是传统意义上的 数学上的四舍五入例如:舍入到4,舍入到-4。ROUND,3)就是保留小数点后3 位,将舍入为字符串函数LEN()字符串的长度括号里头是字符串或列名LOWER()字符串转成小写同上UPPER()字符串转成大写同上LTRIM()去掉字符串左边的空格同上RTRIM()去掉字符串右边的空格同上。如果要去掉两边的空格,就想L 再 R,或者先R 再 LSUBSTRING()取子字符串。有三个参数,SUBSTRING(STRINSTART_POSITION LENGH取子字符串 T)SELECTSUBSTRING('

47、;abcdef111' ,2,3)日期函数GETDATE()获取服务器当前日期和时间DATEADD()DATEADD (datepart , number, date ) ,计算增加以后的日期。参数date 为待计算的日期;参数number 为增量;参数datepart 为计量单位 (可取值year、 quarter 季度、month 、 day、week、 hour、 minute 、 second 等 ,具体参考书)SELECTDATEADD(MONTH ,-8,GETDATE()-为计算日期date 的个月之前的日期DATEDIFF()DATEDIFF(datepart,startdate,enddate) : 计算两个日期之间的差额。datepart 为计量单位,可取值参考DateAdd。统计不同工龄的员工的个数:select DateDiff(year,FInDate, getdate(),count(*)from T_Employee group by DateDiff(year, FInDate,getdate()DATEPART()DATEPART( datepart,date) :返回一个日期的特定部分。datepart

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论