实验一 安装MySQL、Navicat
因为自己有一台云服务器,所以使用的是部署在云服务器上的MySQL,在linux服务器上的安装过程就略过了,我在云服务器上配置好账号密码即可
在本地远程连接云服务器的MySQL,我使用的是Navicat,这是一款非常好用且功能强大的数据库管理软件,支持市面上主流的数据库,安装成功后连接上我的云服务器的数据库后结果如下图
实验二 使用MySQL建库、表
-
启动数据库服务如下,其中的数据库是我服务器中其他应用部署的数据库
-
创建一个Demo数据库
-
在数据库Demo上,建立如下所示的表customer:
字段名 类型 长度 含义 customid varchar 17 顾客编号 name varchar 10 姓名 sex varchar 2 性别 age int 4 年龄 xfg dec 10,2 消费金额 address varchar 50 地址 memo varchar 100 备注 设计表:
完成:
实验三 MySQL查询分析器
-
启动查询分析器:
-
用SQL语言建表student
字段名 类型 长度 含义 id varchar 17 学生编号 name varchar 10 姓名 sex varchar 2 性别 age integer 年龄 score numeric 6,2 总成绩 SQL语句:
create table students ( id varchar(17) comment '学生编号', name varchar(10) comment '姓名', sex varchar(2) comment'性别', age integer comment'年龄', score numeric(6,2) comment '总成绩' )
点击运行后:
查看类型和备注是否也创建:
-
用SQL语言向表student插入如下6条记录:
A0001 赵一 男 20 580.00 B0002 钱二 女 19 540.00 C0003 孙三 男 21 555.50 D0004 李四 男 22 480.00 E0005 周五 女 20 495.50 F0006 吴六 男 19 435.00 SQL语句:
insert into students values ('A0001','赵一','男',20,580.00), ('B0002','钱二','女',19,540.00), ('C0003','孙三','男',21,555.50), ('D0004','李四','男',22,480.00), ('E0005','周五','女',20,495.50), ('F0006','吴六','男',19,435.00)
运行成功:
结果:
-
练习查询语句,查找年龄大于等于20岁,成绩低于500分的记录:
SQL语句:
select * from students where age>=20&&score<500
结果:
实验四 SQL语言的DDL
-
用Create Table建表aa,表结构如下所示:
字段名 类型 长度 含义 Aa1 Varchar 20 字段1 Aa2 Int 字段2 Aa3 Dec 10,2 字段3 SQL语句:
create table aa( Aa1 varchar(20) comment'字段1', Aa2 int comment'字段2', Aa3 dec(10,2) comment'字段3' )
结果:
-
用Create Table建表bb,表结构如下所示:
字段名 类型 长度 含义 Bb1 Varchar 30 字段1 Bb2 Int 字段2 Bb3 Dec 6,2 字段3 SQL语句:
create table bb( Bb1 varchar(30) comment '字段1', Bb2 int comment '字段2', Bb3 dec(6,2) comment '字段3' )
结果:
-
用Drop Table删除表aa:
SQL语句:
drop table aa
结果:
-
用Alter Table修改表bb,添加一个字段Bb4,类型Varchar,长度20:
SQL语句:
alter table bb add Bb4 varchar(20)
结果:
-
用Create View对表Bb的bb1和Bb4建立一个视图Viewbb,字段名为Viewbb1和Viewbb2:
SQL语句:
create view Viewbb( Viewbb1,Viewbb2) as select Bb1,Bb2 from bb
结果:
-
Drop View删除视图Viewbb:
SQL语句:
drop view Viewbb
-
用Create Index对表bb的Bb3字段建立一个升序索引,索引名Index_bb:
SQL语句:
create index Index_bb on bb(Bb3)
-
用Drop Index删除索引Index_bb:
SQL语句:
drop index Index_bb on bb
-
将以上的SQL语言存盘,以备老师检查:
实验五 SQL语言的DML
-
打开数据库SQL Server 2000的查询分析器,用Create Table建表cc,表结构如下所示:
字段名 类型 长度 含义 Cc1 Varchar 20 字段1 Cc2 Int 字段2 Cc3 Dec 10,2 字段3 Cc4 Varchar 60 字段4 SQL语句:
create table cc( Cc1 varchar(20) comment '字段1', Cc2 int comment '字段2', Cc3 dec(10,2) comment '字段3', Cc4 varchar(60) comment '字段4' )
-
用INSERT语句对表cc插入6条记录:
Cc1 Cc2 Cc3 Cc4 赵一 20 580.00 重邮宿舍12-3-5 钱二 19 540.00 南福苑5-2-9 孙三 21 555.50 学生新区21-5-15 李四 22 480.00 重邮宿舍8-2-22 周五 20 495.50 学生新区23-4-8 吴六 19 435.00 南福苑2-5-12 SQL语句:
insert into cc (Cc1,Cc2,Cc3,Cc4) values ('赵一','20','580.00','重邮宿舍12-3-5'), ('钱二','19','540.00','南福苑5-2-9'), ('孙三','21','555.50','学生新区21-5-15'), ('李四','22','480.00','重邮宿舍8-2-22'), ('周五','20','495.50','学生新区23-4-8'), ('吴六','19','435.00','南福苑2-5-12')
结果:
-
用UPDATE语句,将表cc中cc2小于等于20的记录,把cc3字段加5
SQL语句:
update cc set cc3=cc3+5 where cc2<=20
更新前:
更新后:
-
用DELETE语句将表cc中cc2大于等于20和cc3大于等于500的记录删除
SQL语句:
delete from cc where Cc2>=20 and Cc3>=500
删除前:
删除后:
-
将以上的SQL语言存盘,以备老师检查
实验六 DML的数据查询
-
打开数据库SQL Server 2000的查询分析器,用Create Table建表Student,表结构如下所示:
字段名 类型 长度 含义 ID Varchar 20 学号 Name Varchar 10 姓名 Age Int 年龄 Department Varchar 30 所在系 SQL语句:
create table student( ID varchar(20) comment '学号', Name varchar(10) comment '姓名', Age int comment '年龄', Department varchar(30) comment '所在系' )
-
用Create Table建表Course,表结构如下所示
字段名 类型 长度 含义 CourseID Varchar 15 课程号 CourseName Varchar 30 课程名 CourseBefore Varchar 15 先行课 SQL语句:
create table Course( CourseID varchar(15) comment'课程号', CourseName varchar(30) comment'课程名', CourseBefore varchar(15) comment'先行课' )
-
用Create Table建表Choose,表结构如下所示
字段名 类型 长度 含义 ID Varchar 20 学号 CourseID Varchar 30 课程号 Score Dec 5,2 成绩 SQL语句:
create table Choose( ID varchar(20) comment'学号', CourseID varchar(30) comment'课程号', Score Dec(5,2) comment '成绩' )
-
用INSERT语句向表Student中插入3条记录
ID Name Age Department 00001 张三 20 计算机系 00002 李四 19 计算机系 00003 王五 21 计算机系 SQL语句:
insert into student (ID,Name,Age,Department) values ('00001','张三','20','计算机系'), ('00002','李四','19','计算机系'), ('00003','王五','21','计算机系')
结果:
-
INSERT语句向表Course中插入3条记录:
CourseID CourseName CourseBefore C1 计算机引论 - C2 PASCAL语言 C1 C3 数据结构 C2 SQL语句:
insert into Course(CourseID,CourseName,CourseBefore) values ('C1','计算机引论',''), ('C2','PASCAL语言','C1'), ('C3','数据结构','C2')
结果:
-
用INSERT语句向表Choose中插入7条记录:
ID CourseID Score 00001 C1 95 00001 C2 80 00001 C3 84 00002 C1 80 00002 C2 85 00003 C1 78 00003 C3 70 SQL语句:
insert into Choose(ID,CourseID,Score) values ('00001', 'C1', '95'), ('00001', 'C2', '80'), ('00001', 'C3', '84'), ('00002', 'C1', '80'), ('00002', 'C2', '85'), ('00003', 'C1', '78'), ('00003', 'C3', '70')
结果:
-
用SELECT语句求计算机系学生的学号和姓名
SQL语句:
select Name,ID from student where Department='计算机系'
结果:
-
用SELECT语句求学生的学号、姓名、选的课程名及成绩
SQL语句:
select student.ID,Name,CourseName,Score from student,Choose,Course where student.ID=Choose.ID and Choose.CourseID=Course.CourseID
结果:
-
用SELECT语句求C1课程的成绩低于张三的学生的学号和成绩
SQL语句:
select student.ID,Score from student,Choose where student.ID=Choose.ID and CourseID='C1' and Score <( select Score from Choose,student where Name='张三' and CourseID='C1' and student.ID=Choose.ID )
结果:
-
用SELECT语句求选了C2课程并且也选了C3课程的学生的学号
SQL语句:
select ID from Choose where CourseID='C2' and ID=any( select ID from Choose where CourseID='C3' )
结果:
-
将以上的SQL语言存盘,以备老师检查
实验七 SQL语言的DCL
-
用Windows2000的Administrator(系统管理员)用户登录系统,建立一个新用户DCL,用户名和口令都相同
-
打开数据库SQL Server 2000的查询分析器,用GRANT语句将ALL PRIVILEGES的系统特权授给用户DCL
SQL语句:
grant ALL PRIVILEGES on *.* to DCL
-
注销用户Administrator,用DCL登录系统,打开数据库SQL Server 2000的查询分析器,用CREATE DATABASE语句建立一个新的数据库DCLDemo
SQL语句:
create database DCLDemo
结果:
-
在数据库DCLDemo上建立一个表Abc,表结构如下图所示
字段名 类型 长度 含义 A1 Varchar 20 字段1 B2 Dec 4,2 字段2 C3 Int 字段3 SQL语句:
create table Abc( A1 varchar(20) comment '字段1', B2 Dec(4,2) comment '字段2', C3 int comment '字段3' )
-
在表Abc中插入1条记录,如下图所示:
A1 B2 C3 DCL测试 90.5 30 SQL语句:
insert into Abc(A1,B2,C3)values ('DCL测试','90.5','30')
结果:
-
注销用户DCL,用Administrator登录系统,用REVOKE语句将用户DCL在表Abc中修改A1的权利收回
SQL语句:
revoke all on *.* from DCL
实验八 SQL语言综合练习
-
打开数据库SQL Server 2000的查询分析器,用Create Table建表Exam,表结构如下图所示:
字段名 类型 长度 含义 id varchar 17 学生编号 name varchar 10 姓名 sex varchar 2 性别 age integer 年龄 score numeric 6,2 总成绩 address varchar 50 地址 memo varchar 100 备注 SQL语句:
create table Exam( id varchar(17) comment'学生编号', name varchar(10) comment'姓名', sex varchar(2) comment'性别', age int comment'年龄', score numeric(6,2) comment'总成绩', address varchar(50) comment'地址', memo varchar(100) comment'备注' )
-
用Insert Into语句向Exam表中添加6条记录,记录内容如下图所示:
A0001 赵一 男 20 580.00 重邮宿舍12-3-5 学习委员 B0002 钱二 女 19 540.00 南福苑5-2-9 班长 C0003 孙三 男 21 555.50 学生新区21-5-15 优秀共青团员 D0004 李四 男 22 480.00 重邮宿舍8-2-22 暂无相关信息 E0005 周五 女 20 495.50 学生新区23-4-8 暂无相关信息 F0006 吴六 男 19 435.00 南福苑2-5-12 暂无相关信息 SQL语句:
insert into Exam(id,name,sex,age,score,address,memo)values ('A0001','赵一','男','20','580.00','重邮宿舍12-3-5','学习委员'), ('B0002','钱二','女','19','540.00','南福苑5-2-9','班长'), ('C0003','孙三','男','21','555.50','学生新区21-5-15','优秀共青团员'), ('D0004','李四','男','22','480.00','重邮宿舍8-2-22','暂无相关信息'), ('E0005','周五','女','20','495.50','学生新区23-4-8','暂无相关信息'), ('F0006','吴六','男','19','435.00','南福苑2-5-12','暂无相关信息')
结果:
-
对表Exam的Score字段建立一个名为IndexScore的升序索引
SQL语句:
create unique index IndexScore on Exam(Score ASC)
-
建立视图ViewExam,字段ViewExam1和ViewExam2分别对应表Exam的Name和Address字段
SQL语句:
create view ViewExam(ViewExam1,ViewExam2) as select Name,Address from Exam
结果:
-
将jm.sql、zjm.sql、dhshow.sql拷贝到自己的计算机上,在SQL Server 2000的查询分析器中执行该SQL语句,在数据库中建立jm、zjm、dhshow等三个表。dhshow表执行的时间要长一些,请耐心等候,大约需要1-2分钟,三个表的字段含义如下:
Jm表:
Jmbm Jmhz Jmbz 局名编码 局名汉字说明 局名标志 Zjm表:
Zjmbm Zjmhz Jmbm Zjmbz 子局名编码 子局名汉字说明 局名编码 子局名标志 Dhshow表:(其它字段与本次测验无关,未给出相关含义):
Dhh Sl1 Sl3 Sl39 Sl40 电话号码 长话费 市话费 地区编码 子局名编码 表间关联:Jm表中的jmbm和zjm表中的jmbm是相等的;Zjm表中的zjmbm和dhshow表中的sl40是相等的
表说明:dhshow表中的sl1和sl3字段的计费单位是人民币分
因没有数据,根绝后面问题只构造了需要的数据,结果如下:
-
用SELECT语句,求拉萨地区长话消费平均是多少分人民币
SQL语句:
select AVG(Sl1) from Dhshow where Sl39='拉萨'
结果:
-
用SELECT语句,求阿里地区市话消费总大于10元人民币并且长话消费不为零的电话号码
SQL语句:
select Dhh from Dhshow where Sl1!=0 and (Sl1+Sl3)>10 and Sl39='阿里'
结果: