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

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *