1、SQL 基本语法、关键字、函数使用说明:1、为了能更方便的使用该资料,可以切换到文档结构图,即视图-文档结构图2、该资料为基本的 SQL 语法和常用函数,函数的具体使用方法大家可以通过SQL2000 或 SQL2005 自带的帮助文档进行查询。SQL 语法&常用关键字整理 .1一、示例数据库表 .21、Classes 表(班级表) .22、Student 表 .2二、SQL 语句的基本语法 .21、添加数据 .32、修改数据 .33、删除数据 .34、最简单的查询语句 .3三、SQL 中的简单查询语句 .31、Top .42、Like .43、Not like .44、Or .45、And .
2、46、Between .47、In .58、Null .59、Group by .510、Order By .511、Having .5四、SQL 中常用的函数 .61、字符串函数 .61)、Len(str) .62)、Substring(str,start,length) .63)、Lower(str) .64)、Upper(str) .65)、Reverse(str) .66)、Ltrim(str) .67)、Rtrim(str) .68)、Replace(str1, str2, str3) .62、时间日期函数 .61)、getDate() .62)、datePart(datepart,
3、date) .63)、dateDiff(datepart,date1,date2) .64)、dateadd(datepart,number,date) .63、数学函数 .71)、abs(numberic) .72)、round(numberic,int_number) .73)、sign(numberic) .74、聚合函数 .71)、Count() .72)、sum() .73)、Avg() .74)、Max() .75)、Min() .7五、SQL 中的子查询和连接查询 .71、子查询 .72、连接查询 .8六、相关参数取值列表 .81、datepart .8一、示例数据库表1、Cla
4、sses 表(班级表)编号 字段名 中文说明 数据类型 容许为空 备注1. cid 班级编号 Int No 自动增长列2. cname 班级名称 Varchar(20) No2、Student 表编号 字段名 中文说明 数据类型 容许为空 备注1 uid 编号 Int No 自动增长列2 uname 姓名 Varchar(20) No3 usex 性别 Char(1) No 默认值(男)4 uborn 生日 DateTime Yes 默认值(当前日期)5 umark 成绩 Float Yes6 cid 班级编号 int No 引用班级表的 ID二、SQL 语句的基本语法1、添加数据语法:Ins
5、ert Into 表名 (字段 1,字段 2,) Value (值 1,值 2,)说明:值列表中的值要与字段名列表一一对应例如:向学生表中添加一条记录Insert into Student (uname ,usex,uborn,umark,cid)value (tom,男,1999-9-9,90,1)2、修改数据语法:Update 表名 Set 字段 1=值 1,字段 2=值 2, Where 条件 说明:.中的内容可以不加,不加的时候即修改当前表中的所有记录,否则修改满足 Where关键字后面条件的记录。例如:A/、给每一位学生的成绩加 10 分Update Student Set umar
6、k=umark + 10B、给 tom 加 10 分Update Student Set umark=umark + 10 Where uname=tom3、删除数据语法:Delete From 表名 Where 条件 说明:.中的内容可以不写,不写的时候即删除当前表中的所有记录,否则删除满足 Where关键字后面条件的记录。例如:A、删除学生表中的所有数据Delete From StudentB、只删除 tom 的信息Delete From Student Where uname=tom4、最简单的查询语句语法:Select 字段 1,字段 2, From 表名 where 条件 说明:如果
7、为查询该表中的所有数据可以写成 Select * From 表名,“*”即代表表中的所有的列名例如:A、 查询学生表中的所有列、所有数据Select * From StudentB、 查询姓名为成绩为 90 的学生姓名和成绩Select uname,umark From Student where umark=90三、SQL 中的简单查询语句1、Top语法:Select top 数量 * From 表名 Where 条件实例:查询前三个学生的所有信息。Select Top 3 * From Student说明:Top 关键字用来控制我们所要查询数据的行数,有时候我们不需要查询表中的所有数据就可
8、以使用 Top 关键字来获取我们所需要数据的行数。2、Like语法:Select * From 表名 Where 字段名 like 张%实例:查询名字以“张”字开头的所有学生Select * From Student Where uname like “张%”说明:like 关键字用于字符串比配,常用的匹配模式有 like %a(匹配以 a 结尾的字符串),like a%(匹配以 a 开头的字符串),Like “%a%”( 匹配某给字符串中含有 a 的字符串)3、Not likeNot like,大家可以从字面上看出他刚好与 like 关键字的意思相反(不匹配)4、Or语法:Select *
9、From 表名 Where 字段 1=值 1 or 字段 2=值 2 (用于查询语句)实例:查询名字为 tom 或者 编号为 1 的学生姓名Select * From Student Where uname=tom or uid=1说明:or,从字面上就可以看出他所包含的意思,即 “或“的意思(满足条件 1 或者条件 2 的数据) ,一般用于查询语句的查询条件中。5、And语法与 Or 关键字的类似,只是为并列条件 (既满足条件 1 也要满足条件 2 的数据)。6、Between语法:Select * From 表名 Where 字段 1Not Between 值 1 And 值 2实例:查询
10、成绩在 80 到 90 之间的学生信息Select * From Student Where umark Between 80 And 90说明:条件包含起点和终点(即上面所查询的学生包含 80 和 90 分的) ,该查询语句可以使用一下语句替换:Select * From Student Where umark = 80 And umark =907、In语法:Select * From 表名 Where 字段 in (值 1,值 2,值 3,)实例:查询姓名为“tom” 、 “jack”、 “kite”的学生信息Select * From Student Where uname In (t
11、om,jack,kite)说明:in 关键字可以简化我们的查询语句、并且更容易读解,其实我们也可以使用我们上面所学到的 Or 关键字来实现这个查询语句:Select * From Student Where uname=tom Or uname=jack Or uname=kite相比之下很明显的体现了 in 关键字的优点。8、Null语法:Select * From 表名 Where 字段 Is Null / Is Not Null实例:查询缺考学生的姓名Select uname From Student Where umark Is Null说明:Null 即什么都没有,当该字段为字符型的
12、时候 Null 并不等于 值(注意)。9、Group by语法:Select * From 表名 Group By 字段名称实例:按成绩分组Select * From Student Group By umark说明:Group By 分组查询,当 Select 后面的字段列表(FieldList)中有聚合函数时,则 Group By 后面必须包含 FieldList 中的所有字段,Group By 后面可以跟多个字段,以逗号(“ , ”)隔开。10、Order By语法:Select * From 表名 Where 条件 Order By 字段 1,字段 2, Asc|Desc实例:按成绩排
13、序Select * From Student Where umark Is Not Null Order By umark Asc(升序)Select * From Student Where umark Is Not Null Order By umark Desc(降序)说明:Order By 排序,默认 Asc(由小到大排序)。如果在 ORDER BY 子句中指定了不止一列,排序就是嵌套的。Selct * From Student Where Order By usex,remark。如果可以根据第一个字段完全排序,则之后的字段不会加入排序。11、Having语法:Select * Fr
14、om 表名 Having 条件实例:查询成绩等于 90 分,并且为男同学Select * From Student Where umark=90 having usex=男说明:这个是 Having 的单独用法,先查询所有成绩为 90 分的学生,然后再对查询结果进行筛选,后续会讲解 having 和其他关键字的使用方法。四、SQL 中常用的函数1、字符串函数1)、Len(str)获取字符串长度,不包含 str 后面的空字串如:len(abc)返回的长度为 3 ,len(abc )返回的值也是 32)、Substring(str,start,length)截取字符串如:要截取字符串“abcdef
15、g”中的”cd”字符,Substring(abcdefg,3,2)3)、Lower(str)把字符串中的字符都转换成小写如:把 ABC 全部转换成大写 abc,Lower(ABC)4)、Upper(str)把字符串中的字符都转化成大写如:把 abc 全部转换成大 ABC,Upper(abc)5) 、Reverse(str)反转字符串,即把字符串左右顺序进行颠倒如:Reverse(AaBb),转换后的结果为:bBaA6)、Ltrim(str)去除左边的空格如:Ltrim( trimLeftSpace),结果为:”trimLeftSpace”7)、Rtrim(str)去除右边的空格如:Rtrim(
16、trimRightSpace ),结果为:”trimRightSpace”8)、Replace(str1, str2, str3)str1 待搜索的字符串,str2 待查找的字符串,str3 替换用的字符串如:Replace(Hello World,o,OK),结果为:”HellOK WOKrld”2、时间日期函数1)、getDate()获取系统当前日期时间Cast(Year(getdate() as varchar(10)2)、datePart( datepart,date)获取日期的一部分,datepart 为指定日期部分,date 日期3)、dateDiff( datepart,date
17、1,date2)获取两个日期指定部分的差值。4)、dateadd(datepart,number,date) 返回日期加上 number3、数学函数1)、abs(numberic)求绝对值2)、round(numberic,int_number)根据 int_number 对 numberic 进行四舍五入3)、sign(numberic)numberic,正数、0、负数,返回 +1、0、-14)、floor(numberic) 小于某个数的最大整数numberic,正数、0、负数,返回 +1、0、-1如:select floor(12.010) 则返回的结果为:125)、ceiling(nu
18、mberic) 大于某个数的最小整数numberic,正数、0、负数,返回 +1、0、-1如:select ceiling(12.010)则返回的结果为:134、聚合函数示例:查询班级 A 的总人数、总成绩、平均值、最高分和最低分。Select Count(*) as 总人数 , Sum(umark) as 总成绩,Avg(umark) as 平均成绩, Max(umark) 最高分, Min(umark) as 最低分 From Student Where cid=(Select cid From Classes Where cname=A)1)、Count()说明:Count( 字段名/*
19、) ,统计记录数 Count 函数不会忽略 Null,即 Null 值也加入统计。而其他统计函数都忽略 Null 值。2)、sum()说明:Sum(字段名),字段必须为数值型3)、Avg()说明:Avg(字段名 ),求平均值,字段必须是数值型4)、Max()说明:Max(字段名),求最大值,字段的数据类型一般为数值型,很少用到其他类型(这就不详细讲解了)。 5)、Min()说明:Min( 字段名 ),求最小值五、SQL 中的子查询和连接查询1、子查询子查询就是在一个查询语句中嵌套一个查询(也可以使用在 update、Delete 语句中) 。实例:查询班级编号为 1 的所有学生信息(姓名、性别
20、、生日、成绩、和所属班级名称Select uname,usex,uborn,umark,cname=(Select cname From Classes Where cid=1) From Student where cid=1说明:蓝色标记的查询语句即为子查询语句2、连接查询连接查询与子查询具有相同的功能,可以实现跨表查询。一般比较复杂的跨表查询我们一般都会使用连接查询,同样的一个跨表查询连接查询要比子查询简单些。实例:查询班级编号为 1 的所有学生信息(姓名、性别、生日、成绩、和所属班级名称Select s.uname, s.usex, s.uborn, s.umark, ame From
21、 Student s Join Classes c On s.cid=c.cid.说明:这个是连接查询中最简单的一个查询,连接查询有很多中非常的丰富。Clerk 刚开始只需要理解连接查询的概念即可。六、存储过程(Stored Procedure)&视图(View)1,存储过程:概念:存储过程(Stored Procedure)是一组为了完成特定功能的 SQL 语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。调用:Exec SP_Name( 存储过程名称) Para1/参数 1,Para2/参数 22,视图:概念:一个或多个 SELECT
22、语句所返回的存储查询或所构成的虚拟表。调用:SELECT COL1, COL2, COL3 FROM VIEW_NAME WHERE 七、SQL 关键字ADD EXIT PRIMARYALL FETCH PRINTALTER FILE PRIVILEGESAND FILLFACTOR PROCANY FLOPPY PROCEDUREAS FOR PROCESSEXITASC FOREIGN PUBLICAUTHORIZATION FREETEXT RAISERRORAVG FREETEXTTABLE READBACKUP FROM READTEXTBEGIN FULL RECONFIGUREB
23、ETWEEN GOTO REFERENCESBREAK GRANT REPEATABLEBROWSE GROUP REPLICATIONBULK HAVING RESTOREBY HOLDLOCK RESTRICTCASCADE IDENTITY RETURNCASE IDENTITY_INSERT REVOKECHECK IDENTITYCOL RIGHTCHECKPOINT IF ROLLBACKCLOSE IN ROWCOUNTCLUSTERED INDEX ROWGUIDCOLCOALESCE INNER RULECOLUMN INSERT SAVECOMMIT INTERSECT S
24、CHEMACOMMITTED INTO SELECTCOMPUTE IS SERIALIZABLECONFIRM ISOLATION SESSION_USERCONSTRAINT JOIN SETCONTAINS KEY SETUSERCONTAINSTABLE KILL SHUTDOWNCONTINUE LEFT SOMECONTROLROW LEVEL STATISTICSCONVERT LIKE SUMCOUNT LINENO SYSTEM_USERCREATE LOAD TABLECROSS MAX TAPECURRENT MIN TEMPCURRENT_DATE MIRROREXIT
25、 TEMPORARYCURRENT_TIME NATIONAL TEXTSIZECURRENT_TIMESTAMP NOCHECK THENCURRENT_USER NONCLUSTERED TOCURSOR NOT TOPDATABASE NULL TRANDBCC NULLIF TRANSACTIONDEALLOCATE OF TRIGGERDECLARE OFF TRUNCATEDEFAULT OFFSETS TSEQUALDELETE ON UNCOMMITTEDDENY ONCE UNIONDESC ONLY UNIQUEDISK OPEN UPDATEDISTINCT OPENDATASOURCE UPDATETEXTDISTRIBUTED OPENQUERY USEDOUBLE OPENROWSET USERDROP OPTION VALUESDUMMY OR VARYINGDUMP ORDER VIEWELSE OUTER WAITFOREND OVER WHENERRLVL PERCENT WHEREERROREXIT PERM WHILE