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

下载本文档

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

文档简介

SQLServer2008

常用关键字、数据类型和常用语法

常用关键字:

SQLserver2008一共大约有180多个关键字.简要分为主要关键字、辅助关键字和函数类

关键字.本文就常用的这三类关键字进行语法说明和用例。

说明:1、比较好的习惯是,数据库名以D_开头,表名用T_开头,字段名以F_开头,这样可

以防止和关键字重名。

2、如果确实用到了系统关键字,就要在关键上加口方括号,以与关键字进行区另人例如有

一个用户表被命名为USER,则查询该表内容的时候:SELECT*FROMUSER语句是错误的,应该

是SELECT*FROM[USER]。因为USER是关键字。

编号应用场景

主要关键字

1CREATE创建表

2ALTER修改表结构

3DROP删除数据库和表

4INSERT插入表数据

5INTO与INSERT连用,插入表数据

6VALUES插入表数据时,指定列值

7UPDATE更新表数据

8SET与UPDATE连用,设定列值

9SELECT查询表数据

10FROM从哪个表中查询

11WHERE查询表数据的条件

12DATABASE数据库

13TABLE数据表

14NOT

15NULL空值

16IDENTITY(1,1)标识列

17CONSTRAINT约束,后边跟约束名

18PRIMARY主键,PRIMARYKEY(列名)

19FOREIGN外键FOREIGNKEY(列名)

20KEY

21REFERENCES把…印作参考,指定外键的时候用

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对GROUPBY分组内的数据进行过滤

41TOP筛选结果集

42DISTINCT去重

43UNION

44ALL

45CASE类似与C#中的SWITCH--CASE语法,查询离散值

46ELSE谀定case的默认值

47END绐束case语句

48WHEN与case连用

49VIEW视图

50INDEX索引

51JOIN联合查询

52ON与JOIN连用

数据类型:

SQLServer2008一共有36种数据类型。具体如下:

存储空

编号数据类型字符类型说明

整数型(4)

1tinyint1字节取值范围:0—255

2smaIIint2字节取值范围:—2768—32767

3int4字节取值范围:—231—23—1

4bigint8字节取值范围:一2"一2心一1

浮点类型(6)

38

5—17取值范围:一lO'lTO-1。p(有效位数,p

的取值小于38),可储存的最大十进位数总数,

字节小数点左右两侧都包括在内。s(小数位数,0

<=s<=p<=38)小数点右侧的小数位

5decimal(p,s)

数。

例如:decimal(3,1)表示,一共3位有效位,

其中整数部分2位,小数部分1位,最大值是

99.9,最小值是T9.9

取值范围:一214,768o3648-一214,768。3647。

6numeric(p,s)4字节

用法类似decimaI

取值范围:-214748。3648〜214748.3647。

7smaIImoney4字节

主要是用于货币

8money8字节取值范围:-3.438—3。4*主要用于货币

4或8字取值范围:-3。40E+38~—1.18E-38,0,1.18E

9reaI

—38~3.40E+38

10float4字节取值范围:一3.4E38〜3.4E38

字符类型(8)

每字符1字节,最大可达8000字节。ANSI字

11char(n)

符,会用空格填充.

每字符2字节,最大可达4000字节。UNICODE

12nchar(n)

字符,会用空格填充.

每字符1字节,最大可达8000字节.ANSI字

13varchar(n)

符,可变长度,不会用空格填充。

14varchar(MAX)ANSI字符,最大可达2G

每字符2字节,最大可达4000字节。UNICODE

15nvarchar(n)

字符,可变长度,不会用空格填充。

16nvarchar(MAX)最多为231-1(2147483647)字符

17text每字符1字节,最大可达2G。

18ntext每字符2字节,最大可达2G。

二进制数据类型(5)

19bit1比特NULL,。或1

20binary(n)固定长度二进制数据,最高可达8000字节。

21varbinary可变长度二进制数据,最高可达8000字节。

22varbinary(MAX)最多为2般一1字节

23image可变长度二进制数据,最高可达2GB。

日期和时间类型(7)

24smaIIdatetime

3字节精度一天,支持范围

25date

01/01/0000—31/12/9999o

8字节0.00333秒,支持的范围是'1000-01-01

26datetime00:00:00'if9999-12-3123:59:59'.以'

