数据库查询和修改数据3

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

10
运算符分类
比较运算符 范围运算符 列表运算符 模糊匹配符
运算符
>,>=,=,<,<=,<>,!=,!>,!< BETWEEN …AND NOT BETWEEN…AND IN NOT IN LIKE NOT LIKE 比较大小


判断列值是否在指定范围内 判断列值是否为列表中的指 定值 判断列值是否与指定的字符 通配格式相符 判断列值是否为空 用于多条件的逻辑连接
15
地址 广州 上海 北京 上海 …
数据查询-列名
使用AS来命名列
SELECT SCode AS 学员编号,SName AS学员姓名,SAddress AS 学员地址 FROM Students WHERE SAddress <> '河南新乡'
SELECT FirstName+'.'+LastName AS '姓名' FROM Employees 使用=来命名列 SELECT '姓名' = FirstName+'.'+LastName FROM Employees
空值判断符 逻辑运算符
IS NULL IS NOT NULL AND、OR、NOT
11
模糊查询—LIKE
查询时,字段中的内容并不一定与查询内容完全 思考:以下的 SQL语句: 匹配,只要字段中含有这些内容
SELECT * FROM 数据表 WHERE 编号 LIKE '00[^8]%[A,C]%‘ SELECT SName AS 姓名 FROM Students
第三次内部测试成绩
补考成绩
25
分组查询—再看看
内部测试成绩
Baidu Nhomakorabea
StudentID和CourseID的组合存在重复……
需要按照这两个来进行分组,避免StudentID和CourseID 同时一样
还要把这个加上取平均
26
分组查询—多列分组
SELECT StudentID AS 学员编号,CourseID AS 内部测试, AVG(Score) AS 内部测试平均成绩 FROM Score GROUP BY StudentID,CourseID
数据查询-基础
查询全部的行和列
SELECT * FROM Students
查询部分行 SELECT SCode,SName,SAddress FROM Students WHERE SAddress = '河南新乡' SELECT SCode,SName,SAddress FROM Students WHERE SAddress <> '河南新乡'
9
where子句 实际工作中大多数查询并不是希望得到表中的所有记 录,而是满足给定条件的部分记录,在SELECT语句 中使用WHERE子句,可以设置对记录的检索条件,
从而保证查询结果中仅仅包含所需要的记录。
查询条件是用运算符连接字段名、常量、变量、函数
等得到的表达式,其取值为“真”或“假”。在
WHERE子句中常用到的运算符如下表所示:
16
数据查询-空行常量列
查询空行
SELECT SName FROM Students WHERE SEmail IS NULL
思考:非空行怎么查?
使用常量列 SELECT 姓名=SName,地址= SAddress,'河北新龙' AS 学校 名称 FROM Students
17
数据查询-限制行数
30
分组查询—对比
WHERE子句从数据源中去掉不符合其搜索条件的数据 GROUP BY子句搜集数据行到各个组中,统计函数为各个 组计算统计值 HAVING子句去掉不符合其组搜索条件的各组数据行
WHERE GROUP BY HAVING
31
分组查询—思考
思考:分析以下T-SQL的含义
SELECT FROM WHERE GROUP BY HAVING 部门编号, COUNT(*) 员工信息表 工资 >= 2000 部门编号 COUNT(*) > 1
20
问题
成绩表中存储了所有学员的成绩,我想知道: 学员的总成绩、平均成绩、有成绩的学员总共有多少名 怎么办?
21
分组汇总
这三个数取平均值 第4-6分数取平均值 有一个学员参加考试 最后三个数取平均值
22
分组查询—GROUP BY
SELECT CourseID, AVG(Score) AS 课程平均成绩 FROM Score GROUP BY CourseID
第4章
查询和修改数据
回顾
SQL分为数据操作语言、数据控制语言和数据定 义语言;T-SQL是SQL的扩展 通配符经常与LIKE一起使用来进行非精确的限制; 标识列不能插入指定的数据值 数据完整性
(1)空值约束 (2)默认值约束 (3)主键约束 (4) 外键约束 (5 )唯一性约束 (6)检查约束
交叉联结(CROSS JOIN)
36
多表联结查询—内联结-1
Stundents Score 再猜一猜:以下返回多少行? SELECT S.SName,C.CourseID,C.Score SName SCode StudentsIDCourseID From Score AS C 1S.SName,C.CourseID,C.Score 梅超风 SELECT 1 001 INNER JOIN Students AS S 2Students AS 陈玄风 From S ON C.StudentID = S.SCode 2 001 3Score AS C 陆乘风 INNER JOIN 2 002 ON 4C.StudentID <> S.SCode 曲灵风 3 002 3 003 猜一猜:这样写,返回的查询结果是一样的吗? 查询结果 SELECT From INNER JOIN ON S.SName,C.CourseID,C.Score SName CourseIDScore Students 97 梅超风 AS S 001 Score AS C 001 89 陈玄风 C.StudentID = S.SCode 002 67 陈玄风 002 76 陆乘风 003 81 陆乘风
008
5
张明敏
罗林光
北京顺义
陕西临潼
S202
S202
010
思考
既然查询得到的“结果集”的结构类似于一张表,那么可 以在“结果集”上继续进行查询吗?
6
编写查询语句之前…
7
查询
SELECT FROM [WHERE [ORDER BY
列名称
SELECT SCode, SName, SAddress
32
小结1
以下的查询语句: Select * From A 将得到以下的查询结果: A1 B1 C1 1001 P1 70 1002 P2 60 1001 P1 100 1002 P1 80 1002 P2 90 那么,以下的查询语句将输出哪些信息? Select A1,B1,MAX(C1) FROM A
查询产生一个虚拟表,看到的是表形式显示的结果,但结 果并不真正存储,每次执行查询只是现从数据表中提取数 据,并按照表的形式显示出来
4
怎么查的?
学员编号 001 002 003 学员姓名 张明全 李菲 于寄谦 地址 湖南长沙 湖北宜昌 甘肃天水 所在班级 S201 S202 S204 …….SELECT * FROM StudentsH
<列名> <表名> <查询条件表达式>] <排序的列名>[ASC或DESC]]
表名
FROM Students
过滤条件
WHERE SSEX = 0
排序条件
ORDER BY SCode
SELECT FROM WHERE ORDER BY
8
SCode,SName,SAddress Students SSEX = 0 SCode
23
分组查询—思考
思考:执行以下的T-SQL:
SELECT StudentID, CourseID, AVG(Score) AS 课程平均成绩 FROM Score GROUP BY CourseID
—— 结果如何?
24
分组查询—多列分组
第一次内部测试成绩
第二次内部测试成绩 怎么样来统计每次的内部测试不同学员的成绩?
限制固定行数
SELECT TOP 5 SName, SAddress FROM Students WHERE SSex = 0
返回百分之多少行 SELECT TOP 20 PERCENT SName, SAddress FROM Students WHERE SSex = 0
18
数据查询-排序 2-1
33
回顾
本章讲解的查询语句分为几个部分? 查询全部女同学的SQL语句怎么写? 在stu中如何查询电话是空的学员姓名?
SELECT stuid, COUNT(*) FROM scores WHERE score < 60 GROUP BY stuid HAVING COUNT(*) > 1
27
分组查询—问题
在以上统计内部测试成绩的基础上, 如果只想看补考的学员的成绩,怎么办?
28
分组查询—再看看
SELECT StudentID AS 学员编号,CourseID AS 内部测试, AVG(Score) AS 内部测试平均成绩 FROM Score GROUP BY StudentID,CourseID
升序排列
SELECT StudentID As 学员编号,(Score*0.9+5) As 综合成绩 FROM Score WHERE (Score*0.9+5)>60 ORDER BY Score 降序排列
SELECT Au_Lname +'.' +Au_fName AS EMP From Authors Union SELECT fName +'.'+ LName AS EMP From Employee ORDER BY EMP DESC
WHERE 所在班级 = ‘S202’
004
005 006 007
刘国正
周接轮 巩小妹 巩大妹
山东荷泽
台湾新竹 香港龙湾 香港龙湾
S201
S204 S203 S203
008
009 010 011 002
张明敏
矛十八 罗林光 司马坡 李菲
北京顺义
四川棉阳 陕西临潼 新疆喀什 湖北宜昌
S202
S204 S202 S201 S202 …
19
数据查询-排序 2-2
按多列排序
SELECT StudentID As 学员编号, Score As 成绩 FROM Score WHERE Score>60 ORDER BY Score,CourseID
思考:排序中的字段,可以使用表达式吗? —— 如果不可以,请说明原因; —— 如果可以,请举例说明;
14
Score 77 61 76 64 …
模糊查询—IN
把某一字段中内容与所列出的查询内容列表匹配 的记录查询出来
SELECT SName AS 学员姓名,SAddress As 地址 FROM Students WHERE SAddress IN ('北京','广州','上海')
学员姓名 李扬 于紫电 李青霜 司马弓 …
2
目标
理解查询的机制 使用SELECT语句进行条件查询 在查询中返回限制行、进行查询排序 在查询中使用表达式、运算符和聚合函数
3
什么是查询?
SELECT * FROM SALES
查询请求 查询结果集 Application Logic SQL SERVER
客户程序
A B C D E F G
WHERE SName LIKE '张%'
可能会查询出的编号值为( )。
A、9890ACD 姓名 B、007_AFF 张果老 C、008&DCG 张飞 D、KK8C 张扬出去
12
模糊查询—IS NULL
把某一字段中内容为空的记录查询出来
猜一猜:把Students表中某些行的SAddress字段值删掉后: SELECT SName 姓名 SAddress AS 地址 —— 使用IS NULLAs 能查询出来这些数据行吗? FROM Students WHERE SAddress IS NULL —— 怎么查询出这些行来?
34
多表联结查询—问题
学员内部测试成绩查询的每次显示的都是学员的编号信息, 因为该表中只存储了学员的编号; 实际上最好显示学员的姓名,而姓名存储在学员信息表; 如何同时从这两个表中取得数据?
35
多表联结查询—分类
内联结(INNER JOIN) 外联结
——左外联结 (LEFT JOIN) ——右外联结 (RIGHT JOIN) ——完整外联结(FULL JOIN)
增加条件:要求该学员的CourseID在分组内出现过一次以上……
29
分组查询—HAVING
SELECT StudentID AS 学员编号,CourseID AS 内部测试, AVG(Score) AS 内部测试平均成绩 FROM Score GROUP BY StudentID,CourseID HAVING COUNT(Score)>1
姓名 张果老 李寻欢 令狐冲 程灵素 …
13
地址 NULL NULL NULL NULL …
模糊查询—BETWEEN
把某一字段中内容在特定范围内的记录查询出来
SELECT StudentID, Score FROM SCore WHERE Score BETWEEN 60 AND 80
StudentID 7 8 11 17 …
相关文档
最新文档