7 SQL的数据定义语句
第七章 SQL的数据定义与操纵
7.1 SQL的数据定义功能 7.2 SQL的数据定义语句 7.3 SQL Server2000的数据定义语句 7.4 SQL的数据操纵功能 7.5 SQL的数据操纵语句 7.6 SQL中的视图语句 7.7 SQL Server2000中的数据操纵及视图功能 本章小结 习题
Select后的distinct表示在结果中去掉重复的sno。
7.5 SQL的数据操纵语句
例:查询每个学生的出生年份
select sno,2008-sage as birthyear from s; Select之后可以是简单运算 as 用于select 之后表示为某一属性取别名
7.5 SQL的数据操纵语句
例13:查询修读课程名为”数据库”的所有
学生姓名 select sname from s,sc,c where s.sno=sc.sno and o=o and cname=‘数据库’;
7.5 SQL的数据操纵语句
自连接
例14:查询至少选修了s5所修读的一门课的
学生学号 select first.sno from sc first,sc second where o=o and second.sno=‘s5’;
7.2 SQL的数据定义语句
表的删除 语句 drop table <表名> 例,删除s表 drop table s; 删除表后,表中的数据、在此表上建立的视图、索 引都将删除
7.2 SQL的数据定义语句
4 SQL的索引定义语句
建立索引 语句 create [unique][cluster] index <索引名> on
1 SQL的基本数据类型
7.2 SQL的数据定义语句
2 SQL的模式定义语句
模式定义 定义语句: create schema <模式名> authorization<用户名> 例如,学生数据库的模式可定义如下: create schema student authorization lin;
例21:查询计算机系的学生以及年龄小于20的学
生 (select * from s where sdept=‘cs’) union (select * from s where sage<20 );
7.5 SQL的数据操纵语句
2 SQL的更新语句 SQL的删除功能 SQL的插入功能 SQL的修改功能
7.5 SQL的数据操纵语句
例8:查询名字的倒数第二字为“丽”的学
生的姓名及所在系 Select sname,sdept From s Where sname like ‘%丽_’;
7.5 SQL的数据操纵语句
例9:查询无课程分数的学生的学号和课程
号
select sno,cno from sc where grade is null; Null是测试属性值是否为空的谓词,其一般形式是: <列名> is [not] null
7.2 SQL的数据定义语句
模式删除 语句为 Drop schema <模式名>,<删除方式> 删除方式有两种:
Cascade,表示级联方式
Restrict,表示限制方式
删除学生数据库模式:
Drop schema student cascade;
7.2 SQL的数据定义语句
7.5 SQL的数据操纵语句
例4:查询年龄大于20的学生的学号和姓名
sage>20;
7.5 SQL的数据操纵语句
常用谓词 between, like, null用于where子句中 Distinct ,as 用于select子句中 例5:查询所有选修了课程的学生学号 Select distinct sno From sc;
视图
视图是建立在基表上的虚表 创建视图 删除视图
索引
创建索引 删除索引
7.1 SQL的数据定义功能
底层---列定义层 表中属性的定义
如列名的定义 列数据类型的定义
列的完整性约束定义
如列是否是主键或外键 列值是否允许为空 列间的约束表达式
7.2 SQL的数据定义语句
数据查询功能
select
增、删、改功能
Insert, delete, update
其它功能
赋值
分类
运算
7.5 SQL的数据操纵语句
关系代数中的查询语句
求选修了c1号课程的学生姓名
∏sname(cno=c1(S SC))
7.5 SQL的数据操纵语句
1 SQL的查询语句 Select 列名 投影 连接 From 表名 选择 Where 选择条件
*代表所有的列
例2:查询所有学生的姓名
select sname from s;
7.5 SQL的数据操纵语句
例3:查询学号为s01的学生学号与姓名
Select sno,sname From s
Where sno=‘s01’; Where后面可以使用比较符,包括=、<、>、>=、 <=、<>、!=
删除索引 语句 drop index <索引名> 删除名为xsno的索引 drop index xsno;
7.3 SQL Server2000中的数据定义语句
建立数据库
Create database student1;
删除数据库
Drop database student1;
7.4 SQL的数据操纵功能
7.2 SQL的数据定义语句
create table c (cno char(2), cname varchar(20), credit numeric); create table sc (sno char(4), cno char(2), grade smallint);
7.2 SQL的数据定义语句
7.5 SQL的数据操纵语句
示例数据: S(sno,sname,sage,sex,sdept) C(cno,cname,credit) SC(sno,cno,grade)
7.5 SQL的数据操纵语句
SQL的基本查询语句
单表简单查询 例1:查询所有学生的情况 select * from s;
7.5 SQL的数据操纵语句
SQL的删除功能
格式 delete from <基表> where <逻辑条件>
例22:删除学生“王林”的信息
delete from s where sname=‘王林’;
7.5 SQL的数据操纵语句
例23:删除计算机系学生的选课记录
delete from sc where ‘cs’= (select sdept from s where s.sno=sc.sno); 注: 删除操作可能会破坏参照完整性
7.5 SQL的数据操纵语句
3 SQL的表定义语句
表的定义
语句
Create table <表名>(<列定义>[<列定义>]…)[其它 参数] 其中列定义形式如下: <列名> <数据类型>
7.2 SQL的数据定义语句
例:前面所创建的student数据库中有s,c,sc
三张表,试定义它们。 create table s (sno char(4), sname varchar(8), sage smallint, sex char(2), sdept char(2));
7.5 SQL的数据操纵语句
单连接 表间等值连接 在where子句中设置两表相同属性间的相等关系 例12:查询修读课程号为c1的所有学生的姓名 select sname from s,sc where s.sno=sc.sno and o=‘c1’;
7.5 SQL的数据操纵语句
7.5 SQL的数据操纵语句
布尔表达式 not, and ,or 例10:查询计算机系年龄小于20的学生姓名 Select sname From s Where sdept=‘cs’ and sage<20; 例11:查询非计算机系或年龄不为20的学生姓名 Select sname From s Where not sdept=‘cs’ or not sage=20;
(不)在18-21岁的学生的姓名 例6:查询年龄
和年龄
Select sname,sage From s; where sage (not) between 18 and 21;
7.5 SQL的数据操纵语句
例7:查询姓“李”的学生的姓名及所在系
Select sname,sdept From s Where sname like ‘李%’; Like一般情况下与通配符% ,_一起使用 %表示任意长度的字符串,例a%b _表示任意单个字符,例a_b
7.5 SQL的数据操纵语句
练习:
求每一门课程的间接先行课
select o, second.preno from c as first, c as second where first.preno=o;
7.5 SQL的数据操纵语句
结果排序
order
by <列名> [ASC/DESC] 例15:查询计算机系所有学生名单并按学号 顺序升序显示。 select sno,sname from s where sdept=‘cs’ order by sno asc;
7.5 SQL的数据操纵语句
例18:查询修读课程号为c1的所有学生姓名
select sname from s where sno in (select sno from sc where cno=‘c1’);