学生——课程数据库
* 学生表:Student(Sno,Sname,Ssex,Sage,Sdept)
* 课程表:Course(Cno,Cname,Cpno,Ccredit)
* 学生选课表:Sc(Cno,Cno,Crade)
学生表:Student
课程表:Course
学生选课表:Sc
一:其本表的定义、删除、修改
create table Student1(
Sno char(9) primary key,
Sname char(20) unique,
Ssex char(2),
Sage smallint,
Sdept char(20)
)
create table Course1 (
Cno char(4) primary key,
Cname char(40),
Cpno char(4),
Ccredit smallint
)
create table Sc1(
Sno char(9),
Cno char(4),
Grade smallint,
primary key(Sno,Cno),
foreign key(Sno)references Student(Sno),
foreign key(Cno) references Course(Cno)
)
alter table Student Add S-entrance DATE;
alter table Student alter column Sage int;
-- 若选择restrict:则该表的删除是有限制条件的。欲删除的基本表不能被其他表的--- 约束所引用(如CHECK,FOREIGN等约束),不能有视图,不能有触发器--------- (trigger),不能有存储过程或函数等。
-- 如果存在这些依赖该表的对象,则此表不能删除。
-- 若选择cascade:则该表的删除没有限制条件。在删除其本表的同时,相关的依---- 赖对象,
-- 例如视图,都将被一起删除。
*/
drop table Student cascade;
drop table Student restrict;
二:数据查询:
-- 表单查询
-- 1:查询指定列
select Sno,Sname from Student;
-- 2:查询全部列
select * from Student;
-- 等价于
select Sno,Sname,Ssex,Sage,Sdept from Student;
-- 3:查询经过计算的值
select Sname,2012-Sage from Student;
-- 二。选择表中的若干元组
-- 1:消除取值重复的行
-- select distinct Sno from Sc;
-- 2:查询满足条件的元组
-- 2.1比较大小
-- select Sname from student where Sdept='CS';
-- select Sname,Sage from student where Sage<20;
select distinct Sno from sc where Grade<60;
-- 2.2 确定范围
select Sname,Sdept,Sage from student where Sage between 20 and 23;
select Sname,Ssex from student where Sdept in('CS','MA','IS');
-- 2.3 字符匹配
select * from student where Sno like '200215121';
select * from student where Sname like '刘%';
select * from student where Sname like '欧阳__';
-- 2.4 涉及空值的查询
select Sno,Cno from Sc where Grade is null;
select Sno,Cno from Sc where Grade is not null;
-- 2.5 多重条件查询
select Sname from student where Sdept='CS' and Sage<20;
select Sname from student where Sdept='CS' or Sdept='MA' or Sdept='IS'
-- 三,order by 子句
select Sno,Grade from Sc where Cno='3' order by Grade desc;
select * from student order by Sdept,Sage desc;
-- 四,聚集函数
select count(*) from student;
select count(distinct Sno) from sc;
select avg(Grade) from sc where Cno='1';
select max(Grade) from sc where Cno='1';
select sum(Ccredit) from sc,course where Sno='200215121' and sc.Cno=course.Cno;
-- 五,group by 子句
-- 求各个课程号及相应的选课人数
select Cno,count(Sno) from sc group by Cno;
-- 查询选修了3门以上课程的学生学号
select Sno from sc group by Sno having count(*)>3;
-- 连接查询
-- 一。等值与非等值连接查询
-- 查询每个学生及其选修课程的情况。
select student.*,sc.* from student,sc where student.Sno=sc.Sno;
-- 外连接
-- 在通常的连接操作中,只有满足连接条件的元组才能作为结果输出。上例中的结果
-- 中没有其他两个学生的信息,原因在于他们没有选课 。
-- 有时想以student表为主体列出每个学生的基本情况及其选课情况。若某个学生没有选课,
-- 仍把舍弃的student元组保存在结果关系中,而在sc表的属性上填空值(null),这时就需要
-- 使用外连接。
select student.Sno,Sname,Ssex,Sage,Sdept,Cno,Grade from student left join sc on(Student.Sno=sc.Sno) where student.Sage<20;
select student.Sno,Sname,Ssex,Sage,Sdept,Cno,Grade from student right join sc on(Student.Sno=sc.Sno) where student.Sage<20;
-- 四、复合条件连接
select student.Sno,Sname from student,sc where student.Sno=sc.Sno and sc.Cno='2' and sc.Grade<90;
-- 2.4.3 嵌套查询
-- 查询与‘刘晨’在同一系学习的学生。
select Sno,Sname,Sdept from student where Sdept in(select Sdept from student where Sname='刘晨');
-- 带有比较动算符的子查询
select Sno,Cno from sc x where Grade>=(select avg(Grade) from sc y where y.Sno=x.Sno);
-- 四’带有exists谓词的子查询
-- 查询所有选修了1号课程的学生姓名
select Sname from student where exists (select * from sc where Sno=student.Sno and Cno='1');
-- 查询选修了全部课程的学生姓名
select Sname from student where not exists(select * from course where not exists (select * from sc where Sno=student.Sno and Cno=course.Cno));
-- 集合查询
-- 集合操作主要包括并操作UNION、交操作INTERSECT和差操作EXCEPT。
select * from student where Sdept='CS' union select * from student where Sage<=19;
三:数据更新
-- 3.5 数据更新
-- 1:数据更新
-- insert into student values('200215128','陈冬','男','IS',18);
-- 2:修改数据
-- update student set Sage=23 where Sno='200215121';
-- 3:删除数据
delete from student where Sno='200215128';
- 大小: 4 KB
- 大小: 4.3 KB
- 大小: 2.4 KB
分享到:
相关推荐
oracle_sql笔记
sql笔记sql笔记sql笔记sql笔记sql笔记sql笔记
sql笔记.md
最全的ORACLE-SQL笔记,众多的SQL代码,基本包含了Oracle数据库的SQL语句,加上所有的注释,很容易看懂
OracleSQL笔记
pl/sql笔记pl/sql笔记pl/sql笔记pl/sql笔记pl/sql笔记pl/sql笔记pl/sql笔记
SQL笔记
NULL 博文链接:https://ybds.iteye.com/blog/2392710
hivesql笔记.sql
SQL笔记-副本.sql
这个文档时我的SQL笔记
没有SQL的就下 ,保证真实!大小1G!东方红数据库科技活动附件可回收
oracle SQL笔记,非常全面,足够初学者查询使用。
sql 笔记.md
Server SQL笔记
SQL笔记
sql 笔记,整理自韩顺平的教程 包括oracle mysql sql server
Oracle 常用SQL 笔记 保存,自己留着用.. 简单的关键字说明
超有用sql笔记希望对大家有用..............................................................................
sql笔记,,,,,,,