YYYY-MM-DDHH:MM:SS'格式显示DATETIME

6——8

27datetime2(n)100纳秒

字节

8——10

28datetimeoffset(n)100纳秒

字节

3—5字

29time100纳秒

TlMESTAMP值返回后显示为'YYYY-MM-DD

30timestamp

HH:MM:SS'格式的字符串。

其他数据类型(6)

用于存储xml格式的文档,最大可达2GB,支

31xml

持128级层次。

32geography地理数据。

33geometry几何数据。

主要解决的问题是拥有层次关系的表格,通常

34hierarchyid

用来建豆树形结构

用于存储SQLServer2005支持的各种数据

类型(不包括text、ntext、image、timestamp

35sql_variant和sql_variant)的值。对于sql_variant数

据类型,必须先将它转换为其基本数据类型

值,然后才能参与诸如加减这类运算

Uniqueidentifier是全局唯一标识,可存

36uniqueidentifier储16字节的二进制值,其作用与全局唯一标

记符(GUID)一样,一般用来做主键。

常用语法:

一、数据库

【创建数据库】

CREATEDATABASE<dbname>

【修改数据库】

ALTERDATABASE<dbname>

【删除数据库】

DROPDATABASE<dbname>

二、表结构

【创建数据表】

1、设定字段是允许空,非空、标识列,自增和主键约束,

CREATETABLET_CUSTOMER——表名

(CUSTOMERIDINTIDENTITY(1,1),——客户ID,标识列,从开始,每次自增

COMPANYNAMENVARCHAR(50)NOTNULL,一,如果不显示指明NOTNULL,系统.默久是允许空的

USERNAMENVARCHAR(10)NOTNULL,—联系人姓名,非空

PHONENUMBERCHAR(11)NULL,——联系电话,允许为空

CONSTRAINTT.CUSTOMER.PrimaryKeyPRIMARYKEY(CUSTOMERS))—设定USERID为主键,用括号括起来

/*每个单词之间是空格隔开,每个字段之间用单引号隔开,整个字段定义部分用括号括起来*/

/*T_RegUser_PrimaryKey是约束名大/

2、设定字段是UNIQUEIDENTIFIER数据类型,唯一性约束,CHECK约束和默认值约束。

CREATETABLET_CUSTOMER

(CUSTOMERIDUNIQUEIDENTIFIERUNIQUE,——客户ID,UNIQUEIDENTIFIER类型,唯一性约束

COMPANYNAMENVARCHAR(50)NOTNULLUNIQUE,一公司名称,非空,唯一性约束

USERNAMENVARCHAR(10)NOTNULL,

PHONENUMBERCHAR(11)NULL,

AGETINYINTNULLCHECK(AGE>0),—联系人年龄,允许空,check约束必须大于

MODIFIEDDATEDATENULLCONSTRAINTT_CUS10MER_DEFAULTDEFAULTGETDATEO,一默认值约束,并调用SQL函数GETDATE()

CONSTRAINTT_CUSTOMER_PrimaryKeyPRIMARYKEY(CUSTOMERID))

3、设定字段外键

CREATETABLET.ORDER——订单表

(ORDERIDINTIDENTITY(1,1),—订单ID,标识字段,自增

PRODUCTNVARCHAR(50)NOTNULL,—产品

PAYMENTMONEYNOTNULL,——货款

ORDER_CUSTOMERIDUNIQUEIDENTIFIERNOTNULL,——客户ID,为外键,外^内容是1'_曰5丁0乂£区表的35丁01^区0列

CONSTRAINTT_ORDER_PrimaryKeyPRIMARYKEY(ORDERID),——设置ORDERID为主键

CONSTRAINTT_ORDER_T_CUSTOMER_ForeignKeyFOREIGNKEY(ORDER_CUSTOMERID:REFERENCEST_CUSTOMER(CUSTOMERID))

/*设定外键基本语法*/

CONSTRAINT<约束名〉FOREIGNKEY(〈外批表列名))REFERENCES<主键表〉(<主键表列名〉)

/*设冠外铤,T_ORDER_T_CUSTOMER_ForeignKey是外键约束名,FOREIGNKEY后边是本表内要被设歪的外键列

RCITR匚NCCS后边是主犍所在的表,括于内是主键表的就按列中/

/*表名后的所有内容,都要拿括号括起来*/

