1、建立Employee 和 Department 两个表格
1.1 首先我们应该打开我们的WAMPSEVER来使用,然后接着先建立我们的两个表格,分别是Employee 和 Department
对于建立我们的表格来说,有两种方法。
第一种方法:
首先我们可以利用我们的界面建立我们的表格,并且将我们EMPNO作为我们的主键,这样就可以建立一个Employee空表格了,没有初始值的表格。
第二种方法:
我们还可以用更加专业一点的方法,也就是用SQL语句来完成我们表格的创建。就是可以用CREATE TABLE 语句来创建我们的表,并且设置我们的字段和字段的长度以及类型等。
CREATE TABLE emp (EMPNO INT(4) NOT NULL, ENAME VARCHAR(20) NOT NULL, JOB VARCHAR(20) NOT NULL, MGR INT(4), HIREDATE DATE, SAL INT(10), COMM INT(4), DEPTNO INT(2) NOT NULL, Primary key(EMPNO) )
创建完以后就可以在我们的表上看到我们的结构,结构如下。
我们的Department表格也是同理可以得到我们的结果
CREATE TABLE dept (DEPTNO INT(2) NOT NULL, DNAME VARCHAR(20) NOT NULL, LOC VARCHAR(20) NOT NULL, Primary key(DEPTNO) )
1.2 建立完两个空表以后,我们就需要对我们的空表进行导入数据。
对于导入数据的方法,也有两种方法。
第一种方法:
我们可以通过写SQL语句进行一个数据的INSERT,我们可以一行一行的插入,根据表的特定的格式,用SQL一行一行的插入。
比如这里是插入emp的第一行数据,用一句SQL语句来进行我们的插入
INSERT INTO `emp`(`EMPNO`, `ENAME`, `JOB`, `MGR`, `HIREDATE`, `SAL`, `COMM`, `DEPTNO`) VALUES (7369,"SMITH","CLERK",7902,"1990-12-17",13750,'',20)
从而可以看到,我们已经在我们的EMP表中插入了数据,但是我们有很多条数据,如果我们要进行插入就需要做比较多的操作,而且如果之后遇到了大型的数据,那我们可能需要写很多条来进行插入,那是不现实的,所以我们还可以利用第二种方法。
第二种方法:
我们还可以通过数据库的管理导入工具来进行插入我们的结果,首先,我们应该可以转成数据库可以接受导入的格式。
可以看到,数据库导入只支持几类的格式,我就选择了我较为熟悉的csv格式进行导入。
当我将需要导入的数据复制到一个文本文档中的时候,我发现又很多的空格,我首先将后缀都改成csv,由于csv是一个以逗号分隔的文件,所以我用替换工具,将大部分的空格替换为了我们的逗号,这样就得到一个csv文件。
但是这样做还是不够,因为在我们的数据中还有比较多的空格,所以我再次用替换工具,将所有的空格都替换为空,这样就没有空格了,可以进行导入了。
但是这样的导入有问题,由于我们设了日期的类型,但是这里并不是一个日期类型,所以我们导入进去以后,我们字段是0000-00-00,接着我们就用Excel来打开我们的csv文件,在Excel中有一个非常好的地方,他可以自动检测出我们的日期,并且我们可以自定义我们的日期类型,变成yyyy-mm-dd的结果
接着我们得到的csv文件就可以导入我们的表格里面,他会自动转成SQL语句,然后我们就导入成功了我们需要的数据。
同理得DEPT表格也可以这样做,或者由于我们的DEPT表格比较简单,我们可以用5行的SQL语句也可以完成我们的插入,具体方法类似与EMP表格,两者是大同小异的。
INSERT INTO `dept`(`DEPTNO`, `DNAME`, `LOC`) VALUES (10,"ACCOUNTING","LONDON"); INSERT INTO `dept`(`DEPTNO`, `DNAME`, `LOC`) VALUES (20,"RESEARCH","PRESTON"); INSERT INTO `dept`(`DEPTNO`, `DNAME`, `LOC`) VALUES (30,"SALES","LIVERPOOL"); INSERT INTO `dept`(`DEPTNO`, `DNAME`, `LOC`) VALUES (40,"OPERATIONS","STAFFORD"); INSERT INTO `dept`(`DEPTNO`, `DNAME`, `LOC`) VALUES (50,"MARKETING","LUTON");
这样子,我们的DEPT表格也是成功插入了,两个表格都已经创建并创建好数据了。
CREATE TABLE dept (DEPTNO INT(2) NOT NULL, DNAME VARCHAR(20) NOT NULL, LOC VARCHAR(20) NOT NULL, Primary key(DEPTNO) )
INSERT INTO `emp`(`EMPNO`, `ENAME`, `JOB`, `MGR`, `HIREDATE`, `SAL`, `COMM`, `DEPTNO`) VALUES (7369,"SMITH","CLERK",7902,"1990-12-17",13750,'',20)
INSERT INTO `dept`(`DEPTNO`, `DNAME`, `LOC`) VALUES (10,"ACCOUNTING","LONDON"); INSERT INTO `dept`(`DEPTNO`, `DNAME`, `LOC`) VALUES (20,"RESEARCH","PRESTON"); INSERT INTO `dept`(`DEPTNO`, `DNAME`, `LOC`) VALUES (30,"SALES","LIVERPOOL"); INSERT INTO `dept`(`DEPTNO`, `DNAME`, `LOC`) VALUES (40,"OPERATIONS","STAFFORD"); INSERT INTO `dept`(`DEPTNO`, `DNAME`, `LOC`) VALUES (50,"MARKETING","LUTON");
2、Exercise 1-10
2、 完成EXERCISES 1 对表格的操作,1-21题
Exercise 1.1
2.1 List all information about the employees
第一题还是非常简单的,就是列出EMP表中的所有元素,我们可以利用SQL来Select所有的信息
SELECT * FROM `emp` WHERE 1
Exercise 1.2
2.2 List all information about the departments
第二题就是显示所有的DEPT的信息,我们只需要将表的名字改一下就可以得到
SELECT * FROM `dept` WHERE 1
Exercise 1.3
2.3 List only the following information from the EMP table (Employee name, employee number, salary, department number)
第三题只需要显示EMP表中的所有信息中的EMNO,ENAME,SAL,DEPTNO
SELECT `EMPNO`, `ENAME`, `SAL`, `DEPTNO` FROM `emp` WHERE 1
Exercise 1.4
2.4 List details of employees in departments 10 and 30.
第四题需要我们列出所有DEPT为10或30的所有EMP的信息
SELECT * FROM `emp` WHERE `DEPTNO`=10 OR `DEPTNO`=30
Exercise 1.5
2.5 List all the jobs in the EMP table eliminating duplicates.
我们需要列出所有的JOB,并且保证是不重复的,我们可以利用以下语句,我们需要用到DISTINCT来去重
SELECT DISTINCT `JOB` FROM `emp` WHERE 1
Exercise 1.6
2.6 What are the names of the employees who earn less than £20,000?
我们需要选择出所有SAL<20,000的ENAME,可以利用以下语句完成
SELECT `ENAME` FROM `emp` WHERE `SAL` < 20000
Exercise 1.7
2.7 What is the name, job title and employee number of the person in department 20 who earns more than £25000?
这道题比前面的题条件更多,我们需要列出更多的ENAME,JOB,EMPNO,并且他们的DEPTNO=20并且赚的钱超过25,000
SELECT `EMPNO`, `ENAME`, `JOB` FROM `emp` WHERE `DEPTNO` = 20 AND `SAL` > 25000
Exercise 1.8
2.8 Find all employees whose job is either Clerk or Salesman.
这个题需要我们找到EMP中JOB为Clerk或者是Salesman的
SELECT * FROM `emp` WHERE `JOB`="Clerk" OR `JOB`="Salesman"
Exercise 1.9
2.9 Find any Clerk who is not in department 10.
我们需要找到JOB为Clerk的并且DEPTNO不为10的,这里我们要用到NOT
SELECT * FROM `emp` WHERE `JOB`='CLERK' AND (NOT `DEPTNO` =20)
Exercise 1.10
2.10 Find everyone whose job is Salesman and all the Analysts in department 20.
找到所有JOB为Salesman和所有DEPTNO为20的Analyst,这里相当于我们有两个条件,并且第二个条件还需要多满足一个DEPTNO=20
SELECT * FROM `emp` WHERE (`JOB`='SALESMAN') OR (`DEPTNO`=20 AND `JOB`='ANALYST')