深圳大学数据库实验一Database Command and SQL

发布时间 2023-11-30 02:12:11作者: jannleo

一、实验目的:

  1. 了解DBMS系统的功能、软件组成;

    2、掌握利用SQL语句定义、操纵数据库的方法。

二、实验要求:

1、在课外安装相关软件并浏览软件自带的帮助文件和功能菜单,了解DBMS的功能、结构;
2、创建一个有两个关系表的数据库;

3、数据库、关系表定义;

4、学习定义关系表的约束(主键、外键、自定义);

5、了解SQL的数据定义功能;

6、了解SQL的操纵功能;

7、 掌握典型的SQL语句的功能;

8、 了解视图的概念;

三、实验设备:

计算机、数据库管理系统如SQL SERVER, DB2,Oracle 等软件。

四、实验内容

EMP:

EMPNO ENAME JOB MGR(经理) HIREDATE SAL COMM DEPTNO
7369 SMITH CLERK 7902 17-Dec-90 13750 20
7499 ALLEN SALESMAN 7698 20-FEB-89 19000 6400 30
7521 WARD SALESMAN 7698 22-FEB-93 18500 4250 30
7566 JONES MANAGER 7839 02-APR-89 26850 20
7654 MARTIN SALESMAN 7698 28-SEP-97 15675 3500 30
7698 BLAKE MANAGER 7839 01-MAY-90 24000 30
7782 CLARK MANAGER 7839 09-JUN-88 27500 10
7788 SCOTT ANALYST 7566 19-APR-87 19500 20
7839 KING PRESIDENT 17-NOV-83 82500 10
7844 TURNER SALESMAN 7698 08-SEP-92 18500 6250 30
7876 ADAMS CLERK 7788 23-MAY-96 11900 20
7900 JAMES CLERK 7698 03-DEC-95 12500 30
7902 FORD ANALYST 7566 03-DEC-91 21500 20
7934 MILLER CLERK 7782 23-JAN-95 13250 10
3258 GREEN SALESMAN 4422 24-Jul-95 18500 2750 50
4422 STEVENS MANAGER 7839 14-Jan-94 24750 50
6548 BARNES CLERK 4422 16-Jan-95 11950 50

DEPT:

DEPTNO DNAME LOC
10 ACCOUNTING LONDON
20 RESEARCH PRESTON
30 SALES LIVERPOOL
40 OPERATIONS STAFFORD
50 MARKETING LUTON

按照实验指导讲义完成老师要求的练习题目,必须写出sql语句以及运行结果。(示例如Exercise2 q4,后面按照这个格式完成练习。)

一、CentOS7安装

1、下载好centos7的iso文件后,在vmware点击新建虚拟机(图1-1),点击自定义配置,点击下一步。

图1-1

  1. 继续点击下一步(图1-2),然后选择安装程序光盘镜像文件(图1-3),点击下一步。

图1-2

图1-3

3、定义好虚拟机名称与路径后(图1-4),点击下一步。

图1-4

4、定义处理器数量与内核数量,尽量往内核总数8设置(图1-5)。

图1-5

5、定义虚拟机内存,选择最大内存(图1-6)。

图1-6

6、选择虚拟机网络类型为桥接网络(图1-7),点击下一步。

图1-7

7、接下来三个选择默认,下一步(图1-8、图1-9、图1-10)。

图1-8

图1-9

图1-10

8、设置磁盘容量为80G,点击下一步(图1-11),默认再点击下一步(图1-12),点击完成即可(图1-13)。

图1-11

图1-12

图1-13

9、为了让虚拟机启动更快,删除掉原本不需要使用的硬件,编辑虚拟机设置--删-USB控制器、声卡、打印机(图1-14)。

图1-14

10、点击开启虚拟机后,按两次回车,开始安装(图1-15),等待即可。

图1-15

11、选择中文->简体中文,点击continue(图1-16)(这里是后来改的,因为中文更方便点,下面步骤都是英文的,本人已经重装好几回了QAQ)。

图1-16

12、选择installation destination,因为不选就不能进行下一步(图1-17),而且我们直接采用默认安装方式,即没有图形化界面的centos7。

图1-17

13、选择自己创建的磁盘,然后选择I will configure partitioning,最后点击Done(图1-18)。

图1-18

14、点击左下角的+号,在mount point中分别选择/boot、/、swap,拟按一下配置配置虚拟机(图1-19、图1-20):

