数据操作语句
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
(5)涉及空值的查询
• 空值(NULL)在数据库中表示不确定的值。 • 判断取值为空的语句格式为:
列名 IS NULL • 判断取值不为空的语句格式为:
列名 IS NOT NULL
• 注意: “IS” 不能用 “=” 代替
Biblioteka Baidu例
• 例.查询没有考试成绩的学生的学号和相应的课 程号。 SELECT Sno, Cno FROM SC WHERE Grade IS NULL
示例
• 例.查询姓‘张’的学生的详细信息。 SELECT * FROM Student
WHERE Sname LIKE '张%'
• 例.查询学生表中姓‘张’、‘李’和‘刘’的学生的情 况。 SELECT * FROM Student
WHERE Sname LIKE '[张李刘]%' 思考:
1、查询学生表中不姓‘张’、‘李’和‘刘’的学生的情 况?
6、DISTINCT(有哪些学生选课?)
SELECT Sno FROM SC;
SELECT DISTINCT Sno FROM SC;
去掉结果中重 复的行
7. 查询满足条件的记录
SELECT 列名 FROM 表名 WHERE 查询条件
比较运算符
=, >, >=, <, <=, <>(或!=) NOT+比较运算符
数据库原理
数据操作语句
说说一下语句的作用
• Select sname from students; • Select sname from students
where class=’13微财信3’;
数据操作
• 1 数据查询功能 • 2 数据更改功能
一 数据查询功能
•Students表中有哪些学生? •Students表中13微财信3班的 学生有哪些?
示例
• 例.查询信息系统与信息管理、软件工程专业学 生的姓名和性别。
SELECT Sname, Sdept FROM Student
WHERE Sdept IN (’信息系统与信息管理’,’软件工程’)
WHERE Sdept NOT IN (‘信息系统与信息管理’,’软件工 程’)?
(3)确定集合
一.1 查询语句基本格式
SELECT <列名序列>
--查询结果显示列
FROM <数据源> --查询数据来自于哪些表
[WHERE <查询条件>] --根据什么条件
[GROUP BY <分组列>]
[HAVING <分组后查询条件>]
[ORDER BY <根据哪一列排序>]
用例 教学管理数据库
• 教学管理数据库 JXGL : 学生表:Student(Sno,Sname,Ssex,Sage,Sdept) 课程表:Course(Cno,Cname, Credit,Semester) 学生选课表:SC(Sno,Cno,Grade)
2、查询姓名中包含‘张’字的学生信息
示例(续)
• 例.查询所有不姓“王”也不姓“张”的学生姓 名 SELECT Sname FROM Student WHERE Sname NOT LIKE '[王张]%'
• 或者:
SELECT Sname FROM Student
WHERE Sname LIKE '[^王张]%'
书名 Java程序设计
数据结构 操作系统基础 计算机体系结构
数据库原理 汇编语言 编译原理 计算机网络 高等数学 有机化学
价格
出版日期
注意:日期类型的
26.0
2009-6-1
常量要用单引号括
32.0
2009-6-15
起来,而且年、月、
36.5
2009-7-1
29.5
2009-6-1
日之间通常用分隔
30.0
第七讲: 单表查询
1. 查询指定的列
• 查询表中用户感兴趣的部分属性列。 • 例1:查询全体学生的学号与姓名。
SELECT Sno, Sname FROM Student
例2.查询全体学生的姓名、学号、所在系
SELECT Sname, Sno, Sdept FROM Student
Student
确定范围
BETWEEN…AND, NOT BETWEEN…AND
确定集合
IN, NOT IN
字符匹配
LIKE, NOT LIKE
空值
IS NULL, IS NOT NULL
逻辑谓词
AND, OR
(1) 比较运算符
[例] 查询信管专业全体学生的信息 如果查询信管专
SELECT *
业年龄小于20
FROM WHERE
小结
• select 列名 as 列标题 from 表名 where 选择记 录的条件
• 去除表中的重复行 (DISTINCT) • where 列名 between…and • where 列名 [NOT] in (常量1, 常量2, … 常量n) • where列名 [NOT] LIKE <匹配串> • escape 转义字符 • where 列名 is null
示例
• 例如,查找field1字段中值为“30%”的记录: WHERE field1 LIKE '30!%' ESCAPE '!'
• WHERE field1 LIKE '%30!%%' ESCAPE '!' 查找field1字段中含有字符串“30%”的记录
• 查找field1字段中含有下划线(_)的记录: WHERE field1 LIKE '%!_%' ESCAPE '!'
示例(续)
• 例.查询信管专业和计科专业年龄大于等于 20岁的学生姓名、所在系和年龄。
SELECT Sname,Sdept, Sage FROM Student WHERE (Sdept = '计算机系' OR Sdept = '信息系') AND Sage >= 20
或: SELECT Sname,Sdept, Sage FROM Student WHERE Sdept IN ('计算机系', '信息系') AND Sage >= 20
信息管理与信 息系统
示例
[例] 查询年龄在19-22岁(包括19岁和22岁)之间的学生的 姓名、专业和年龄
SELECT Sname,Sdept,Sage
FROM
Student
WHERE Sage BETWEEN 19 AND 22;
WHERE Sage NOT BETWEEN 19 AND 22?
Student
的学生信息,
Sdept=‘信息管理与信息系统’ 怎么办?
WHERE Sdept=‘信息管理与信息系统’ and Sage<20
Sno 9512101 9512102 9512103
Sname 张三 李四
王丽丽
Ssex 男 男 女
Sage 18 20 20
Sdept
信息管理与信 息系统
信息管理与信 息系统
• 或者:
SELECT Sname FROM Student
WHERE Sname NOT LIKE '王%' AND Sname NOT LIKE '张%'
示例(续)
• 例.查询姓“王”且名字是2个字的学生姓 名。
SELECT Sname FROM Student
WHERE Sname LIKE '王_'
(4)字符串匹配
• 使用LIKE运算符 • 一般形式为:
列名 [NOT ] LIKE <匹配串> • 匹配串中可包含如下四种通配符:
• _:匹配任意一个字符; • %:匹配0个或多个字符; • [ ]:匹配[ ]中的任意一个字符;对于连续字母
的匹配,例如匹配[abcd],可简写为[a-d], • [^ ]:不匹配[ ]中的任意一个字符。
示例(续)
• 例.查询姓王且名字是3个字的学生姓名
SELECT Sname FROM Student
WHERE Sname LIKE '王_ _'
注意:尾随空格的处理。 SELECT Sname FROM Student
WHERE rtrim(Sname) LIKE '王_ _'
• 例21. 在Student表中查询学号的最后一位不是2、3、 5的学生信息。
• 使用IN运算符。 • 用来查找属性值属于指定集合的记录。 • 格式为:
列名 [ NOT ] IN (常量1, 常量2, … 常量n)
• 不是连续的数值范围,而是符合常量值(查询条件) 的记录;
• NOT IN:不符合查询条件的记录
注意
• where 列名 between .. and .. 与 where 列名 in (.. , .. , ..) 区别、使用场合
2. 查询全部列
• 例3.查询全体学生的记录 SELECT Sno,Sname,Ssex, Sage, Sdept FROM Student
• 等价于: SELECT * FROM Student
3. “表达式”的列
• 例4.查询学生的姓名及其出生年份。 SELECT Sname,2014 - Sage FROM Student
SELECT * FROM Student WHERE Sno LIKE '%[^235]'
转义字符
• 如果要查找的字符串正好含有通配符,如: ‘_’ ‘;’ ‘^’等,怎么办?
• 使用 ESCAPE
• 语法格式为: ESCAPE 转义字符
• 在匹配串中包含转义字符,表明位于该字符 后面的字符是普通字符,而不是通配符。
2009-7-1
符隔开,常用的分
34.0 38.0
2009-8-15 2009-8-1
隔符有“/”和“-”
35.0
2008-3-15
22.0
2008-3-1
19.5
2008-5-1
(2)确定范围
• 用BETWEEN…AND和NOT BETWEEN…AND • 查找属性值在或不在指定范围内的元组,
• 其中BETWEEN后边指定范围的下限,AND后边指定范围的上限。
• BETWEEN…AND…的格式为:
列名 | 表达式 [ NOT ] BETWEEN 下限值 AND 上限值
• 注意:该范围是一个连续的范围
4.常量列
• 例5.学生表中添加一个列,内容为“出生年 份”。 SELECT Sname,'出生年份:', 2014-Sage FROM Student
5.改变列标题
• 语法: 列名 | 表达式 [ AS ] 列标题 列标题 =列名 | 表达式
• 例:
• SELECT Sname 姓名, 出生年份=2014-Sage FROM Student
P65,T1,2,3,4
作业
关于日期类型查询
• 例.查询2009年6月份出版的全部图书的详细信息。 SELECT * FROM books WHERE 出版日期 BETWEEN '2009/6/1' AND '2009/6/30'
书号 T001 T002 T003 T004
T005 T006 T007 T008 T009 T010
• 思考:查所有有成绩的学生学号和课程号? WHERE Grade IS NOT NULL;
(6)多重条件查询
• 在WHERE子句中可以使用逻辑运算符AND和OR来组成 多条件查询。 • 用AND连接的条件表示必须全部满足所有的条件的 结果才为True; • 用OR连接的条件表示只要满足其中一个条件结果 即为True。