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

下载本文档

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

文档简介

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

2、CREATE创建表2ALTER修改表结构3DROP删除数据库和表4INSERT插入表数据5INTO与INSERT连用,插入表数据6VALUES插入表数据时,指定列值7UPDATE更新表数据8SET与UPDATE连用,设定列值9SELECT查询表数据10FROM从哪个表中查询11WHERE查询表数据的条件12DATABASE数据库13TABLE数据表14NOT15NULL空值16IDENTITY(1,1)标识列17CONSTRAINT约束,后边跟约束名18PRIMARY 主键,PRIMARY KEY(列名)19FOREIGN外键 FOREIGN KEY(列名)20KEY21REFERENCES把

3、印作参考,指定外键的时候用22CHECKCHECK约束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#中的SWI

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

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

6、40E38-1.18E-38,0,1.18E-383.40E3810float4字节取值范围:-3.4E383.4E38字符类型(8)11char(n)每字符1字节,最大可达8000字节。ANSI字符,会用空格填充。12nchar(n)每字符2字节,最大可达4000字节。UNICODE字符,会用空格填充。13varchar(n)每字符1字节,最大可达8000字节。ANSI字符,可变长度,不会用空格填充。14varchar(MAX)ANSI字符,最大可达2G15nvarchar(n)每字符2字节,最大可达4000字节。UNICODE字符,可变长度,不会用空格填充。16nvarchar(MAX)最

7、多为2311(2147483647)字符17text每字符1字节,最大可达2G。18ntext每字符2字节,最大可达2G。二进制数据类型(5)19bit1比特NULL,0或120binary(n)固定长度二进制数据,最高可达8000字节。21varbinary可变长度二进制数据,最高可达8000字节。22varbinary(MAX)最多为232-1字节23image可变长度二进制数据,最高可达2GB。日期和时间类型(7)24smalldatetime25date3字节精度一天,支持范围01/01/000031/12/9999。26datetime8字节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字节100纳秒28datetimeoffset(n)8-10字节100纳秒29time35字节100纳秒30timestampTIMESTAMP值返回后显示为'YYYY-MM-DD HH:MM:SS'格式的字符串。其他数据类型(6)31xml用于存储xml格式的文档,最大可达2GB,支持128级层次。32geography地理数据。33geometry几

9、何数据。34hierarchyid主要解决的问题是拥有层次关系的表格,通常用来建立树形结构35sql_variant用于存储 SQL Server 2005 支持的各种数据类型(不包括 text、ntext、image、timestamp 和 sql_variant)的值。对于 sql_variant 数据类型,必须先将它转换为其基本数据类型值,然后才能参与诸如加减这类运算36uniqueidentifierUniqueidentifier 是全局唯一的标识,可存储16字节的二进制值,其作用与全局唯一标记符(GUID)一样,一般用来做主键。常用语法:一、数据库【创建数据库】CREATE DAT

10、ABASE <dbname>【修改数据库】ALTER DATABASE <dbname>【删除数据库】DROP DATABASE <dbname>二、表结构【创建数据表】1、设定字段是允许空,非空、标识列,自增和主键约束。CREATE TABLE T_CUSTOMER -表名(CUSTOMERID INT IDENTITY(1,1),-客户ID,标识列,从开始,每次自增COMPANYNAME NVARCHAR(50) NOT NULL,-,如果不显示指明NOT NULL,系统默认是允许空的USERNAME NVARCHAR(10) NOT NULL,-联系人

11、姓名,非空PHONENUMBER CHAR(11) NULL,-联系电话,允许为空CONSTRAINT T_CUSTOMER_PrimaryKey PRIMARY KEY (CUSTOMERID) -设定USERID为主键,用括号括起来/*每个单词之间是空格隔开,每个字段之间用单引号隔开,整个字段定义部分用括号括起来*/*T_RegUser_PrimaryKey是约束名*/2、设定字段是UNIQUEIDENTIFIER数据类型,唯一性约束,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),-联系人年龄,允许空,check约束必须大于MODIFIEDDATE DATE NULL CONSTRAINT T_CUSTOMER_DEFAULT DEFAULT GETDATE(),-默认值约束,并调用SQL函数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,-产品PAYMENT MONEY NOT NULL,-货款ORDER_CUSTOMERID UNIQUEIDENTIFIER NOT NULL,-客户ID,为外键,外键内容是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是外键约束名,FOREIGN KEY后边是本表内要被设置的外键列REFEREN

