|
3. 查询中使用表达式运算符
(1) SQL中使用的表达式运算符包括:
◆ 算术运算符:+,-,*,/
◆ 比较运算符:=,<>,>=,>,<,<=
◆ 逻辑运算符:NOT,AND,OR
◆ 测试空值:IS NULL,IS NOT NULL
◆ 集合运算符:IN,NOT IN,ANY,ALL
◆ 模糊查询: LIKE(_ 或 %), NOT LIKE
◆ 判断列值是否在指定的区间内:
BETWEEN … AND …
NOT BETWEEN … AND …
(2) 算术运算符和比较运算符的例子
|
例1:搜索pubs数据库中的title表,返回书的价格打了8折后仍然大于12美元的书名、书的类型和价格。
USE pubs
Go
SELECT title_id , type , price
FROM titles
WHERE price * 0.8 >12
Go |
(3) 使用集合运算符的例子灵活的使用IN,NOT IN,ANY,ALL这些关键字,可以用简洁的语言实现较为复杂的查询,同时整个程序的可读性也会变得更好。
|
例2:
Use pubs
Go
SELECT au_id, au_lname, au_fname
FROM authors
WHERE state IN ('CA','KS','MI','IN')
Go
|
|
例3,查询籍贯是北京、天津和上海来的学生:
SELECT *FROM student
WHERE 籍贯 IN ('北京','天津','上海')ORDER BY 籍贯 |
|
例4,查询年龄大于35岁的学生:
SELECT *FROM student
WHERE 年龄 >= 35 |
(4) 测试空值的查询的例子使用IS操作符测试空值的例子,例如,从STUDENT表中查找学生电话是空值的学生名字和班级号码: SELECT
sname, sclass
FROM STUDENT
WHERE sphno IS NULL;
输出结果如下:
sname sclass
王 者 JS2001
赵 良 DZ2001
(5) 使用逻辑运算符的例子查询所有在美国加利福尼亚州的出版社
Use pubs
Go
SELECT pub_id, pub_name, city, state, country
FROM publishers
WHERE country='USA' and state='CA'
Go
(6) 进行模糊查询的例子
在实际的应用中,如果无法给出精确的例子,只能根据较为模糊的情况来查询数据,比如:只知道数据中含有某几个特定的字符,在这种情况下,SQL提供了LIKE子句和通配符进行模糊查询。
通配符的使用:
%:表示从0到n个任意字符。
_:表示单个的任意字符。
[ ]:表示方括号里面列出的任意一个字符。
[^]:表示任意一个没有在方括号里面列出的字符
例1,查询所有以D开头的作家的名字,如图4-20:
图4-20查询所有以D开头的作家名字
|
例2,查询电话号码本中含有5737的电话号码:
SELECT *FROM calltable
WHERE callno LIKE '%5735%' ; |
|
例3,查询电话号码本中最后一位数是8的电话号码:
SELECT *FROM calltable
WHERE callno LIKE '%8' ; |
|
例4,查询所有满足au_id的前两个字母为'72',第四个字母为'-'的作家的姓名和电话号码:
Use pubs
Go
SELECT au_lname ,au_fname, phone, au_id
FROM authors
WHERE au_id LIKE'72_-%'
Go
如果在LIKE表达式中包含字符%或_,可以采用加上换码字符的方法解决。 |
|
例5,下面的例子将匹配所有以'%'开始并以'%'结束的任意字符串:
s LIKE 'x%%x%' ESCAPE 'x'ESCAPE 'x' 声明:x作为'x%%x%'的换码字符,x%指的是单独的字符%,x只起标记作用,不再表示字符。 |
|
例6,在SQL中用两个连续的单引号"'"表示一个单独的单引号,下面的例子表示电影名中含有's的电影。
Title LIKE '%''s%'(7) 指定范围查询的例子例1,查询年龄在20至30之间的学生:
SELECT *FROM student
WHERE 年龄 BETWEEN 20 AND 30 ; |
|
例2,查询年龄不在20至30之间的学生:
SELECT *FROM student
WHERE 年龄 NOT BETWEEN 20 AND 30 ; |
|
|