修改
Alter Table Student(
Add Dept Varchar2(10) Constraint S3 UNIQUE)
Alter Table Student(
Drop Column age)
Alter Table Student(
Modify age Integer NOT NULL --列名不能修改
)
Alter Table Student(
Add Constraint PKStudent Primary Key(S#) --只能增加表约束
)
Alter Table SC(
Drop Constraint sc
)
Drop Table Student Cascade Constraints ---Cascade Constraints表示删除表时同时删除该表的所有约束
选择
Select <列名表> --指定希望查看的列
From <表名列表> --指定要查询的表
Where <条件> --指定查询条件
Group By <分组列名表> --指定要分组的列
Having <条件> --指定分组的条件,必须聚集函数的比较式
Order By <排序列名表> --指定如何排序
WHERE子句中的关系运算符:算术比较符:>, <, >=, <=, =, <>;IN;IS NULL和IS NOT NULL;LIKE;EXISTS
举例:
1.查询姓名的第一个字母为‘R’的学生
Select * From Student Where sname LIKE ‘R%’ //%:任意长度的字符串
2.查询男生和女生的平均年龄
Select sex, AVG(age) as Average_age From Student Group By sex
注意:除聚集函数外的属性必须全部出现在Group By子句中
3.查询人数在60以上的各个班级的学生平均年龄
Select class, AVG(age) From Student
Group By class
Having COUNT(*) > 60
4.查询不同年龄的学生人数,并返回人数在5人以上的结果
Select age, COUNT(*) as students From Student
Group By age
Having COUNT(*) > 5
联接查询
联接查询与基本查询结合:查询男学生的学号,姓名和所选的课程数,结果按学号升序排列
Select a.s#, b.sname, count(b.c#) as c_count
From student a, sc b
Where a.s# = b.s# and a.sex=‘M’
Group By a.s#, b.sname
Order By student.s#
嵌套查询
查询没有选修课程的所有学生的学号和姓名
Select s#,sname
From student
Where s# NOT IN ( select distinct s# From sc)
---上述中父查询与子查询相互独立,子查询语句不依赖父查询中返回的任何记录,可以独立执行
查询选修了课程的学生学号和姓名
Select s#, sname
From student
Where EXISTS (Select * From sc Where sc.s# = student.s#)
——上述相关子查询不可单独执行,依赖于外层查询;执行分析:对于student的每一行,根据该行的s#去sc中查找有无匹配记录
联接视图
子查询出现在From子句中作为表使用
查询只选修了1门或2门课程的学生学号、姓名和课程数
Select s#, count_c#
From (Select s.s# as s#, count(sc.s#) as count_c#
From student s, sc
Where s.s#=sc.s#
Group by s.s#) SC2, student
Where sc2.s# = student.s# and (count_c#=1 OR count_c#=2)
联机视图可以和其它表一样使用
查询结果的连接
n 查询课程平均成绩在90分以上或者年龄小于20的学生学号
(Select s# From student where age<20)
UNION
(Select s#
From (Select s#, AVG(score)
From SC
group by s#
having avg(score)>90) SC2
)-------UNION操作自动去除重复记录 Union All操作不去除重复记录
n 查询未选修课程的学生学号
(Select s# From Student)
Minus
(Select distinct s# From SC)
n 查询课程平均成绩在90分以上并且年龄小于20的学生学号
n (Select s# From student where age<20)
Intersect
(Select s#
From (Select s#, AVG(score) From SC group by s# having avg(score)>90) SC2
)----返回两个查询结果的交集
带有ANY或ALL谓词的子查询
查询其他系中比IS系任一学生年龄小的学生名单
SELECT Sname, Sage
FROM Student
WHERE Sage < ANY (SELECT Sage FROM Student WHERE Sdept="IS" )
AND Sdept <> 'IS'
ORDER BY Sage DESC;
授权
例4:把查询Student表和修改学生学号的权限授给用户U4
GRANT UPDATE(Sno), SELECT ON TABLE Student TO U4;
例7:收回所有用户对表SC的查询权限
REVOKE SELECT ON TABLE SC FROM PUBLIC;
例8:把用户U5对SC表的INSERT权限收回
REVOKE INSERT ON TABLE SC FROM U5;