SQL-Server数据库技术与应用
用到student和stu两个库
数据操作实例
1. 查询数据
所谓查询,就是对已经存在于数据库中的数据按特定的组合、条件或次序进行检索。查询功能是数据库最基本也是最重要的功能。
1.1 select语句
语法格式:select 列名 from 表名 ---->一定和from搭配
例子:
从学生表里面查看学生的信息
SELECT 学号,姓名,籍贯 FROM 学生信息
查询所有的列
SELECT * FROM 学生信息
select+DISTINCT关键字查询
如果用户希望在查询返回结果中删除重复行,就可以在SELECT子句中使用DISTINCT关键字。
语法:SELECT DISTINCT 列名称 FROM 表名称
• 例:SELECT DISTINCT 籍贯 FROM 学生信息
select+top关键词查询
• top语句用于规定要返回的记录的数目
语法:
select top n *|column from table
top n用于指定查询结果返回的行数
例:select distinct top 8 籍贯
from 学生信息
注:distinct关键字去掉重复之后查询时后面的数据往前补。
使用别名查询
• 使用select语句查询数据时,可使用别名的方法根据需要对数据显示的标题进行修改。
- 在列的表达式中给出别名
SELECT 列名 ‘别名’ from 表名
例: SELECT 学号 ‘NO’,姓名 ‘Name’,性别 ‘Sex’,年级 ‘Grade’,籍贯 ‘出生所在地’
FROM 学生信息
- 使用‘=’表达式
SELECT ‘别名’=列名 from 表名
例:SELECT ‘NO’=学号 ,‘Name’=姓名 ,‘Sex’=性别 ,‘Grade’=年级 ,‘出生所在地’ =籍贯
FROM 学生信息
- 使用AS关键字来连接列表达式和指定的别名
SELECT 列名 as ‘别名’ FROM 表名
例:SELECT 学号 AS ‘NO.’, 姓名 AS ‘Name’, 性别 AS ‘Sex’, 年级AS ‘Grade’, 籍贯 AS ‘出生所在地’
FROM 学生信息
注:这种最常用,as是别名的标识符。
计算列
在查询时,经常需要对查询到的数据进行再次计算。
例:SELECT 编号 学号,成绩 as ‘调整前成绩’,成绩-10 as ‘调整后成绩’
FROM 成绩表
1.2 选择查询 select+where子句
一般查询都不是针对全表所有行的查询,只是从整个表中选出满足指定条件的内容,这就要用到WHERE子句。
选择行的基本语法:
SELECT 列名
FROM 表名
WHERE 限定条件;
SQL Server支持比较、范围、列表、字符串匹配等选择方法(限定条件)。
1.2.1、比较搜索条件
比较运算符
例:
查询籍贯是 beijing的学生信息:
SELECT 学号,班级编号,姓名,性别,籍贯
FROM 学生信息
WHERE 籍贯=‘beijing’
查询注意:
-确定要查询的表
-确定要查询的列
-限制条件
use stu
select *
from 成绩表
where 成绩>60
逻辑运算符
and 两边条件同时满足
or 两边条件满足一个即可
例:查询籍贯是beijing并且性别是nan的学生信息:
USE stu
SELECT 学号,班级编号,姓名,性别,籍贯
FROM 学生信息
WHERE 籍贯=‘beijing’ AND 性别=‘nan’
1.2.2、范围搜索条件
•范围搜索返回介于两个指定值之间的所有值,可分为包括范围和排除范围两种
类型。用BETWEEN,NOT BETWEEN
例1:查询成绩在 70到80之间的学生信息:
USE stu
SELECT 学号,课程编号,成绩
FROM 成绩表
WHERE 成绩 BETWEEN 70 AND 80
(WHERE 成绩 NOT BETWEEN 70 AND 80)
注:闭区间[],包含70和80
例2:
SELECT 学号,课程编号,成绩
FROM 成绩表
WHERE 课程编号 BETWEEN ‘1001’ AND ‘1002’
1.2.3、列表搜索条件
• IN关键字使用户可以选择与列表中的任意值匹配的行。
例:
查询籍贯是 beijing和shanghai的学生:
USE stu
SELECT 学号,班级编号,姓名,性别,籍贯
FROM 学生信息
WHERE 籍贯 IN (‘beijing’,’shenzhen’)
1.2.4、搜索条件中的字符匹配符
LIKE关键字搜索与指定模式匹配的字符串、日期或时间值。
模式包含要搜索的字符串,字符串中可包含2种通配符的任意组合.
通配符
关键字 | 通配符 | 含义 |
---|---|---|
like | % | 代替零个或多个字符 |
- | 代替一个字符 | |
[ ] | 匹配指定范围内的单个字符 | |
[^] | 代表不在指定范围内的单个字符 |
格式:where 列名 like ‘ 搜索内容+通配符’
例:
--查询出表中所有内容
use student
select *
from student
--查询出姓王的同学有哪些?
select *
from student
where sname like '王%'
输出:
--查询出姓王,但名是单字符的同学
select *
from student
where sname like '王_'
输出:
--查询出名字当中包含大或者小的同学
select *
from student
where sname like '_[大小]%'
输出:
--查询出名字当中不包含大或者小的同学
select *
from student
where sname like '_[^大小]%'
输出:
--查询出姓王或张的同学
select *
from student
where sname like '[王张]_'
输出:
1.2.5、涉及空值的查询
空值(NULL)在数据库中表示不确定的值。
例如,学生选修课程后还没有考试时,这些学生有选课记录,但没有考试成绩,因此考试成绩为空值。
• 判断某个值是否为NULL值,不能使用普通的比较运算符。
• 判断取值为空的语句格式为:
列名 IS NULL
• 判断取值不为空的语句格式为:
列名 IS NOT NULL
select *
from sc
where grade is null
输出:
1.3 聚合函数
对一组值执行计算,并返回单个值。
T-SQL提供的聚合函数有:
(1) SUM([DISTINCT] <列名> ) : 计算列值总和;
(2) AVG([DISTINCT] <列名> ) : 计算列值平均值;
(3) MAX([DISTINCT] <列名> ) : 求列值最大值;
(4) MIN([DISTINCT] <列名> ) : 求列值最小值。
(5) COUNT( * ): 统计表中元组个数;
COUNT([DISTINCT] <列名> ) : 统计本列列值个数;
注意:上述函数中除COUNT(*)外,其他函数在计算过程中均忽略NULL值。
如果没有符合条件的记录,那么聚合函数会返回NULL
语法格式:
SELECT 聚合函数 FROM 表名;
例:
--求总成绩
select sum(grade) as '总成绩'
from sc
--统计学生总人数
select count(*) as '总人数'
from student
--查询有成绩的学生总人数
select count(distinct sno) --学生和课程之间一对多的联系,所以不通过grade统计学生总人数,而用姓名sno,而sno中有重复,故要去重复
from sc
注:用聚合函数要记得随手别名查询,否则‘无列名’
总成绩输出:
总人数输出: