欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

mysql与oracle两种数据库的区别介绍

程序员文章站 2022-06-23 15:31:56
1.聚合函数与非分组字段查询问题 案例: 用oracle创建表: create table t1(   id number(10),   name varchar2(20), &...

1.聚合函数与非分组字段查询问题

案例:

用oracle创建表:

create table t1(

  id number(10),

  name varchar2(20),

  gender varchar2(20),

  age number(10),

  primary key(id)

);

//插入

insert into t1 values(

seq_t1.nextval,'cmz','1','1'

);

insert into t1 values(

seq_t1.nextval,'zmc','1','3'

);

insert into t1 values(

seq_t1.nextval,'czm','2','5'

);

insert into t1 values(

seq_t1.nextval,'zcm','2','7'

);

insert into t1 values(

seq_t1.nextval,'mcz','2','9'

);

select * from t1;

//查找

select count(*),gender from t1 group by gender;-----1

select count(*),name from t1 group by gender;------2

1.按性别分组并查找count(*),没什么问题,oracle与mysql都可以

2.这里区别就出现了,oracle会报错,而mysql不会,oracle报错是因为按照gender分组后,count(*)和gender都是两行,而name是5行。所以不同行不能同时显示就会报错;

但是mysql不会,mysql会输出按照gender分组过后的第一个name。具体原因是因为什么现在不知道,以后补充

补充:

1.百度获得

*.做单独的查询时, orcale使用一个叫dual的伪表, 而mysql不需要.

比如:select 3.1415926 from dual----oracle;

          select 3.14.5926---------mysql

*. mysql别名不区分大小写, mysql字符比较也不区别大小写.

*. 包含null的任何运算(is null 除外), 包括null = null, mysql返回null, oracle(........待定..).

*. oracle中, 如果列名长于列限定字符数, 那么输出的列名会被截断.

*. mysql 4.0以后的版本支持union和union all, 但仍不支持intersect和minus.

日期:

*. mysql只支持类似于2002-3-12或者96-12-1的日期格式.

*. 日期运算mysql是用date_add(date, interval 2 month)这样的函数运算, 而oracle用类似于add_months(date, 2)这样样的函数来运算.

*. oracle可以使用months_between, new_time, next_day这样的函数计算日期.

*. oracle使用sysdate获得当前时间, mysql使用now();

字符

*. 字符串引用, oracle只能用单引号, mysql还可以用双引号.

*. 用字符型数据使用算术运算符, oracle报错, mysql会先将此数据转换为数值.

*. mysql中"||"符号默认是"或"运算符, 连接字符串用函数concat.

*. mysql中取得字符ascii码用函数ascii(), oracle用chr();

*. oracle可以使用initcap函数让字符串首字母大字.

*. mysql中使用replace函数时必须要写全三个参数.

*. replace函数中, 第二个和第三个任一参数为null, mysql返回null; 而oracle在第二个参数为null时会返回字符串, 第三个参数缺少或为null时会删除与第二个参数匹配的字符.

*. oracle中可以使用translate来进行字符串替换.

*. oracle中不可以对数值使用length函数. mysql自动将数值转换为字符.

group by 和 having

*. oracle中, 有group by子句的查询, select后只能出现聚合函数或者group by子句中作为分组条件的列. mysql可以使用其它列, 该列的值将等于指分组条件在查询时第一个出现的行的该列的值.

*. mysql中, 同时包含group by和having的子句, 只可以在having中使用聚合函数或者select中作为列表的列; oracle中可以使用其它列, 这个列是指该分组的所有行的列. 比如 having col < 5, 指该分组所有行的col列均小于5