菜芽君最近正在学习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或空字符,需要把它改成一个空格的字符串。 |