/boot:1024M,标准分区格式创建。

swap:4096M,标准分区格式创建。

/:剩余所有空间,采用lvm卷组格式创建。

图1-19

图1-20

15、点击accept changes(图1-21)。

图1-21

16、点击host name选项,设置主机名(图1-22、图1-23)。

图1-22

图1-23

17、最后点击begin installation即可开始安装(图1-24),在安装时可以设置root密码(图1-25)。

图1-24

图1-25

18、完成后,重启虚拟机,输入账号root 与密码,最后成功安装centos7(图1-26)!

图1-26

二、CentOS7内PostgreSQL安装

1、在安装完本地npm后,在postgre官网运行脚本即可安装postgresql(图2-1、图2-2)。

图2-1

图2-2

2、安装完成后,输入su – postgres即可进入bash界面,然后通过使用psql语句登录postgres的用户,即可进入数据库(图2-3)。

图2-3

3、vi /var/lib/pgsql/13/data/postgresql.conf ,然后修改如下(图2-4),并在/var/lib/pgsql/13/data/pg_hba.conf 下修改添加信任,后重启服务并关闭防火墙(图2-5)。设置环境变量(图2-6)。

图2-4

图2-5

图2-6

4、利用netstat –tunlp发现5432端口已启用,且为postmaster(图2-7)。

图2-7

5、进入postgres,创建用户jannleo,并创建数据库,设置密码(图2-8)。

图2-8

6、通过bash输入psql –U jannleo –d myfirstdb –h 127.0.0.1 –p 5432 即可进入数据库(图2-9)。

图2-9

三、数据导入

1、建立表Department,以此来存放部门(图3-1)。

图3-1

2、插入数据如下(图3-2),依次插入即可,但是略显麻烦,如图3-3,显示插入成功!图3-4为插入完成后Department表的表项。

图3-2

图3-3

图3-4

3、创建Employment表(图3-5),并导入数据(图3-6)。

图3-5

图3-6

4、修改表名Employment为Employment2017303010(图3-7),修改表名Department为Department2017303010(图3-8)。

图3-7

图3-8

5、确认Department2017303010表主键为DEPTNO,确认Employment2017303010表主键为EMPNO,外键为DEPTNO与Department2017303010(DEPTNO)链接,由于我在建表的时候就已经设置了主键,故在此只用设置外键。

  • 外键:如果公共关键字在一个关系中是主关键字,那么这个公共关键字被称为另一个关系的外键。由此可见,外键表示了两个关系之间的相关联系。以另一个关系的外键作主关键字的表被称为主表,具有此外键的表被称为主表的从表。外键又称作外关键字。
  • 主键:是被挑选出来,作表的行的惟一标识的候选关键字。一个表只有一个主关键字。主关键字又可以称为主键。 主键可以由一个字段,也可以由多个字段组成,分别成为单字段主键或多字段主键。

图3-9

6、为表添加约束(图3-10),经过分析得知,EMP表中的EMPNO为主键,不用约束,ENAME为唯一约束,JOB、HIREDATE、SAL、DEPTNO为非空约束。

图3-10

四、做题

1、List all information about the employees.

语句:

Select * from Employment2017303010;

返回:(图4-1)

图4-1

2、List only the following information from the EMP table ( Employee name, employee number, salary, department number)

语句:

Select ENAME,EMPNO,SAL,DEPTNO from Employment2017303010;

结果:(图4-2)

图4-2

3、List all the jobs in the EMP table eliminating duplicates.

语句:

select distinct JOB from Employment2017303010;

结果:(图4-3)

图4-3

4、What is the name, job title and employee number of the person in department 20 who earns more than £25000?

语句:

select ENAME,JOB,EMPNO from Employment2017303010 where SAL >= 25000 and DEPTNO = 20 order by SAL desc;

结果:(图4-4)

图4-4

5、Find any Clerk who is not in department 10.

语句:

select * from Employment2017303010 where JOB = ‘CLERK’ and DEPTNO <> 10;

结果:(图4-5)

图4-5

6、Find all the employees who earn between £15,000 and £20,000.

Show the employee name, department and salary.

语句:

select Employment2017303010.ENAME,Department2017303010.DNAME,Employment2017303010.SAL from Employment2017303010 inner join Department2017303010 on Employment2017303010.DEPTNO = Department2017303010.DEPTNO where SAL between 15000 and 20000;

