找到一个可以快速学习SQL语法的网站W3school SQL教程,从这上面学习一些基本语法,再来看考试书。

WHERE子句

WHERE子句用来指定选择的条件。

...WHERE 表达式

表达式内可以使用的操作符

意义

=

等于

<>

不等于

>

大于

<

小于

>=

大于等于

<=

小于等于

BETWEEN

在某个范围内

LIKE

搜索某种模式

可以放在SELECT语句中,如:

select SName,SAddress,SGrade from students where SGrade>2

SQL SERVER USING语法_JOIN


注意写在整个SELECT-FROM的后面。

补充:实际上,前面学的UPDATE和DELETE本身是不带WHERE的,应当是:

UPDATE 表名称 SET 列名称=新值,列名称=新值,...
DELETE FROM 表名称

AND & OR运算符

表示与和或,用来连接表达式:

表达式 AND/OR 表达式

如:

select SName,SAddress,SGrade from students where (SGrade>2 and SAddress='China')

SQL SERVER USING语法_UNION_02


可以看到对字符串的匹配不区分大小写。可以用AND,OR和()来组成更复杂的判断条件。

SQL通配符

通配符

含义

%

匹配任意多个字符

_

匹配一个字符

[字符列]

匹配字符列中的某个字符

[^字符列]或[!字符列]

匹配字符列外的某个字符

如:

select SName,SAddress,SGrade from students where SAddress like '%[cC]%i%'

SQL SERVER USING语法_SQL SERVER USING语法_03

IN操作符

...IN (值列表)

指匹配处于这些值之中的任意一个。
如:

select SName,SAddress,SGrade from students where SAddress in ('China','bCity')

SQL SERVER USING语法_WHERE_04

BETWEEN操作符

匹配位于两值之间的值。

...BETWEEN 值1 AND 值2

如:

select SName,SAddress,SGrade from students where SGrade between 3 and 6

SQL SERVER USING语法_WHERE_05

别名Alias

别名可以使程序看起来更简洁。可以为表或表中的列指定别名,语法都是

...表名/列名 AS 别名 ...

而不影响所在语句的任何结构。
如:

select STU.SName as SN,STU.SAddress as SA,STU.SGrade as SG from students as STU where STU.SGrade between 3 and 6

就是为表studets设置了别名STU,并为其中的列SName,SAddress,SGrade设置了别名SN,SA,SG。

SQL SERVER USING语法_JOIN_06


可以看到结果的表中的列也被显示了别名而不是原名。

JOIN根据列间关系访问多表(内连接/左连接/右连接/全连接)

不使用JOIN时,可以用这种方式访问具有外键约束(或者仅仅是用某个列做关联)的两个表:

select S.StudentName,S.StudentNo,R.SubjectID,R.StudentResult,R.ExamDate
from Student as S,Result as R
where S.StudentNo=R.StudentNo

SQL SERVER USING语法_IN_07


这里是因为这两张表用学号StudentNo列确定了谁是谁。

用INNER JOIN(即JOIN)建立内连接:

select S.StudentName,S.StudentNo,R.SubjectID,R.StudentResult,R.ExamDate 
from Student as S
inner join Result as R
on S.StudentNo=R.StudentNo

SQL SERVER USING语法_SQL SERVER USING语法_08

实际上除了INNER JOIN(即JOIN,内连接)之外,还有下面三种JOIN:

SQL SERVER USING语法_UNION_09

测试一下LEFT JOIN:

select S.StudentName,S.StudentNo,R.SubjectID,R.StudentResult,R.ExamDate 
from Student as S
left join Result as R
on S.StudentNo=R.StudentNo

s004刘猫在Student表中是有的,但是没有参与任何考试,所以在Result表中没有s004这个学号,即是是这样,因为是LEFT JOIN(LEFT OUTER JOIN),只要左边的表(Student表)里有这个学号,那么就会被匹配进来。

SQL SERVER USING语法_WHERE_10


注意,OUTER JOIN中区分左表和右表是看谁写在FROM后谁写在JOIN后,而和ON后面的表达式中表的顺序没关系。

此外,这个例子中,我对Result表的StudentNo利用Student表的StudentNo实施了外键约束,所以RIGHT JOIN是没办法出现与INNER JOIN不同的情况的(因为这个外键约束保证了不可能出现不在Student表却在Result表中的学号)。

UNION合并行集合

需要行的每列格式一致才能作合并,对于不一致的表,只要SELECT出的列格式一致就可以作合并:

select SName from students
union
select SEmail from newTab

SQL SERVER USING语法_UNION_11


可以看到UNION命令只会选取不同的值,然后合并。

而UNION ALL则会选取所有的值,即便有重复:

select SName from students
union all
select SEmail from newTab

SQL SERVER USING语法_IN_12