SQL数据查询
基本结构
select [all|DISTINCT]
<目标列表达式>[别名],<目标列表达式>[别名]...
from <表名或视图名>[别名],<表名或视图名>[别名]...
where <条件表达式>
group by <列名1>
having <条件表达式>
order by <列名2>
练习
-
查询学生表和选课表中中的全部数据。
select * from student select * from sc
-
查询计算机系的学生的姓名、年龄。
select sname,sage from student where sdept="计算机系"
-
查询选修了c01号课程的学生的学号和成绩。
select sno,grade from student,sc where sno="c01"
-
查询成绩在70到80分之间的学生的学号、课程号和成绩。
select s.sno,sc.sno,grade from student s,sc where grade between 70 and 80
-
查询计算机系年龄在18到20之间且性别为男的学生的姓名、年龄。
select sname,sage from student where sage between 18 and 20 and ssex="男" and sdept="计算机系"
-
查询0412101号学生的选课情况。
select * from sc where sno="0412101"
-
查询c01号课程成绩最高分。
select max(grade) from sc where sno="c01"
-
查询学生选修的课程,列出课程号
select sno from sc
-
查询学生数据库中学生的最大年龄和最小年龄
select max(sage),min(sage) from student
-
查询选修c02号课程的所有学生的平均成绩、最高成绩和最低成绩。
select AVG(grade),max(grade),min(grade) from sc where sno="c02"
-
统计每个系的学生人数。
select sdept,count(sno) from student group by sdept
-
统计每个学生的选课门数,并按选课门数递增显示结果。
select sno,count(sno) from sc group by sno order by count(sno) ASC
SQL数据更新
插入操作
格式:
insert
into <表名> (<属性列>...)
values (常量...)
insert语句的功能是将指定的元组插入到指定的关系中,其中属性列的顺序要与常量值一一对应,常量1的值赋给属性列1,常量2的值赋给属性列2,依次类推。
插入单条元组
-
插入一条学生数据。
insert into Student(Sno,Sname,Ssex,Sdept,Sage) values(‘200215128‘,‘lee‘,‘男‘,‘CS‘,‘18‘)
插入多个元组
-
在Student表中查询出所有01类图书,将id=01插入到user1表中
insert into user(id) select Sdept=‘CS‘ from Student where id=‘01‘
说明:SQL先处理子查询,得到查询结果,再将结果插入到所指的基本表中。
修改操作
格式:
update <表名>
set<列名>=<表达式>...
where <条件>
update语句的功能是修改指定关系中满足where子句条件的元组,其中set子句给出指定列的修改方式及修改后的值。若省略where子句,则说明要修改关系中的所有元组,在where子句中可以嵌套子查询。
修改一个元组的值
-
将学生表中学号为200215128的学生年龄加1.
update Student set Sage = Sage+1 where Sno=‘200215128‘
修改多个元组的值
-
将学生表中所有学生年龄加1.
update Student set Sage = Sage+1
带子查询的修改语句
-
将选课表中所有计算机系的学生成绩提高5%
update SC set Grade = Grade*1.05 where Sno = (select Sno from Student where Sdept=‘CS‘)
删除操作
格式
delete
from <表名>
where <条件>
delete语句的功能是删除指定关系中满足where子句条件的所有元组。当where语句省略时,表示要删除关系中的全部元组,但表的定义仍存放在数据字典中。delete语句删除的是关系中的数据,而不是表的定义。
删除一个元组的值
-
将学号为200215128的学生从学生表中删除
delete from Student where Sno=‘200215128‘
删除多个元组的值
-
将学生表中所有学生删除
delete from Student
带子查询的删除语句
-
将选课表中所有计算机系的学生删除
delete from SC where Sno(select Sno from Student where Sdept=‘CS‘)
SQL数据控制
授权操作
格式
grant <权限> ...
on <对象类型><对象名>
to <用户>...
[with grant option]
grant语句是将指定操作对象的指定操作权限授予指定的用户。如果指定了with grant option子句,则获得某种权限的用户还可以把这种权限在授予别的用户,但在收回权限时,将级联收回。
-
把查询user1表权限授给用户u1,并允许他再将此权限授予其他用户
grant select on user to u1 with grant option
-
把对user1表和product表的全部权限授予用户u2和u3
grant all priviliges on user1, product to u2, u3
-
把查询user1表的权限授给所有用户
grant select on user1 to public
收回权限
格式
revoke <权限>...
on <对象类型><对象名>
from <用户>
用户被授予的权限可由DBA或其他授权者用revoke语句收回。
-
把用户u4对user表进行修改的权限收回
revoke update on user from u4
-
收回所有用户对user表的查询权限
revoke select on user from public