数据类型 | 含义 |
---|---|
char(n) | 长度为n的定长字符串 |
varchar(n) | 最大长度为n的变长字符串 |
int | 长整数 |
smallint | 短整数 |
numeric(p,d) | 定点数,由p位数字组成,小数点后有d为数字 |
real | 取决于机器精度的浮点数 |
double precision | 取决于机器双精度的浮点数 |
float(n) | 浮点数,精度至少为n位数字 |
date | 日期,YYYY-MM-DD |
Time | 时间,HH:MM:SS |
--建立学生表Student
create table student(
sno char(9) primary key,
sname varchar(20) unique,
ssex char(2),
sage smallint,
sdept char(20)
);
-- 建立一个课程表course
create table course(
cno char(4) primary key ,
cname char(40),
cpno char(4), /*先修课*/
ccredit smallint,
foreign key(cpno) references course(Cno)
);
-- 建立一个学生选课表sc
create table sc(
sno char(9),
cno char(4),
grade smallint,
primary key (sno,cno),
foreign key (sno) references student(sno),
foreign key (cno) references course(cno),
);
--插入数据
insert student values ('201215121','李勇','男',20,'CS');
insert student values ('201215122','刘晨','女',19,'CS');
insert student values ('201215123','王敏','女',18,'MA');
insert student values ('201215125','张立','男',19,'IS');
insert course values('1','数据库','5',4);
insert course values('2','数学',null,2);
insert course values('3','信息系统','1',4);
insert course values('4','操作系统','6',3);
insert course values('5','数据结构','7',4);
insert course values('6','数据处理',null,2);
insert course values('7','PASCAL语言','6',4);
insert sc values('201215121','1',92);
insert sc values('201215121','2',85);
insert sc values('201215121','3',88);
insert sc values('201215122','2',90);
insert sc values('201215122','1',80);
--将年龄的数据类型由字符型(假设原来的数据类型是字符型)改为整数
alter table student alter column sage int;
-- 增加课程名必须取唯一值
alter table course add unique (cname);
create unique index stusno on student(sno);
create unique index coucno on course(cno);
create unique index scno on sc(sno asc,cno desc);
-- 删除索引
/*删除索引时,系统会从数据字典中删除有关该索引的描述*/
drop index student.stusno;
-- 查询全体学生的学号、姓名、所在系
select sno,sname,sdept from student;
--查询全体学生的详细纪律
select * from student;
--查询全体学生的姓名、出生年份
select sname,2020-sage '出生年份' from student;
--在每个学生的姓名后面显示字符串 2017
select sname+'2017' from student;
--查询全体学生的人数
select count(*) from student;
--取消重复行
--查询选修了课程的学生的学号
select distinct sno from sc;
--取消重复行
--查询选修了课程的学生的学号
select distinct sno from sc;
--查询所有年龄在20岁以下的学生姓名及其年龄。
select sname,sage from student where sage<20;
-- 查询性别为女的学生的学号、姓名
select sno,sname from student where ssex='女';
-- 查询学分为4学分的课程的名字
select cname from course where ccredit=4;
-- 查询成绩在85分以上的学生的学号
select distinct sno from sc where grade>85;
-- 确定范围
--查询年龄在19~21岁(包括19岁和21岁)之间的学生的姓名、系别和年龄
select sname,sdept,sage from student where sage between 19 and 21;
-- 查询所有姓刘学生的姓名、学号和性别。
select sname,sno,ssex from student where sname like '刘%';
-- 查询姓“欧阳”且全名为三个汉字的学生的姓名。
select sname from student where sname like '欧阳_';
-- 查询DB_Design课程的课程号和学分。
select cno,ccredit from course where cname like'DB\_Design' escape'\';
-- 查询以“DB_”开头,且倒数第3个字符为 i的课程的详细情况
select * from course where cname like'DB\_%i__' escape'\';
-- 查询选修了3号课程的学生的学号及其成绩,查询结果按分数降序排列
select sno,grade from sc where cno='3' order by grade desc;
-- 查询全体学生情况,查询结果按所在系的系号升序排列,同一系中的学生按年龄降序排列。
select * from student order by sdept asc,sage desc;
名称 | 参数类型(列名) | 结果类型 | 描述 |
---|---|---|---|
count | r任意或* | 数值 | 计数 |
sum | 数值型 | 数值 | 计算总和 |
avg | 数值型 | 数值 | 计算平均值 |
max | 数值型、字符型 | 同参数类型一样 | 求最大值 |
min | 数值型、字符型 | 同参数类型一样 | 求最小值 |
-- 求各个课程号及相应的选课人数
select cno,count(sno) from sc group by cno;
-- 查询选修了3门以上课程的学生学号
select sno from sc group by sno having count(*)>3;
--查询所有选修了1号课程的学生姓名。
select sname from student where exists
(
select * from sc where student.sno=sc.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
)
);
-- 插入语句
insert into student values ('201215126','张加民','男',18,'CS');
修改某个元组的值
修改多个元组的值
带子查询的修改语句
--将学生201215121的年龄改为22岁
update student set sage=22 where sno='201215121';
-- 将所有学生的年龄增加一岁
update student set Sage=sage+1;
-- 将计算机科学系(MA)全体学生的成绩置零
--insert into sc values ('201215123','1',63);
update sc set grade=0 where sno in
(
select sno from student where sdept='MA'
);
--删除学号为201215128的学生记录
delete from student where sno='201215128';
--删除所有学生的选课记录
delete from sc;
-- 删除计算机科学系的所有学生的选课记录
delete from sc where 'CS' =
(
select sdept from student
where student.sno=sc.sno
)
--建立信息系学生的视图
create view IS_Student as
select sno,sname,sage from student where sdept='IS' with check option ;
-- 建立信息系选修了1号课程的学生视图
create view C_1 as
select sc.sno,sname,sage,grade from student,sc where student.sno=sc.sno and cno='1';
-- 建立信息系选修了1号课程且成绩在90分以上的学生视图。
create view c_1_90 as
select * from C_1 where grade>90;
--将学生的学号及他的平均成绩定义为一个视图。
create view s_avg_grade (sno,avg_score) as
select sno,avg(grade) from sc group by sno;