1. oracle练习。用sql语句建表
(1)
create table customer(
"客户编号" number(8),
"客户名称" varchar2(40),
"客户电话" varchar2(20)
);
(2)
insert into customer values(1,'客户1','13900000001');
insert into customer values(2,'客户2','13900000002');
insert into customer values(3,'客户3','13900000003');
insert into customer values(4,'客户4','13900000004');
insert into customer values(5,'客户5','13900000005');
insert into customer values(6,'客户6','13900000006');
insert into customer values(7,'客户7','13900000007');
insert into customer values(8,'客户8','13900000008');
insert into customer values(9,'客户9','13900000009');
insert into customer values(10,'客户10','13900000010');
(3)
select * from customer where rownum>=4 and rownum<=6;
2. SQL数据库练习题
1. SQL Server 2000是典型的关系型数据库产品。 ( 1 )
2. 在一台计算机上可以同时运行多个版本的SQL Server。 ( 1 )
3. 在SQL Server中日志文件是维护数据库完整性的重要工具。 ( 0 )
4. 在定义数据表时,定义某列为标识列的关键字是Identity。 ( 1 )
5. 浮点数据类型的优点是能够存储范围非常大的数字,但容易发生误差。 ( 0 )
6. 数据库完整性的目的是为了防止错误信息输入和输出。 ( 0 )
7. 在Update语句中,一次可以更新多个表。 ( 0)
8. 尽量使用Select * ,可以加快查询速度。 ( 0 )
9. 在SQL Server 2000中表示注释可以用类似C语言的/*...*/和//。 ( 0 )
10. 在SQL Server中,RTRIM函数删除字符串右边的空白字符。 ( 1 )
11. 一个表只能有一个聚集索引(簇索引)。 ( 1 )
12. SQL查询语言中,如果没有指定排序方式,则默认是升序方式。 ( 1 )
13. 在SQL Server 2000中ntext类型的字段不能进行排序操作。 ( 0 )
14. 在SQL Server 2000中bit类型的字段不能建立索引。 ( 1 )
15. 在被定义为唯一索引的列上的数据不能有重复的值。 ( 1 )
16. 在被定义为唯一索引的列上的数据不允许空。 ( 0可以的但是只能有一个null值 )
17. 在SQL Server中,每张表都应该建立一个索引,以提高查询速度。 ( 0 )
18. 视图在SQL Server中是一张虚拟表。 ( 1 )
19. 当一个视图由2个以上基本表构成时,不能进行删除视图中的数据。 ( 0 )
20. 在SQL Server中,触发器是一种特殊的存储过程。 ( 1 )
21. 由于存储过程是解释执行,所以每次执行时都要检查是否有语法错误。 ( 0 )
22. 可以在用户正在使用的数据库上执行数据库恢复操作。 ( 0 )
1表示正确
3. 写出创建如下三张数据表的SQL语句。
在SSMS中,用【创建表】来设计,包括约束;然后保存,选中该新表,右键【编写表脚本】,SQL就有了
项目”表结构:项目号:普通编码定长字符类型,长度为10,主键。项目写出创建如下三张表的sQL语句。
按照要求用SQL语句创建表格:选课表:表名——SC属性:Sno字符型,最大7个字符表示学生学号。
Cno字符型,最大4个字符表示课程号。Grade整型表示成绩。约束:主码——Sno,Cno;Sno,Cno均为外码)
4. SQL、关系代数练习
一、
--1.建立学生表Student,其中以学号为主码,以系号为外码,姓名不可以为空值,性别取值为“男”或“女”
CREATETABLEStudent
(
Sno INT,
Name VARCHAR(20) NOTNULL,
Gender CHAR(2),
Class VARCHAR(20),
Major VARCHAR(20),
Dno CHAR(2)
CONSTRAINTpk_Student_SnoPRIMARYKEY(Sno),
CONSTRAINTfk_Student_DnoFOREIGNKEY(Dno)REFERENCESDept(Dno),
CONSTRAINTchk_Student_GenderCHECK(GenderIN('男','女'))
)
--2.检索与“王强”在同一个班级的学生的学号、姓名、性别
SELECTSno,Name,Gender
FROMStudent
WHEREClass=(='王强')
--3.检索管理学院没有选修“电子商务”课程的学生的学号、姓名、班级、专业
SELECTS1.Sno,Name,Class,Major
FROMStudentS1
JOINDeptD
ONS1.Dno=D.Dno
WHEREDname='管理学院'
ANDSnoNOTIN
( SELECTS2.SnoFROMStudyS2
JOINCourseC
ONS2.Cno=C.Cno
WHERESubject='电子商务')
--4.检索选修了“C语言”且C语言考试成绩高于这门课平均成绩的学生的学号、姓名
SELECTS1.Sno,Name
FROMStudentS1
JOINStudyS2
ONS1.Sno=S2.Sno
JOINCourseC1
ONS2.Cno=C1.Cno
WHERESubject='C语言'
ANDScore>( SELECTAVG(Score)
FROMStudyS3
WHERES3.Cno=S2.Cno)
--5.在院系表(Dept)中插入一条记录,系号为06,系名为“物理系”,电话为8470660
INSERTINTODempVALUES('06','物理系','84706600')
--6.将“数据库原理”课程的学时改为64,学分改为4
UPDATECourse
SETTime=64,
Credit=4
WHERESubject='数据库原理'
--7.建立由班级、学号、姓名、课程号、课程名、学分、成绩七个数据项组成的视图
CREATEVIEWVW_SC
AS
SELECTClass,Sno,Name,Cno,Subject,Credit,Score
FROMStudentS1
JOINStudyS2
ONS1.Sno=S2.Sno
JOINCourseC
ONS2.Cno=C.Cno
二、
2.
5. 我想练习sql语句,请问如何做呢
安装一个数据库服务器,建立一个库。
然后先做这些练习吧,语句都加了注释了
/*
建立一个由3个文件组成的数据库,数据库名称为test。
主数据文件逻辑名称为test_data,物理文件名c:\test_data.mdf;
辅助数据文件逻辑名称为test_data2,物理文件名c:\test_data2.ndf;
日至文件逻辑名称为test_log,物理文件名c:\test_log.ldf;
所有文件初始尺寸为3mb,可以自动增长,最大尺寸为15mb。
*/
create database test on
primary
(
name=test_data,
filename='c:\test_data.mdf',
size=3mb,
maxsize=15mb,
filegrowth=1mb
),
(
name=test_data2,
filename='c:\test_data2.ndf',
size=3mb,
maxsize=15mb,
filegrowth=1mb
)
log on
(
name=test_log,
filename='c:\test_log.ldf',
size=3mb,
maxsize=15mb,
filegrowth=1mb
)
/*
创建一个名为employees的表,该表由5个字段组成:emp_id(员工编号)、ename(员工名称)、
age(年龄)、title(职务)、salary(薪水)。其中emp_id为该表的主键。该表存放在主文件组。
*/
use test
go
CREATE TABLE employees(
emp_id char (4) primary key,
ename nvarchar (10) NOT NULL,
age tinyint NOT NULL,
title nvarchar (10) NULL,
salary money NULL,
) ON [PRIMARY]
--向employees表插入部分数据
insert into employees values('0001','杨建新','22','经理','3000')
insert into employees values('0002','杨建新','23','职员','4000')
insert into employees values('0003','杨建新','24','总经理','5000')
insert into employees values('0004','杨建新','26','职员','2000')
--创建备份设备test_bak,其位置为c:\backup\test_bak.bak
sp_admpdevice 'disk','test_bak','c:\backup\test_bak.bak'
--建立数据库test的完整备份到备份设备test_bak,并命名为test_full_bak1
backup database test to test_bak with name='test_full_bak1'
--向employees表插入新数据
insert into employees values('0005','王建新','24','总经理','1000')
insert into employees values('0006','刘建新','26','职员','2000')
--执行test数据库的事务日志备份,该备份追加到备份设备test_bak,命名为test_log_bak1
backup log test to test_bak with name='test_log_bak1'
--截断employees表,清空内容(记录此时的时间)
truncate table employees
--备份数据库的尾部日志
use master
go
backup log test to test_bak with name='test_log_recovery',norecovery
--恢复数据库的完整备份,并且不要执行还原进程(norecovery)
restore database test from test_bak with file=1,norecovery
--恢复第一个日志备份,如果此时执行recovery,将得到所有数据
restore log test from test_bak with file=2,recovery
--如果执行上述语句时,使用norecovery选项,则可以继续恢复第二个日志备份,即尾部日志
restore log test from test_bak with file=2,norecovery
restore log test from test_bak with file=3,recovery
--如果按照上述操作,则恢复完成后employees表中没有任何数据,因为尾部日志中包含清空表的操作
--若要恢复所有数据,也可以恢复到时间点到清空时间之前
restore log test from test_bak with file=3,stopat='2008-11-16 11:25:00'
--添加一个名为mike,密码为123456的login账户,该账户的默认数据库为northwind
sp_addlogin 'mike','123456','northwind'
--切换到northwind数据库
use northwind
go
--将登录账户mike映射为当前数据库中的用户
sp_grantdbaccess 'mike','mike' --或:sp_adser 'mike','mike'
--建立数据库角色accessdata
sp_addrole tablecreate
--为数据库角色tablecreate赋予创建表的权限
grant create table to tablecreate
--将用户mike加入到角色tablecreate中
sp_addrolemember 'tablecreate','mike'
--赋予用户mike对procts表的插入数据权限
grant insert on procts to mike
--撤销用户mike对procts表的权限
revoke insert on procts from mike
--察看角色信息
sp_helprole tablecreate
--察看角色包括的成员
sp_helprolemember tablecreate
--在角色tablecreate中删除成员mike
sp_droprolemember 'tablecreate','mike'
--删除角色tablecreate
sp_droprole tablecreate
--删除数据库用户账户
sp_revokedbaccess 'mike'
--删除登录帐号
sp_droplogin 'mike'
6. sql练习:查询所有课程成绩小于60 分的同学的学号、姓名;
(2)这么写坑定不对,这么写得出的答案是“上过那个老师的课程的学生”而不是“上过那个老师所有课程的学生”,而且那个答案效率太低,还不如这个:
select sno,sname from student
where sno in(select sno from sc
where cno in (select cno from course
where tno in (select tno from teacher where tname='谌燕')));