mysql与oracle的区别

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值