查询数据
这一章主要学习数据查询,这也是数据库最重要的内容,也是数据库的核心之一,学好数据库的查询对于学好数据库至关重要。我也将花费不少时间来学习。
一、使用简单SELECT查询数据:
1.1查询表决中所有数据
SELECT *
FROM table_source
例子:
SELECT *
FROM STU_INFO
1.2查询表中指定字段的数据
SELECT 字段名
FROM table_source
例子:
SELECT SNAME
FROM STU_INFO
1.3查询结果中除去重复信息
SELECT DISTINCT 字段名
FROM table_source
1.4根据现有列值计算新列值
SELECT sname,DATEDIFF(year,birth,GETDATE())
FROM stu_info
GETDATE()函数用于获取当前系统时间,DATEDIFF()函数用于获取两个日期之间的差
1.5命名新列
SELECT 列名 AS 新列名
FROM stu_info
例子:
SELECT SNAME AS ‘姓名’
FROM STU_INFO
1.6将查询结果保存为新表
SELECT *(或字段列表)
INTO 新表名
FROM table_source
1.7连接字段
SELECT sname+depart
FROM stu_info
例子:
SELECT SNAME+DEPART AS NEW
FROM STU_INFO
这里含有几个地方需要进一步更改:
(1)需要给字段设置字段名
(2)使用RTRIM()函数去除字段值右侧的空格
(3)应当将来源地放进括号
二、使用SELECT语句获取满足查询条件的数据:
2.1指针域字段变量的概念
指针是人们虚拟出来的一个箭头(或者标记),实际上他并不存在。指针可以指向数据表中的任何一条记录,当指针指向某一条记录时该记录就被称为当前记录。
在表达式中出现的字段名其实就是字段变量,称其为字段变量的原因是字段名的值会随着指针的移动而变化。
2.2条件表达式
条件表达式是使用条件运算符将变量、字段值、函数及字段名连接起来的表达式。条件表达式的值只有两种,分别是真和假。因为只要用到条件表达式就要用到条件表达式,所以了解条件表达式的组成、掌握其编写方法非常重要。在学习编写条件表达式之前,首先应当了解条件运算符。
条件运算符
运算符 |
说明 |
举例 |
1.关系运算符 | ||
= |
等于 |
学分=3 |
< |
小于 |
考试成绩<90 |
<= |
小于等于 |
出生日期<=‘01/01/1992 |
> |
大于 |
平时成绩>90 |
>= |
大于等于 |
平时成绩>=90 |
<>或!= |
不等于 |
所属院系<>‘中文系’ |
2.逻辑运算符 | ||
NOT |
非 |
NOT 考试成绩<90 |
AND |
与 |
分数>60 AND 分数<90 |
OR |
或 |
年龄=29 OR 年龄=30 |
3.SQL特殊运算符 | ||
IN |
在某个集合中 |
学分 IN(2,3,4) |
NOT IN |
不在某个集合中 |
所属院系 NOT IN(‘中文系’) |
BETWEEN |
在某个范围内 |
分数 BETWEEN 80 AND 90 |
NOT BETWEEN |
不在某个范围内 |
学分 NOT BETWEEN 8 AND 9 |
LIKE |
与某种模式匹配 |
姓名 LIKE‘%三%’ |
NOT LIKE |
不与某种模式匹配 |
课名 NOT LIKE‘%基础%’ |
IS NULL |
是NULL值 |
年龄 IS NULL |
IS NOT NULL |
不是NULL值 |
联系方式 IS NOT NULL |
2.3 WHERE子句用法
SELECT *
FROM table_name
WHERE 条件表达式
例子:
SELECT *
FROM table_name
depart=‘中文系’
2.4根据条件查询数值数据
SELECT *
FROMtable_name
WHERE credit>3
例子:
SELECT *
FROM STU_INFO
WHERE YEAR>20
2.5根据条件查询字符数据
SELECT *
FROMtable_name
WHERE sname=‘张三’
2.6根据条件查询日期数据
SELECT *
FROMtable_name
WHERE birth>‘01/03/1992’
2.7按范围查询数据
SELECT *
FROMtable_name
WHERE credit BETWEEN 2 AND 5
例子:
SELECT *
FROM STU_INFO
WHERE YEAR BETWEEN 21 AND 23
2.8查询NULL值
SELECT *
FROMtable_name
WHERE credit IS NULL
三、排序查询结果
3.1按单列排序
SELECT *
FROM stu_table
ORDER BY 成绩
例子:
SELECT *
FROM STU_INFO
ORDER BY YEAR
3.2设置排序方向
SELECT *
FROMtable_name
ORDER BY 分数 DESC
3.3按多列排序
SELECT *
FROMtable_name
ORDER BY 分数 DESC,年龄 ASC
3.4按字段位置排序
SELECT *
FROM stu_name
ORDER BY 3 DESC
3.5查询前五行数据
SELECT TOP 5 SNAME,BIRTH,TELEPHONE
FROM stu_name
ORDER BY BIRTH
例子:
SELECT TOP 3 SNAME,SEX
FROM STU_INFO
3.6 WHERE与ORDER BY的结合使用
SELECT *
FROM stu_name
WHERE telephone IS NOT NULL
ORDER BY 学号
四、高级查询条件
4.1 AND运算符
SELECT *
FROM stu_name
WHERE NAME=‘张三’AND 年龄=39
4.2 OR运算符
SELECT *
FROM stu_name
WHERE NAME=‘张三’OR 年龄=39
4.3 AND与OR的优先顺序问题
SELECT *
FROM stu_name
WHERE depart=‘中文系’
ORdepart=‘外语系’
AND sex=‘女’
ORDER BY sno
AND优先于OR
4.4 NOT运算符
SELECT *
FROM stu_name
WHERE birth NOT BETWEEN‘01/01/1983’AND‘12/02/1998’
查询birth不在‘01/01/1983’到‘12/02/1998’的所有学生。
4.5 IN 运算符
SELECT *
FROM cource
WHERE credit IN(2,3,4)
ORDER BY credit DESC,cno
查询credit等于2,3,4的所有学生。
4.6 LIKE运算符与“%”通配符
SELECT *
FROM stu_info
WHERE sname LIKE‘%三%’
查询sname中中间有‘三’的所有学生。
4.7 “_”通配符的使用
SELECT *
FROM stu_name
WHERE RTRIM(sname) LIKE‘刘_’
“_”代表一个字符,‘刘_’代表由两个字符组成的字符串
4.8“[]”通配符的使用
SELECT *
FROM stu_name
WHERE sname LIKE‘[张李刘]%’
ORDER BY sname
查询结果集中,包含了所有姓张、李和刘的学生。
4.9定义转义字符
SELECT *
FROM stu_name
WHERE sname LIKE‘%5#%’ESCAPE‘#’
其中,
ESCAPE‘#’
定义了转移字符“#”,他表示紧跟着“#”后的“%”为普通字符,而并非通配符。
总结:学习这一章花了不少时间,但也有不少斩获,虽然大多数的知识点都练了一遍,但这只是掌握了这些语法知识,要真正的灵活应用还要经过不少的练习才行。有些知识点由于自己建的表有问题,所以没能练习,有些则在Access中无法练习,以后装上SQL Server后再练习。