15、CES后边是主键所在的表,括号内是主键表的链接列*/*表名后的所有内容,都要拿括号括起来*/*外键的数据类型要和主键一模一样,哪怕主键是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-声明的时候,和创建表的时候一样示例:ALTER TABLE T_CUSTOMERADD GENDER BIT NOT NULL,-添加多个列不用括号,用逗号分开即可CUSTOMERADDRESS INT NOT NULL UNIQUE-声明的时候,和创建表的时候一样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约束内容),-CHECK约束,每个约束之间用逗号隔开CONSTRAINT <约束名> UNIQUE(<列名>),-唯一性约束CONSTRA

18、INT <约束名> DEFAULT <默认约束值或函数> 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如果创建的时候,没有显性的指定约束名,例如UNIQUE,CHECK等约束,可以通过SP_HELP T_CUSTO

20、MER来查询所有的约束名。在查询结果的第7个结果集中,可以看到类似下图的结果,第一列是约束类型,第二列就是约束名,最后一列是列名。5、修改列的字段类型/*修改列的字段类型和非空*/ALTER TABLE <表名>ALTER COLUMN <列名> <新数据类型>示例:ALTER TABLE T_CUSTOMERALTER COLUMN CUSTOMERADDRESS NVARCHAR(100) -修改多列的字段类型还不知道怎么改6、设置列的空/非空/*修改列的空和非空*/ALTER TABLE <表名>ALTER COLUMN <列名>