/*外健的数据类型要和主键一模一样,哪怕主键是UNIQUEIDENTIFIER也必须设置成一样*/

【修改表名】

/女修改表名,可能会破坏脚本和存储过程。*/

EXECSP_RENAME'〈原表名〉','〈新表名)

示例:

EXECSP.RENAME'T_CUST0MER2",,T_CUST0MER22,

【修改表结构】

1、添加列和列的约束

/*添加列、添加唯一性约束*/

ALTERTABLE<表名)

ADD〈列名1〉BITNOTNULL,—添加多个列不用括号,用逗号分开即可

〈列名2〉INTNOTNULLUNIQUE—声明的时候,和创建表的时候一样

示例:

ALTERTABLET_CUSTOMER

ADDGENDERBITNOTNULL,——添加多个列不用括号,用逗号分开即可

CUSTOMERADDRESSINTNOTNULLUNIQUE——声明的时候,和创建表的时候一样

2、删除列

/*删除列*/

ALTERTABLE<表名〉

DROPCOLUMN<列名1〉,〈列名2>——使用关逑字COLUNM(列)

示例:

ALTERTABLET_CUSTOMER

DROPCOLUMNGENDER,CUSTOMERADDRESS一使用关犍字COLUNM(列)

/*每个列名之间用逗号隔开,如果列上有任何约束,则需要先删除约束*/

3、添加主键约束,唯一性约束、check约束和默认值约束

/*添力。主锭约束,唯一性约束,check约束和取认值约束*/

ALTERTABLE〈表名)

ADDCONSTRAINT<约束名〉CHECK(CHECK约束内容),——CHECK约束,每个约束之间用逗号隔开

CONSTRAINT〈约束名〉UNIQUE(〈列名)),一唯一性约束

CONSTRAINT<约束名〉DEFAULT<默认约束值或函数〉FOR<列名〉一默认值约束

示例:

ALTERTABLET_CUSTOMER

ADDCONSTRAINTT_CUMSTOMCR_AGC_CIIECKCHECK(AGL>0),CIICCK约束

CONSTRAINTT_CUSTOMER_USERNAME_UNIQUEUNIQUE(USERNAME),—唯一性约束

CONSTRAINTT_CUSTOMER_DEFAULTDEFAULTGETDATEOFORMODIFIEDDATE—玳认值约束

4、删除主键约束,唯一性约束、check约束和默认值约束

/*删除主键约束,删除唯一性约束、删除check约束,删除默认值约束*/

ALTERTABLE<表名)

DROP<约束名1〉,〈约束名2>,<约束名3>一后边直接跟约束名,用逗号隔开

示例:

ALTERTABLET_CUSTOMER

DROPT_CUSTOMERDEFAULT,—后边直接跟为束名,用逗号隔开

UQ__T_CUSTOM__EDBDOE1935BCFE0A,

CK_T_CUST0MER_AGE_276EDEB3

如果创建的时候,没有显性的指定约束名,例如UNIQUE,CHECK等约束,可以通过SP_HELP

LCUSTOMER来查询所有的约束名。在查询结果的第7个结果集中,可以看到类似下图的结果,第

一列是约束类型,第二列就是约束名,最后一列是列名。

cocstwtj)peconstrartjweMiltipdae.acfion四凡e«WstatusJor_reptabonconstart_kep

1n^MARYKEWewfj'T_CUSTOMER_P>wyKey㈣碗M)附CUSTOMS®

2而位商嬴fg_J_CUSTOM_61加7392弼沏能)fi/a)恢)侦)CUSTOMS®

3WIQUEhrKUtMUQ_T.CUSTOM_88E61BF422V2956响响恢)询COMPONYNAME

5、修改列的字段类型

//修改列为字段类型和非空*/

ALTERTABLE〈表名〉

ALTERCOLUMN<列名)〈新数据类型〉

示例:

ALTERTABLET_CUSTOMER

ALTERCOLUMNCUSTOMERADDRESSNVARCHAR(IOO)--修改多列的字段类型还不知道怎么改

6、设置列的空/非空

/*修改列的空和非空*/

ALTERTABLE<表名)

ALTERCOLUMN<列名〉〈数据类型)NOTNULL—必须跟数据类型,否则会

示例:

ALTERTABLET_CUSTOMER

ALTERCOLUMNMODIFIEDDATEDATENULL