结果:(图4-6)

图4-6

7、Find all the employees whose last names end with S

语句:

select * from Employment2017303010 where ENAME like ‘%S’;

结果:(图4-7)

图4-7

8、List only those employees who receive commission.

语句:(由于我前面对COMM项进行了默认约束为0,所以COMM不等于0即可)

select * from Employment2017303010 where COMM <> 0;

结果:(图4-8)

图4-8

9、Find the name, job, salary , hiredate and department number of all

employees in ascending order by their salaries.

语句:

select ENAME,JOB,SAL,HIREDATE,DEPTNO from Employment2017303010 order by SAL asc;

结果:(图4-9)

图4-9

10、Order employees in department 30 who receive commision, in

ascending order by commission.

语句:

select * from Employment2017303010 where COMM <> 0 and DEPTNO = 30 order by COMM asc;

结果:(图4-10)

图4-10

11、Find all the salesmen in department 30 who have a salary greater than

or equal to £18000.

语句:

select * from Employment2017303010 where DEPTNO = 30 and job = ‘SALESMAN’ and sal >= 18000;

结果:(图4-11)

图4-11

五.问题分析(碰到什么问题,如何解决)

1、在配置centos磁盘分区时,遇到了小键盘无法输入数字的问题,换了台式电脑的键盘,按了NumLock才修好。

2、在配置centos最后一步,配网时遇到了问题,不管是桥接模式还是NAT模式,都ping不上网址(图5-1)。

图5-2

3、配置本地yum时,发现没有local.repo(图5-3),后来发现,需要切换国内的npm源,我先利用本地yum下载了wget(图5-4),备份一下之前的配置文件mv ./CentOS-Base.repo ./CentOS-Base.repo.bak(图5-5)。然后通过用wget下载163的源,且将其设置为默认源(图5-6),最后重新生成缓存即可(图5-7)。

图5-3

图5-4

图5-5

图5-6

图5-7

4、由于我安装设置的桥接模式,但是无论安装的时候还是安装完成都连接不上以太网(图5-4),最后终于让我找到了破绽,打开任务管理器,查看到以太网能上网的网卡是叫USB的而不是无线网的网卡(图5-6)!

图5-4

图5-5

图5-6

5、在设置好4之后,我开始设置静态地址,由于我的ip地址是172.29.15.28,所以不能和教程一样,但是配置完后出现以下情况(图5-7),最后是把虚拟机改成NAT模式就行了。。。

图5-7

图5-8

6、在进入创建好的用户的数据库时,显示previous connection kept(图5-9),后面才知道,当时根本没有创建成功用户!因为我少了个分号(图5-10),真的很无语。

图5-9

图5-10

六.实验心得

1、mysql配置环境一直都是十分复杂麻烦的步骤,尤其是当电脑里有两个mysql的软件时,配置环境发生的冲突就显得十分的不可理解。

2、通过上老师的课了解到,mysql虽然目前免费,但是他们想卡你脖子就卡你脖子,因为已经被oracle商业化了,所以开发一个数据库势在必行,而且学习mysql已经有点晚了,所以我非常认同老师说的改革数据库课程。

3、在这个实验报告中,最让我头疼,最花时间的不是做题,而是postgresql的环境配置,为了实现centos的postgre-13,我甚至花了三天来进行配环境,一是因为我对centos完全陌生,导致安装过程复杂而且还重复了好多次,二是我对postgresql的陌生,导致重装了postgre-12又重装了postgre-13。

4、通过这个实验,我深刻体会到了环境搭建时的心态的重要性,不要动不动就重装,会导致很多环境冲突,并且深刻了解了centos在vmware上面的配网,熟悉了桥接模式与NAT模式的配置,并知道了他们的区别。

5、明白了主键与外键的区别,如果要设置外键,主键是必须要先设置的,然后外键也只能设置其他表的主键,否则不成功。

6、在这个实验进行时,我也深刻体会到了官方文档的重要性,什么csdn都不如一个官方文档,只要你会看官方文档,你什么都能学会。

7、这个实验至少耗费了我一个星期的学习时间,但是我觉得值,因为我不仅学会了postgresql的相关语句,也学会了搭配centos与基于centos的postgre环境的搭配,更明白了postgre作为开源数据库需要改进的许多地方,比如说没加冒号(;)不会报错等等。