数据库是以特定数据结构组织在计算机上存储和管理数据的“仓库”。
数据库有很多类型,通常根据不同数据组织类型分为层次式数据库,网络式数据库,关系数据库和面向对象的数据库。
关系数据库操作系统,是指通过关系模型来组织数据的数据库。关系型数据库把世界改成与实体和联系组成。
常用的关系型数据库有:
Oracle是收费商量的数据库,提供很好的维护与支持,适用于业务逻辑较复杂,数量数据量大的大中型项目。
MySQL是不是由于体积小,速度快,总体拥有成本低,开放源码,受到很多中小型公司的青睐。
SQL Server数据库的工程比较全面,效率高,适合于中型企业或单位的数据库平台。
create table student
(sno char(4) primary key,
sname char(8) not null,
ssex char(2),
sage smallint,
sdept char(20)
);
create table course
( cno char(4),primary key,
cname char(4) not null,
cteacher char(8)
)
create table sc
( sno char(4),
cno char(4),
grade numeric(4,1)
primary key (sno,cno),
foreign key (sno) reference student(sno),
foreign key (cno) reference course(cno)
)
为sc 表添加“修课类别”列,数据类型为定长2个字符,允许空
alter table sc add 修课类别 char(2) null
删除sc表的“修课类别”列
alter table sc drop 修课类别
将一个新生插入到student表中,学号1105,姓名:陈冬,性别:男,年龄18岁,系别:信息管理系
insert into student values('1105','陈冬','男',18,'信息管理系')
在sc表中插入一条记录,学号1603,课程号c001,成绩空
insert into sc values('1603','c001',null)
删除使用不及格同学的修课记录
delete from sc where grade <60
删除计算机系女生的记录
delete from student where sdept='计算机系' and ssex='女'
将所有学生的成绩加三分
update sc set grade = grade + 3
将学号为1104学生的年龄的加1岁
update sc set sage=sage+1 where sno='1104'
将计算机系女生的系名更新为电子工程系
update student set sdept='电子工程系'
where sdept='计算机系' and ssex='女'
查询全体学生的学号和姓名
select sno,sname from student
查询全体学生的修课记录sno,cno,grade
select sno,cno,grade from sc
或 select * from sc
查询全体学生的姓名和出生年份
select snmae,2022-sage 出生年份 from student // 查询改变列标题: 列名 新列名
查询所有学生选修课程的学号,课程号和成绩(每门课程的成绩=成绩*1.1),成绩列的新列名为“总评成绩”
select sno,cno grade*1.1 总评成绩 from sc
查询有课程选修学生的学号
select distinct sno from sc // distinct 去除重复值
查询信息管理系学生的学号,姓名
select sno,sname from student where sdept='信息管理系'
比较运算符
= 等于
> 大于
>=大于等于
< 小于
<=小于等于
<>不等于
查询考试成绩有不及格的学生的学号
select distinct sno from sc where grade < 60
查询年龄在20岁以上的学生的姓名,系别
select sname,sdept from student where sage > 20
查询课程号为c004的课程名,教师名
select cname,cteacher from course where cno = 'c004'
查询通信工程系年龄在20岁以下的女生的姓名
select sname from student
where sdept='通信工程系'and sage < 20 and ssex='女'
逻辑运算符
and 逻辑且
or 逻辑或
and 比 or 优先级 高
查询计算机或信息管理系学生中男生的学号,姓名,所在系和年龄
select sno,sname,sdept,sage from student
where (sdept='计算机系' or sdept = '信息管理系') and ssex='男'
查询学号为1602或1604且选修了coo3课程的学生的成绩
select grade from sc
where (sno = '1602' or sno='1604') and cno='c003'
查询年龄在18~20岁的学生的姓名,所在系和年龄
select sname,sdept,sage from student
where sage between 18 and 20
或
select sname,sdept,sage from student
where sage >= 18 and sage <= 20
:::info{title=“相关信息”}
注:确定范围运算符 (not)between 下限 and 上限
:::
查询考试成绩不在70~90的学生的学号,课程号
select sno,cno from sc
where grade not between 70 and 90
或
select sno,cno from sc
where grade < 70 and grade > 90
查询信息管理系或通信工程系学生的姓名和性别
select sname,ssex from student
where sdept='信息管理系' or sdept='通信工程系'
或
select sname,ssex from student
where sdept in('信息管理系','通信工程系')
确定集合运算符 (not )in
查询课程号为C002,C004的课程的课程名和教师名
select cname,cteacher from course
where cno in('c002','c004')
或
select cname,cteacher from course
where cno='c002' or cno='c004'
查询未考试学生的学号和课程号
select sno,cno from sc
where grade is null
确定空值运算符 is (not) null (非)空值
查询有考试成绩的学生的学号,课程号和成绩
select * from sc
where grade is not null
查询计算机系姓张的学生的详细信息
select * from student
where sdept='计算机系' and sname like '张%'
字符匹配运算符 like / not like
用法 列名 like (not like) 匹配串
匹配串 中可包括如下4中通配符
______(下划线):匹配任意一个字符
%(百分号):匹配0个或多个字符
[ ]: 匹配[ ]中的任意一个字符
[^ ]: 不匹配[ ]中的任意一个字符
::
查询学生姓名的第二个字为美或丽的女生的姓名和学号
select sno,sname from student
where sname like '_[美丽]%' and ssex='女'
查询课程名中有大学两字的课程号和课程名
select cno,cname from course
where cname like '%大学%'
查询学号第四位不是3,5,7,的年龄为18岁或20岁的男生的详细信息
select * from student
where cno like '_ _ _ [^357]%' and sage not in (18,20) and ssex ='男'
查询选修了课程号里含有2 的学生的学号和成绩,查询结果按成绩降序排列,成绩相同的按学号排列
select sno,grade from sc
where cno like '%2%'
order by grade desc,sno ase
查询计算机系或信息管理系女生的学号,姓名和年龄,并按学生年龄升序排列
select sno,sname,sage from student
where sdept in ('计算机系','信息管理系') and ssex='女'
order by sage asc
查询课程号为c002,c003,c004的课程名,查询结果按课程号降序排列
select cname from course
where cno in ('c002','c003','c004')
order by cno desc
使用统计函数汇总数据
count(*) 统计表中元组个数
count(distinct 列名)统计列值个数(去掉重复值)
sun(列名) 计算列值总和
avg(列名) 计算列值平均值
max(列名) 计算列值最大值
min(列名) 计算列值最小值
注:函数用于目标序列或排序子句,但不能用于where子句
统计学生总人数
select count(*) 学生总人数 from student
统计选修了课程学生的人数
select count (distinct sno) 选修课程人数 from sc
统计计算机系女生的总人数,最大年龄,最小年龄和平均年龄
select count(*) 总人数, max(sage) 最大年龄,
min(sage) 最小年龄 ,avg(sage) 平均年龄 from student
where sdept = '计算机系' and ssex ='女'
统计张王李3个姓的总人数及平均年龄
select count(*) 总人数,avg(sage) 平均年龄 from student
where sname like '[张王李]%'
查询计算机系学生的修课情况,要求列出学生的名字,所修课的课程号和成绩
select sname,cno,grade from student,sc
where student.sno=sc.sno and sdept='计算机系'
查询选修了coo1课程且考试成绩在80分以上的女学生的修课情况,要求列出学生的学号,姓名和成绩
select student.sno,sname,grade from student,sc
where student.sno=sc.sno and cno='c001' and grade > 80 and ssex='女'
查询信息管理系选修了计算机文化学课程的学生的姓名,课程名和成绩
select sname,cname,grade from student ,course,sc
where student.sno=sc.sno and course.cno=sc.cno
and sdept='信息管理系' and cname ='计算机文化学'
查询通信工程系的选课人数,平均成绩和最高成绩
select count(distinct sc.sno)选课人数,
max(grade)最高成绩,avg(grade) 平均成绩 from student,sc
where student.sno=sc.sno and sdept='通信工程系'
查询计算机系女生选修了c001课程的成绩,要求列出姓名和成绩,查询结果按学号的降序排列
select sname , grade from student ,sc
where student.sno=sc.sno and cno ='c001'and sdept ='计算机系'
and ssex='女'
order by stduent.sno desc
查询成绩大于等于90分的学生的学号,姓名
select sno,sname from student where sno in
(select sno from sc where grade >=90)
或
select stduent.sno,sanme from stduent,sc
where student.sno=sc.sno and grade >=90
查询通信工程系选修了c002课程的学生的学号和成绩
select sno,grade from sc where sno='c002' and sno in
(select sno from student where sdept='通信工程系')
或
select student.sno,grade from student,sc
where student.sno=sc.sno and sdept='通信工程系' and cno='c002'
查询考试成绩在80分以上的学生的姓名,结果按姓名降序排列
select sname from student
where ssex='女' and sno in
(select sno from sc where grade > 80)
order by sanme desc
select sname from student,sc
where student.sno=sc.sno and grade > 80
order by sname desc