Orcale和Mysql的区别

Orcale和Mysql的区别,第1张

做单独的查询时, Orcale使用一个叫DUAL的伪表, 而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

select meternum,dcu_code

from meter

where meternum in

(select meter.meternum from meter

minus

select aday_date.meternum from aday_date where data_time = '输入你想要的限制条件') minus运算的主要功能是: 在进行两个表格或者两个查询结果的时候

, 

返回在第一个表格/查询结果中与第二个表格/查询结果不相同的记录。

比如A表中数据如下:

ID  NAME   ADDRESS   TEL

1    ABC    

AAAA        123456

2    ABD    

BBBB         123455

3    ABE    

CCCCC        111111

比如B表中数据如下:

http://www.yuandingit.com/products/ 

ID  NAME   ADDRESS   TEL

1    ABC     AAAC

      123456

2    ABD    

BBBB         123455

那么

(SELECT * FROM

A)

MINUS

(SELECT * FROM

B)

的结果是:

1    ABC    

AAAA        123456  

3    ABE    

CCCCC        111111

结果中的第一行数据是由于 A,B 表中的ADDRESS不相等。

结果中的第一行数据是由于 A表中的数据在B表中不存在。

minus在Oracle中表示两个结果集的交集,也就是说两个条件都成立的集合,那在mssql中用and就可以了是吧!或者主外键

select

name

from

table1

a,table2

b

where

a.name=b.name

再或者把结果集a查出来再在a中按b的条件查:

SELECT

A.*

FROM

#WAN

A,(

SELECT

[NAME]

FROM

(SELECT

*

FROM

#WAN

GROUP

BY

[NAME],[TIME])

T

GROUP

BY

[NAME]

HAVING

COUNT([TIME])=(SELECT

COUNT(*)

FROM

(SELECT

[TIME]

FROM

#WAN

GROUP

BY

[TIME])

[TIME])

)

B

WHERE

A.[NAME]=B.[NAME]

ORDER

BY

A.[TIME],A.[NAME]


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/7487188.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-06
下一篇 2023-04-06

发表评论

登录后才能评论

评论列表(0条)

保存