21、; <数据类型> NOT NULL必须跟数据类型,否则会示例: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>三、表数据【插入数据】1、插入一行全字段数据/*插入一行全字段数据*/INSERT INTO <tbname>VALUES('值1','值2','值3') -值的数量必须和表定义的一样多,而且数据类型必须一一对应示例:INSERT INTO T_CUSTOMERVALUES (NEWID(),'公司3','用户3','123',DEFAULT,'

23、;xxx') -要到了NEWID()函数2、插入一行部分字段数据/*插入一行数据*/INSERT INTO <tbname>(列1,列2,列3.) VALUES('值1','值2','值3') -字符串是要用单引号括起来,数字值不用示例:INSERT INTO T_CUSTOMER2(COMPANYNAME,USERNAME,PHONENUMBER) VALUES('公司1','用户1','#39;)与要插入的列一一对应,可以不同于表定义的顺序,可以乱序,只要一一

24、对应即可/*CUSTOMERID是标识列,自增的,所以不用指定*/3、插入多行数据INSERT INTO T_CUSTOMER2(COMPANYNAME,USERNAME,PHONENUMBER) VALUES('公司2','用户2','#39;),('公司3','用户3','#39;), -用括号将每一行数据括起来,括号与括号之间用逗号隔开('公司4','用户4','#39;) 4、插入函数值和默认值/

25、*UNIQUEIDENTIFIER类型字段,使用NEWID()函数。有默认值的使用DEFAULT关键字*/INSERT INTO <tbname>(列1, 列2, 列3, 列4,) VALUES(NEWID(),'值1','值2',DEFAULT)示例:/*CUSTOMERID是UNIQUEIDENTIFIER类型,所以要使用NEWID()函数,MODIFIEDDATE字段有模式值,是取得当前的日期时间GETDATE()函数*/INSERT INTO T_CUSTOMER(CUSTOMERID,COMPANYNAME,USERNAME,PHONE,M

26、ODIFIEDDATE) VALUES(NEWID(),'公司','用户','#39;,DEFAULT)【修改数据】/*UPDATE通常是与SET和WHERE配合使用,如果不用WHERE,则会把整个列都修改*/UPDATE <tbname>SET 列='值'WHERE 列='值' AND 列='值'-可以是任何删选条件示例:/*将公司2的电话号码修改/UPDATE T_CUSTOMERSET PHONE='#39;

27、WHERE COMPANYNAME='公司2'【查询数据】1、查询所有数据,或者部分行数据(用where进行过滤)/*查询表中的所有数据用星号*/SELECT *FROM <tbname>WHERE <筛选条件1> AND <筛选条件2> OR <筛选条件3>示例:/*查询客户表中的所有数据*/SELECT * FROM T_CUSTOMER2、查询表中的部分列数据,/*查询部分列的所有数据,或者部分行部分列的数据*/SELECT <列名1>,<列名2>,<> -这个列名顺序可以按照自己的想法来

28、,不用非要和表定义一致FROM T_ORDERWHERE <筛选条件1> AND <筛选条件2> OR <筛选条件3>示例:/*查询订单表中的所有数据*/SELECT PRODUCT, PAYMENTFROM T_ORDER3、对查询出来的数据进行排序/*ORDER BY 的默认排序是升序ASC,如果BY的列是数字,则是从大到小,如果是字符串,则是从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可以采用不一样的排序*/示例:/*查询客户表中的所有数据*/SELECT * FROM T_ORDERWHERE PAYMENT>100 价格大于100ORDER BY PRODUCT ASC, PAYMENT DESC -产品名称使用升序,产品价格使用降序【删除数据】1、删除一般数据/*删除公司一般数据*/DELETE FROM <tbname>WHERE <筛选条件1> AND

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

31、如果该条数据已经被外键表引用,则无法删除。被引用的数据必须置于未被使用的状况,方法就是修改外键表字段,或者删除外键表中的引用数据*/示例:/*删除公司,公司ID是订单表的外键*/UPDATE T_ORDER 将所有引用公司1的数据全部改成公司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 '用户_'-将客户表中包含”用户+任意字符”的行数据查出来2、多字符通配符,只能用于字符串匹配/*单字符通配符%,百分号代表*从0到N的字符串/S

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

34、lt;tbname>示例:SELECT COMPANYNAME AS 公司,USERNAME AS 联系人,PHONE AS 联系电话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岁的医生或者SELECT *FROM T_DOCTORWHERE AGE NOT IN (23,24,34) -选出年龄不是23,24和34岁的医生【BETWEEN匹配连续值】1、如果要查询离散值,一个方法是很多个OR条件,可以可以用IN或NOT IN关键字。示例:SELECT *FROM T_DOCTORWHERE AGE BETWEEN 20 A

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

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

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

39、GE AS 年龄,F_SALARY AS 工资, COUNT(*) AS 人数FROM T_EMPLOYEEGROUP BY F_AGE,F_SALARY-按照年龄分组,再按照工资分组,然后统计人数HAVING COUNT(*)>1-在分组中剔除count数为的小分组输出结果:【TOP限制结果集】1、对查询出的前几条数据的筛选/*一般是与ORDER BY连用,而且TOP 必须放在*型号或者列名的前面。不和ORDER BY也可以使用,但是查询结果不确定*/SELECT TOP 数量 列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的结果子集。删除的时候一般是用主键,或者没有重复的数据列。最主要的是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、数据】1、查询一列中的无重复数据/*只能查询列的结果集。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、合并查询结果/*合并查询结果集,所以每个每个结果集必须有相同的列数,每个结果集的列必须类型相容,位置也必须一致,可以合并2个以上的查询结果。但是默认会合并重复数据*/*如果列数不一样,必须再相应的位置补齐。默认查询结果是对第一列排序*/*如果列名不一致,则表头默认是采用第一个查询的列名*/*外键是把多个列组合在一起,而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,因为判断去重,会让数据库消耗掉大量的资源*/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 多加一行,做一些函数操作示例:SELECT F_NAME,F_SALARY FROM T_EMPLOYEEUNION ALLSELECT '工资合计',SUM(F_SALARY) FROM T_EMPLOYEE-工资合计UNION ALLSELECT '平均工资',AVG(F_SALARY) FROM T_EMPLOYEE-平均工资【JOIN联合查询】1、JOIN联合查询/*JOIN联合查询不光是可以查有主/外键关联的,也可以查没有关联的几张数据表,但是得有一列数据相等.而且可以列出几张表中所有的列*/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五、常用函数:函数名函数意义示例数学函数SUM()求某一列的和AVG()求某一列的平均值MAX()取出某一列的最大值MIN()

47、取出某一列的最小值ABS()求绝对值CEILING()舍入到比它大的、最近的最大整数。注意不是数学意义上的四舍五入例如:3.33舍入到4,-3.33舍入到-3FLOOR()舍入到比它小的、最近的最大整数。注意不是数学意义上的四舍五入例如:3.33舍入到3,-3.33舍入到-4ROUND()舍入到离我半径的整数,就是传统意义上的数学上的四舍五入例如:3.65舍入到4,-3.65舍入到-4。ROUND(3.14159,3)就是保留小数点后3位,将舍入为3.14200字符串函数LEN()字符串的长度括号里头是字符串或列名LOWER()字符串转成小写同上UPPER()字符串转成大写同上LTRIM()去

48、掉字符串左边的空格同上RTRIM()去掉字符串右边的空格同上。如果要去掉两边的空格,就想L再R,或者先R再LSUBSTRING()取子字符串。有三个参数,SUBSTRING(STRING START_POSITION LENGHT)取子字符串SELECT SUBSTRING('abcdef111',2,3)日期函数GETDATE()获取服务器当前日期和时间DATEADD()DATEADD (datepart , number, date ),计算增加以后的日期。参数date为待计算的日期;参数number为增量;参数datepart为计量单位(可取值year、quarter季度

49、、month、day、week、hour、minute、second等,具体参考书)SELECT DATEADD(MONTH ,-8,GETDATE()-为计算日期date的个月之前的日期DATEDIFF()DATEDIFF(datepart,startdate,enddate):计算两个日期之间的差额。datepart 为计量单位,可取值参考DateAdd。统计不同工龄的员工的个数: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. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论