菜芽君最近正在学习SQL语句,发现很多B站以及网上讲解的案例都是使用Oracle数据库的Scott库这个案例,本来想下载一份数据直接导入,但是下载的都是mdf文件没法通过Navicat导入,同时找的很多SQL文件导入时也提示错误没法成功导入,浪费了挺多时间,索性建表录入数据都自己动手(反正数据内容不多)

racle数据库经典案例Scott库一共有四张表:dept,emp,salgrade,bonus,其中emp,dept,salgrade表都有数据,Bonus这张表没有数据内容。第二部分写MySQL与Oracle数据库常见数据类型对应关系,供大家参考。

一、创建Scott库的四张表录入数据

这里把创建标的语句和录入数据语句提供给大家,方便学习使用。

1.创建Dept部门表

名称 类型 描述
DEPTNO NOT NULL NUMBER(2) 表示部门编号,有两位数字所组成
DNAME VARCHAR(14) 部门名称,最多由14个字符组成,一个中文占有三个字符
LOC VARCHAR(13) 部门所在位置
--创建Dept部门表
create table Dept(Deptno int,Dname varchar(14),Loc varchar(13),PRIMARY KEY(deptno));

--向Dept表插入数据
INSERT INTO Dept VALUES (10,'ACCOUNTING','NEW YORK');
INSERT INTO Dept VALUES (20,'RESEARCH','DALLAS');
INSERT INTO Dept VALUES (30,'SALES','CHICAGO');
INSERT INTO Dept VALUES (40,'OPERATIONS','BOSTON');

2.创建Emp雇员表

名称 类型 描述
EMPNO NUMBER(4) 雇员编号
ENAME VARCHAR2(10) 雇员姓名
JOB VARCHAR2(9) 部门所在位置
MGR NUMBER(4) 雇员对应的领导编码
HIREDATE DATE 雇员的雇佣日期
SAL NUMBER(7,2) 雇员的基本工资,小数点最多占有两位,整数占有五位。
COMM NUMBER(7,2) 奖金
DEPTNO NUMBER(2) 部门编号,指的是每位雇员的部门信息。
--创建Emp雇员表
create table Emp(Empno int,Ename nvarchar(10),Job varchar(9),Mgr int,Hiredate date,Sal decimal(7,2),Comm decimal(7,2),Deptno int,primary key(empno),foreign key(Deptno) references Dept(Deptno));

--向Emp表,插入数据
INSERT INTO Emp VALUES (7369,'SMITH','CLERK',7902,'1980-12-17',800,NULL,20);
INSERT INTO Emp VALUES (7499,'ALLEN','SALESMAN',7698,'1981-2-20',1600,300,30);
INSERT INTO Emp VALUES (7521,'WARD','SALESMAN',7698,'1981-2-22',1250,500,30);
INSERT INTO Emp VALUES (7566,'JONES','MANAGER',7839,'1981-4-2',2975,NULL,20);
INSERT INTO Emp VALUES (7654,'MARTIN','SALESMAN',7698,'1981-9-28',1250,1400,30);
INSERT INTO Emp VALUES (7698,'BLAKE','MANAGER',7839,'1981-5-1',2850,NULL,30);
INSERT INTO Emp VALUES (7782,'CLARK','MANAGER',7839,'1981-6-9',2450,NULL,10);
INSERT INTO Emp VALUES (7788,'SCOTT','ANALYST',7566,'87-7-13',3000,NULL,20);
INSERT INTO Emp VALUES (7839,'KING','PRESIDENT',NULL,'1981-11-17',5000,NULL,10);
INSERT INTO Emp VALUES (7844,'TURNER','SALESMAN',7698,'1981-9-8',1500,0,30);
INSERT INTO Emp VALUES (7876,'ADAMS','CLERK',7788,'87-7-13',1100,NULL,20);
INSERT INTO Emp VALUES (7900,'JAMES','CLERK',7698,'1981-12-3',950,NULL,30);
INSERT INTO Emp VALUES (7902,'FORD','ANALYST',7566,'1981-12-3',3000,NULL,20);
INSERT INTO Emp VALUES (7934,'MILLER','CLERK',7782,'1982-1-23',1300,NULL,10);

3.创建Salgrade工资等级表

名称 类型 描述
GRADE NUMBER 工资的等级
LOSAL NUMBER 此等级的最低工资
JOB NUMBER 此等级的最高工资
--创建 scott 数据库中的 salgrade 表
create table Salgrade(Grade int,Losal int,Hisal int);

--向 salgrade 表插入数据
INSERT INTO Salgrade VALUES (1,700,1200);
INSERT INTO Salgrade VALUES (2,1201,1400);
INSERT INTO Salgrade VALUES (3,1401,2000);
INSERT INTO Salgrade VALUES (4,2001,3000);
INSERT INTO Salgrade VALUES (5,3001,9999);

4.创建Bonus工资表

名称 类型 描述
ENAME VARCHAR2(10) 雇员姓名
JOB VARCHAR2(9) 雇员职位
SAL NUMBER 雇员工资
COMM NUMBER 雇员奖金
--创建Bonus工资表
create table Bonus(Ename varchar(10),Job varchar(9),Sal decimal(7,2),Comm decimal(7,2);

二、MySQL与Oracle数据库常见数据类型对应关系

编号 ORACLE MYSQL 注释
1 NUMBER int/DECIMAL DECIMAL就是NUMBER(10,2)这样的结构INT就是是NUMBER(10),表示整型;MYSQL有很多类int型,tinyint mediumint bigint等,不同的int宽度不一样
2 Varchar2(n) varchar(n)
3 Date DATATIME 日期字段的处理MYSQL日期字段分DATE和TIME两种,ORACLE日期字段只有DATE,包含年月日时分秒信息,用当前数据库的系统时间为 SYSDATE, 精确到秒,或者用字符串转换成日期型函数TO_DATE(‘2001-08-01','YYYY-MM-DD')年-月-日 24小时:分钟:秒的格式YYYY-MM-DD HH24:MI:SS TO_DATE()还有很多种日期格式, 可以参看ORACLE DOC.日期型字段转换成字符串函数TO_CHAR(‘2001-08-01','YYYY-MM-DD HH24:MI:SS')日期字段的数学运算公式有很大的不同。MYSQL找到离当前时间7天用 DATE_FIELD_NAME > SUBDATE(NOW(),INTERVAL 7 DAY)ORACLE找到离当前时间7天用 DATE_FIELD_NAME >SYSDATE - 7;MYSQL中插入当前时间的几个函数是:NOW()函数以`'YYYY-MM-DD HH:MM:SS'返回当前的日期时间,可以直接存到DATETIME字段中。CURDATE()以'YYYY-MM-DD'的格式返回今天的日期,可以直接存到DATE字段中。CURTIME()以'HH:MM:SS'的格式返回当前的时间,可以直接存到TIME字段中。例:insert into tablename (fieldname) values (now())而oracle中当前时间是sysdate
4 NULL NULL 空字符的处理MYSQL的非空字段也有空的内容,ORACLE里定义了非空字段就不容许有空的内容。按MYSQL的NOT NULL来定义ORACLE表结构, 导数据的时候会产生错误。因此导数据时要对空字符进行判断,如果为NULL或空字符,需要把它改成一个空格的字符串。