前提:
所有下面的sql语句都建立在student表和sc表基础之上!
假设student表内容:
Sno Sname Ssex Sage Sdept
------------------------------------------
95001 李勇 男 20 CS
95002 刘晨 女 19 IS
95003 王名 女 18 MA
95004 张立 男 18 IS
假设sc表内容:
Sno Cno Grade
------------------------------------------
95001 1 92
95001 2 85
95001 3 88
95002 2 90
95002 3 80
1.创建表:
create table <表名>
(<列名> <数据类型> [列级完整性约束条件]
[,<列名> <数据类型> [列级完整性约束条件]...]
[,<表级完整性约束条件>];
)
例如:
create table student
(Sno CHAR(5) NOT NULL UNIQUE,
Sname CHAR(20),
Ssex CHAR(2),
Sage INT,
Sdept CHAR(15)
);
*2.查询:
假设student表内容:
Sno Sname Ssex Sage Sdept
------------------------------------------
95001 李勇 男 20 CS
95002 刘晨 女 19 IS
95003 王名 女 18 MA
95004 张立 男 18 IS
假设sc表内容:
Sno Cno Grade
------------------------------------------
95001 1 92
95001 2 85
95001 3 88
95002 2 90
95002 3 80
1.创建表:
create table <表名>
(<列名> <数据类型> [列级完整性约束条件]
[,<列名> <数据类型> [列级完整性约束条件]...]
[,<表级完整性约束条件>];
)
例如:
create table student
(Sno CHAR(5) NOT NULL UNIQUE,
Sname CHAR(20),
Ssex CHAR(2),
Sage INT,
Sdept CHAR(15)
);
*2.查询:
- (1)单表查询:
- ·全部查询:
- select * from student
- ·部分查询:
- select Sname,Sno, from student
- ·条件查询:
- select Sname from student where Sdept = 'CS'------比较大小
- select Sname,Sage from student where Sage < 20
- select Sname from student Sage between 20 and 30' ------确定范围
- select Sname from student where Sdept in ('CS','MA')------确定集合
- select * from student where Sname like ‘刘%’------字符匹配
- select * from sc where grade is null ------空值查询
- select * from student where Sdept = ‘CS’and Sage<20 ------多重条件查询
- ·查询结果表取消重复的行:
- select distinct Sage from student
- ·对查询结果进行排序:
- select * from student order by Sage desc ------降序
- ·对查询结果进行分组:
- select Cno,count(Cno) from sc group by Cno
- (2)多表查询:
- ·等值连接查询:
- select student.*,sc.* from student,sc where student.Sno=sc.Sno ------查询每个学生以及选修课程的情况,默认只输出满足结果的元组
- ·自身连接
- ·外连接(因为等值连接查询默认只输出满足结果的元组,为了全部输出所以出现了外连接):
- select student.*,sc.* from student,sc where student.Sno=sc.Sno(*)
- ·复合条件连接:
- select student.Sno,Sname from student,sc where student.Sno=sc.Sno and sc.Cno='2' and sc.grade>90 ------查询选修2号课程且成绩在90分以上的所有学生
- (3)嵌套查询:求解方法是由里向外处理
- (4)集合查询:使用UNION自动去掉重复的元组
- (5)集函数:
- ·count([distinct|all] *):统计元组个数
- 例如:select count(*) from student
- ·count([distinct|all] <列名>):统计一列中值的个数
- 例如:select count(distinct Sno) from student
- ·sum([distinct|all] <列名>):计算一列值的总数
- ·avg([distinct|all] <列名>):计算一列值的平均值
- 例如:select avg(Sage) from student
- ·max([distinct|all] <列名>):求一列值中的最大值
- 例如:select max(Sage) from student
- ·min([distinct|all] <列名>):求一列值中的最小值
3.插入:
(1)插入单个元组:
insert into student values('95006','陈东','男','18','IS');
insert into sc(Sno,Cno) values('95006','1');
(2)插入予查询结果
4.更新:
(1)修改某一个元组的值:
update student set Sage=22 where Sno=‘95001’
(2)修改多个元组的值:
update student set Sage=Sage+1
5.删除:
(1)删除某一个元组的值:
delete from student where Sno='95001'
(2)删除多个元组的值:
delete from sc
6.数据库的一致性:
修改或者删除数据库某张表的记录时,因为update或者delete语句一次只能操作一个表,当删除的表和多个表有依赖或者关联关系时,可能会带来一些问题。
例如,student表sc表通过Sno关联,当删除student表中的某个学生记录时,但sc表中却仍然记录着有关该学生的选课记录,数据的参照性完整性收到了破环。只有再次执行删除sc表和相关记录的操作数据才重新处于一致状态。
但是,当机器发送故障,无法继续执行第二条删除语句,则数据库用于处于不一致状态,因此我们必须保证两条delete语句同时有效!
解决方法:数据库中引入了事务的概念!
insert into student values('95006','陈东','男','18','IS');
insert into sc(Sno,Cno) values('95006','1');
(2)插入予查询结果
4.更新:
(1)修改某一个元组的值:
update student set Sage=22 where Sno=‘95001’
(2)修改多个元组的值:
update student set Sage=Sage+1
5.删除:
(1)删除某一个元组的值:
delete from student where Sno='95001'
(2)删除多个元组的值:
delete from sc
6.数据库的一致性:
修改或者删除数据库某张表的记录时,因为update或者delete语句一次只能操作一个表,当删除的表和多个表有依赖或者关联关系时,可能会带来一些问题。
例如,student表sc表通过Sno关联,当删除student表中的某个学生记录时,但sc表中却仍然记录着有关该学生的选课记录,数据的参照性完整性收到了破环。只有再次执行删除sc表和相关记录的操作数据才重新处于一致状态。
但是,当机器发送故障,无法继续执行第二条删除语句,则数据库用于处于不一致状态,因此我们必须保证两条delete语句同时有效!
解决方法:数据库中引入了事务的概念!