mysql和oracle哪个简单,mysql和Oracle的简单比较

mysql和Oracle的简单比较

localhost   pda   varchar2   自连接   smi   ins   修改字段   条件

ORA-27101: shared memory realm does not exist 解决方法:

1、用 CMD 进入命令行 2、sqlplus /nolog3、conn / as sysdba4、startup

首先介绍一下 SQL92/99 标准的四大分类

DML(数据操纵语言):select,

insert,

update,

delete

DDL(数据定义语言):create table,

alert table,

drop table,

truncate table

DCL(数据控制语言):grant权限to scott,

revoke权限fromscott

TCL(事务控制语言):commit,

rollback,

下面会分别用类似的需求体现 mysql 和 Oracle 的区别

mysql 创建数据库:

create database xxx;

在 Oracle 中是创建表空间

create tablespace xxx;

-- 指定存放空间 datafile 'C:xxx.dbf'-- 指定大小size 100m-- 大小满了自动增长 autoextend on-- 每次自动增长的大小 next 10m

创建表 mysql 和 oracle 是一样的

create table 表名 {字段名 类型 (长度) [约束],..........}

但是他们的类型各不相同:

mysql:varchar(n) 字符串int 整型double 浮点date 时间

oracle:

char: 固定长度的字符类型, 最多存储 2000 个字节varchar2: 可变长度的字符类型, 最多存储 4000 字节LONG: 大文本类型, 最大可以存储 2 个 Gnumber: 数值类型number(5) 最大可以存 99999number(5,2) 最大可以存 999.99date: 日期时间, 精确到秒

mysql 修改表结构alter tablecategoryadd'desc'varchar(20);

代表给 category 这个表添加一个字符串长度为 20 的名为 desc 的字段

Oracle 修改表结构alter tablecategoryadd(desc varchar2(20));

同上

mysql 修改字段alter tablecategory change'desc'descriptionvarchar(30);

将 desc 这一列的字段的字符长度改为 30

Oracle 修改字段alter tablecategory modify(desc varchar2(30));

同上

mysql 删除字段alter tablecategorydrop desc;

删除 category 表中 desc 这列

Oracle 删除字段alter tablecategorydrop column desc;

同上

mysql 和 Oracle 的增删改 SQL 语句都一样

插入记录 (insert)insert intocategory(cid,cname)values(1,'xxx');

代表向 category 表中的 cname 列插入 xxx 数据

修改数据 (update)updatecategorysetcname=yyywhereid=1;

代表将 category 表中 id 为 1 的 cname 字段改为 yyy

删除数据 (delete)deletefromcategorywhereid=1;

代表删除 category 表中的 id 为一的字段数据

mysql 和 Oracle 的 jdbc 连接

首先是 OracleOracle 导入一个 ojdbc14.jar 的包反射加载驱动为: oracle.jdbc.driver.OracleDriver获取连接: jdbc:oracle:thin:@192.168.80.10:1521:orcl

下面是 mysql

反射加载驱动为: com.mysql.jdbc.Driver获取连接: jdbc:mysql://localhost:3306/test

下面是 mysql 和 Oracle 共有的属性, 主要是查询语句

这里使用的是 Scott 用户在 Oracle 中示范

基本查询:(单表查询)

查询 emp 表的所有内容select*fromemp;

查询 emp 表的不重复的工作selectdistinctjobfromemp;

查询员工的编号, 姓名, 月薪, 年薪selectempno,

ename,

sal,

sal*12fromemp;

使用 where 语句查询:

查询 emp 表中 20 号部门的员工信息select*fromempwheredeptno=20;

查询姓名是 SMITH 的员工,字符串使用'',内容大小写敏感select*fromempwhereename='SMITH';

范围查询:

查询工资大于 1500 的员工select*fromempwheresal>1500;

查询薪水在 1300 到 1600 之间的员工,包括 1300 和 1600select*fromempwheresalbetween1300and1600;

查询不是 20 号或 30 号部门的员工select*fromempwheredeptnonotin(30,20);

like 关键字:

查询姓名以大写字母 N 结束的员工select*fromempwhereenamelike'%N';

空值查询:

查询佣金为 null 的员工select*fromempwherecommisnull;

and 和 or 使用:

查询无佣金且工资大于 1500 的员工select*fromempwhere(commisnull)and(sal>1500);

查询职位是 "MANAGER" 或职位不是 "ANALYST" 的员工select*fromempwhere(job='MANAGER')or(job<>'ANALYST');

排序查询和 order by 使用

查询员工信息(编号,姓名,月薪,年薪),按月薪升序排序,默认升序,如果月薪相同,按 oracle 内置的校验规则排序selectempno,

ename,

sal,

sal*12fromemp orderbysal asc;

查询员工信息(编号,姓名,月薪,年薪),按月薪降序排序selectempno,

ename,

sal,

sal*12fromemp orderbysal desc;

聚合统计

统计工资最高的人selectmax(sal)fromemp;

统计工资最低的人selectmin(sal)fromemp;

根据工号统计所有人数selectcount(deptno)fromemp;

分组后的条件查询查询部门平均工资大于 2000 元的部门selectdeptno"部门编号",

trunc(avg(sal),0)"部门平均工资"fromempgroupbydeptno having trunc(avg(sal),0)>2000orderby2desc;

这里的 2 代表的是第二个条件, 也就是部门平均工资

需要注意的是: where 是行过滤器, 针对原始记录, 跟在 from 后面, 先执行 having 是组过滤器, 针对分组后的记录, 跟在 group by 后面, 后执行

下面是多表查询:

连接查询: 内连接查询: 只能查询出符合条件的记录外连接查询: 既能查询出符合条件的记录, 也能根据一方强行将另一方查询出来

多表外连接查询:(左外连接)按部门 10,20,30,40 号,统计各部门员工人数,要求显示部门号,部门名,人数首先是 sql99:selectdept.deptno"部门号",

dept.dname"部门名",

count(emp.empno)"人数"fromdept leftjoinemp ondept.deptno=emp.deptnogroupbydept.deptno,

dept.dname;

下面是 Oracle 专用语句:selectdept.deptno"部门号",

dept.dname"部门名",

count(emp.empno)"人数"fromdept,

empwheredept.deptno=emp.deptno(+)groupbydept.deptno,

dept.dname;

右外连接首先是 sql99:selectdept.deptno"部门号",

dept.dname"部门名",

count(emp.empno)"人数"fromemp leftjoindept on emp.deptno=dept.deptnogroupbydept.deptno,

dept.dname;

下面是 Oracle 专用语句:selectdept.deptno"部门号",

dept.dname"部门名",

count(emp.empno)"人数"fromdept,

empwhereemp.deptno(+)=dept.deptnogroupbydept.deptno,

dept.dname;

自连接查询:

显示 "SMITH 的上级是 FORD"selectusers.ename||'的上级是'||boss.enamefromemp users,

emp bosswhereusers.mgr=boss.empno;

子查询:查询条件未知的事务查询工资比 WARD 高的员工信息select*fromempwheresal>(selectsalfromempwhereename='WARD');

mysql 和 Oracle 的简单比较

来源: http://www.bubuko.com/infodetail-2138339.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值