7、修改列名

/*修改列名,可能会破坏脚本和存储过程*/

EXECSP_RENAME'<tbname>。〈原列名〉':'<新列名>’,'COLUMN'—后边的column是固定写法

示例:

EXECSP_RFNAMF'T_CIJSTOMFR.PHONFNIJMRFR','PHONE','COILIMN'——将原来的PHONFNUMRFR电话号码,改成PHONF电

【删除表】

DROPTABLE<tbname>

三、表数据

【插入数据】

1、插入一行全字段数据

/*插入一行全字段数据*/

INSERTINTO<tbname>

VALUES('值1','值2','值3')--值的数量必须和表定义的一样多,而JL数据类型必须一一对应

示例:

INSERTINTOT_CUSTOMER

VALUES(NEWIDO,'公司3','用户3,,'123',DEFAULT,'xxx')--要到了NEWIDO函数

2、插入一行部分字段数据

/女插入一行数据*/

INSERTINTO<tbname>

(列1,列2,列3.。)

VALUES('值1'值2','值3')-一字符串是要用单引号括起来,数字值不用

示例:

INSERTINTOT.CUST0MER2

(COMPANYNAME,USERNAME,PHONENUMBER)

VALUES('公司1','用户1',)一与要插入的列一一对应,可以不同于表定义的顺序,可以乱序,只要一一对

应即可

/*CUSTOMERID是标识列,自增的,所以不用指定去/

3、插入多行数据

INSERTINTOT_CUSTOMER2

(COMPANYNAME,USERNAME,PHONENUMBER)

VALUES('公司2','用户2',),

('公司3'用户3',),—用括号将每一行数据括起来,括号与括号之间用逗号隔开

('公司4'用户4',)

4、插入函数值和默认值

/*UNIQUEIDENTIFIER类型字段,使用NEWID0函数。有默认值的使用DEFAULT关键字*/

INSERTINTO<tbname>

(列1,列2,列3,列4,)

VALUES(NEWIDO,'值1','值2',DEFAULT)

示例:

/*CUSTOMERID是UNIQUEIDENTIFIER类型,所以要使用NEWIDO函数,MODIFIEDDATE字段有模式值,是取得当前的日期时间

GtIDAIt0函数*/

INSERTINTOT_CUSTOMER

(CUSTOMERID,COMPANYNAME,USERNAME,PHONE.MODIFIEDDATE)

VALUES(NEWIDO,'公司‘,'用户','13999W999DEFAULT)

【修改数据】

/#UPDATE通常是与SET和WHERE配合使用,如果不用WHERE,则会把整个列都修改*/

UPDATE<tbname>

SET列='值'

WHERE列='值'AND列='值'——可以是任何删选条件

示例:

/女将公司2的电话号码修改/

UPDATET_CUSTOMER

SETPHONE='138888888881

WHERECOMPANYNAME:'公司2'

【查询数据】

1、查询所有数据,或者部分行数据(用where进行过滤)

/*查询表中的所有数据用星号*/

SELECT*

FROM(tbname>

WHERE〈筛选条件1>AND<筛选条件2〉0口<筛选条件3》

示例:

/十查询客尸表中的所有数据+/

SELECT*FROMTCUSTOMER

2、查询表中的部分列数据,

/*查询部分列的所有数据,或者部分行部分列的数据*/

SELECT〈列名1〉,<列名2>,——这个列名顺序可以按照自己的想法来,不用非要和表定义一致

FROMT_ORDER

WHERE<筛选条件1>AND<筛选条件2>OR〈筛选条件3》

示例:

/*查询订单表中的所有数据*/

SELECTPRODUCT,PAYMENT

FROMT_ORDER

3、对查询出来的数据进行排序

"ORDERBY的默认排序是升序ASC,如果BY的列是数字,则是从大到小,如果是字符串,则是从A到Z,如果是时间从远至近。

降序的话是加关键字DESC。假如是升序,最好也加上ASC*/

SELECT*

FROM<tbname>

WHERE〈筛选条件1>AND〈筛选条件2〉OR〈筛选条件3》

ORDERBY〈列名1〉ASC(升序)/DESC(译序),〈列名2〉ASC(升序)/DESC(译序)

/*列1和列2可以采用不一样的排序夫/

示例:

/小杳询客户耒中的所有数:撮*/

SELECT*

FROMT_ORDER

WHEREPAYMENT>1OO-价格大于100

ORDERBYPRODUCTASC,PAYMENTDESC——产品名称使用升序,产品价格使用降序

【删除数据】

1、删除一般数据

/*删除公司一般数据*/

DELETEFROM<tbname>

WHERE<筛选条件1〉AND〈筛选条件2>OR〈筛选条件3》

示例:

/*删除公司,公司ID是订单表的外犍*/

DELETEFROMT_CUSTOMER

WHERECOMPANYNAME='公司1'

2、快速高效的删除表内的全部数据

/小快速高波的清空表内的全部数据,TRUNCATE本意是极短、把…板短。TRUNCATE只能用来删除表中的所方数据,不能用来

删除部分款据,而且有外健约束的主健表不能被删除*/

TRUNCATETABLE<tbname>

示例:

/女删除公司,公司ID是订单表的外键文/

TRUNCATETABLET_CUSTOMER

3、删除有外键约束的数据

/*如果该条数据已经被外键表引用,则无法删除,被引用的数据必须置于未被使用的状况,方法就是修改外键表字段,或者删

除外键表中的引用数据*/

示例:

/*删除公司,公司ID是订单表的外延大/

UPDATET_ORDER-将所有引用公司1的数据全部改成公司2

SETORDER_CUSTOMERID-,2f20b157—a287-43c0-bc99-1fb917618629,

WHEREORDERCUSTOMERID=*cO13076f—7889—400e—aa7a—b38436730d70'

/*然后才可以在主键表中剪除公司1大/

DELETEFROMT_CUSTOMER

WHERECOMPANYNAME='公司1'

四、其他辅助关键字

[LIKE通配符】

1、单字符通配符,只能用于字符串四配

/*单字符通配符_*/

SELECT*

FROMLCUSTOMER

WHERE<列名1〉LIKE通配符AND〈筛选条件2〉OR〈筛选条件3》

示例:

SELECT*

FROMT_CUSTOMER

WHEREUSERNAMELIKE'用户--将客户表中包含"用户+任意字符”的行数据叁出来

2、多字符通配符,只能用于字符串匹配

/*单字符通配符%,百分号代表*从0到N的字桥串/

SELECT*

FROMT_CUSTOMER

WHERE<列名1〉LIKE'$通配符犷AND<筛选条件2〉OR<筛选条件3》

示例:

SELECT♦

FROMTCUSTOMER

WHEREUSERNAMELIKE'%用户%'--查询客户表中用户名包含“用户”二字的所有数据

【AS列名】

1、AS可以将查询结果的英文定义表头改成非英语的别名表头

/*单字符通配符_*/

SELECT〈列名1〉AS〈另”名1>,<列名2>AS<另1名2>--每个列之间用逗号隔开

FROM<tbname>

示例:

SELECTCOMPANYNAMEAS公司,USERNAMEAS联系人,PHONEAS联系电话

FROMTCUSTOMER

【NULL值】

1、NULL值要用特殊的关键字IS或ISNOT,而不能用!二或。之类的符号

示例:

SELECTCOMPANYNAME,USERNAME

FROM「CUSTOMER

WHEREPHONEISNULL一选出电话号码是NULL的行,也可以与其他条件一起使用

或者

SELECTCOMPANYNAME,USERNAME

FROM「CUSTOMER

WHEREPHONEISNOTNULL—选出电话号码不是NULL的行

[IN匹配离散值】

1、如果要查询离散值,一个方法是很多个OR条件,可以可以用IN或NOTIN关键字.

示例:

SELECT*

FROMT^DOCTOR

WHEREAGEIN(23,24,34)—选出年龄是23,24和34岁的医生

或者

SELECT*

FROMT_DOCTOR

WHEREAGENOTIN(23,24,34)--选出年龄不是23,24和34岁的医生

[BETWEEN匹配连续值】

1、如果要查询离散值,一个方法是很多个OR条件,可以可以用IN或NOTIN关键字。

示例:

SELECT*

FROMTDOCTOR

WHEREAGEBETWEEN20AND50--查询出年龄介于20到50之间的医生数据

或者

SELECT*

FROMT_DOCTOR

WHEREAGENOTBETWEEN20AND50--查询出年龄不介于20到50之间的医生数据

【GROUP分组】

1、按照某列分组

/*先按照GROUPBY字段进行分组,然后在分组内进行操作.所以SELECT后的列名只能是GROUPBY内的列,或者是聚合函数.如

果有WHERE的话,GROUP和ORDER都必须放在WHERE之后*/

SELECT分组列名AS列别名,聚合函数1,聚合函数2

FROM〈tbname〉

GROUPBY分组列名

示例:

SELECTF_AGEAS年龄,COUNT(*)AS人数,AVG(F_SALARY)AS工资平均值

FROMT_EMPLOYEE

GROUPBYF_AGE一按照年龄分组

输出结果:

□结果」消息

年龄人数工资平均值

102250.00

22433020.00

32532333.3333

2、按照多列分组

/*先按照列名1分组,再按照列名2分组。如何列名1分为3组,每一组里边按照列名2又分为2组,则输出就是6行数据*/

SELECT列名1,列名2,聚合的数

FROM(tbname)

GROUPBY列名1,列名2一直接用逗号隔开多个列名即可

示例:

SELECTF_AGEAS年龄,F.SALARYAS工资,COUNT(*)AS人数

FROMT_EMPLOYEE

GROUPBYF_AGE,F_SALARY——按照年龄分组,再按照工资分组,然后统计人数

ORDERBYF_AGEASC—ORDERBY也可以一起使用

输出结果:

国结果为消息

年龄工资人数

1i23:2000.002

2232500.002

3243020.003

4252100.002

5252800.001

[HAVING数据分组后的再筛选】

1、数据分组后的筛选

//HAVING是对分组以后的数据进行过滤。有了GROUPBY才能使用HAVING,无GROUPBY是不能使用HAVING的。HAVING中的

列,也只能和SELECT语句一样,使用GROUPBY列或者聚合函数*/

SELECT列名1,列名2,聚合函数

FROM<tbname>

GROUPBY列名1,列名2一直接用逗号隔开多个列名即可

HAVING聚合函数的筛选条件

示例:

SELECTF_AGEAS年龄,F_SALARYAS工褥,COUNT(火)AS人数

FROMT_EMPLOYEE

GROUPBYF_AGE,F_SALARY——按照年龄分组,再按照工资分组,然后统计人数

HAVINGCOUNT(*)>1--在分组中剔除count数为的小分组

输出结果:

百"结果J消息

年龄工资人数

J2000.00

1「济”2

2252100.002

3232500.002

4243020.003

【TOP限制结果集】

1、对查询出的前几条数据的筛选

/*一般是与ORDERBY连用,而且TOP必须放在*型号或者列名的前面。不和ORDERBY也可以使用,但是查询结果不确定*/

SELECTTOP数量列1,列2

FROM<tbname)

ORDERDY排序列1,排序列2DCSC/ASC

示例:

SELECTTOP3F_NAME,FSALARY——选出工资最高的三个人

FROMT_EMPLOYEE

ORDERBYFSALARYDESC

2、对查询出的中间结果进行筛选,使用于查询。这个非常重要的是用在分页上。

/*如果要选择从X开始后Y个结果的子集,第一步先查询出TOPXT个结果子集,热后把它排除掉就是从X到X+Y的结果子集。

删除的时候一般是用主键,或者没有重复的数据列.最主要的是NOTIN关键字*/

SELECTTOPX列名1,列名2

FROM<tbname)

WHERE主锭列NOTIN(SELECTTOPX—1主蝮FROM<tbname>ORDERBY排序列名DESC)

ORDERBY排序列名DESC

/*WHERE后的列名必须和子查询的SELECT列名一致*/

/*主查询的ORDERBY列名必须和子查询的ORDERBY列名一致,而且排序方式也必须一致*/

示例:

查询出工资排名是4,5,6名*/

SELECTTOP3F_NAME,F_SALARY

FROMT_EMPLOYEE

WHEREF_IDNOTIN(SELECTTOP3F_IDFROMT_EMPLOYEEORDERBYF_SALARYDESC)

ORDERBYF_SALARYDESC

[DISTINCT去除重复数据】

1、查询一列中的无重复数据

/*只能查询列的结果集。DISTINCT要放在SELECT之后,和所有列名的前面*/

SELECTDISTINCT去重列名

FROM<tbname>

示例:

SELECTDISTINCTF_DEPARTMENT—查询出的部门列去重

FROMT_EMPLOYEE

2、多列组合去重

/*每个列都一样的,才算重复。如果一列不一样,就不算重复*/

SELECTDISTINCT去重列名1,去重列名2

FROM〈tbname〉

示例:

SELECTDISTINCTF_DEPARTMENT,F_SUBCOMPANY

FROMT_EMPLOYEE

西屋果心消息

F_DEPARTMENTF_SUBCOMPANY

1[办公室]本部

2办公室上海

3开发部北京

4开发部本部

5开发部上海

6市场部北京

7市场部本部

【UNION合并查询结果】

1、合并查询结果

/*合并查询结果集,所以每个每个结果集必须有相同的列数,每个结果集的列必须类型相容,位置也必须一致,可以合并2个

以上的查询结果。但是默认会合并重复数据去/

/*如果列数不一样,必须再相应的位置:补齐.默认查询结果是对第一列排序*/

/*如果列名不一致,则表头默认是采用第一个查询的列名*/

/*外键是把多个列组合在一起,而UNION是把多个行组合在一起*/

SELECT列1,列2,补齐列FROM<tbname1>

UNION

SELECT列1,列2,列3FROM<tbname2>

示例:

SELECTFNAME,FAGE,0AS"工资"FROMT_TEMPEMPLOYEE——临时工没工资,所以要补齐

UNION

SELECTF_NAME,F_AGE,F_SALARYFROMT_EMPLOYEE

旦结果叵消息

FNAMEFAGE工资

!’二.....!

1LA..........J120.00

2AAA202300.00

3B230.00

4C340.00

5CAT252100.00

6CHEN243020.00

7CHENG252100.00

2、ALL合并查询出的所有结果,不去重

/*除非程序需要,一般要加ALL,因为判断去重,会让数据库消耗掉大量的资源*,

SELECT列1,列2,补齐列FROM<tbname1>

UNIONALL

SELECT列1,列2,列3FROM<tbname2>

示例:

SELECTFNAMEFROMT_TEMPEMPLOYEE——名字里头有重复的

UNIONALL

SELECTF_NAMEFROMT_EMPLOYEE

3、利用UNION多加一行,做一些函数操作

示例:

SELECTF_NAME,F_SALARYFROMT_EMPLOYEE

UNIONALL

SELECT'工资合计SUM(F_SALARY)FROMT_EMPLOYEE―工资合计

UNIONALL

SELECT'平均工资',AVG(F_SALARY)FROMT_EMPLOYEE——平均工资

【JOIN联合查询】

1、JOIN联合查询

//JOIN联合查询不光是可以查有主/外键关联的,也可以查没有关联的几张数据表,但是得有一列数据相等.而且可以列出几

张表中所有的列*/

SELECT表I.列1,表2。列3,表2。列4

FROM表1JOIN表2ON表1.列仁表2。列2

/会或者给我取个别名,比较容为查看*/

SELECT0。列1,0。列2,Co列3

FROM表1ASCJOIN表2AS0ONC.列1=0.列2

示例:

SELECT0。ORDERID,0.PRODUCT,C.PHONE

FROMT_CUSTOMERASCJOINT_ORDERAS0ONC.CUSTOMERID=0.ORDER_CUSTOMERID

同结果|五消息

ORDERIDPRODUCTPHONE

111―一!作比本123

22诏笨123

33铅笔盒123

44钢笔321

59铅笔321

610铅笔321

711作业本321

五、常用函数:

函数名函数意义示例

数学函数

SUMO求某一列的和

AVG()求某一列的平均值

MAX()取出某一列的最大值

MINO取出某一列的最小值

ABSO求绝对值

舍人到比它大的、最近的最大整数。注例如:3.33舍人到4,-3.33舍人

CEILINGO

意不是教学意义上的四舍五人到一3

舍入到比它小的、最近的最大整数。注例如:333舍入到3,-3.33含

FLOOR()0

意不是数学意义上的四舍五入入到一4

例如:3。65舍入到4,-3o65舍

舍人到离我半径的整数,就是传统意义入到一4。

ROUND()

上的数学上的四舍五入ROUND(3.14159,3)就是保留小数

点后3位,将舍入为3o14200

字符串函数

LENO字符串的长度

温馨提示

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

评论

0/150

提交评论