JAVA—咖啡館

          ——歡迎訪問rogerfan的博客,常來《JAVA——咖啡館》坐坐,喝杯濃香的咖啡,彼此探討一下JAVA技術,交流工作經驗,分享JAVA帶來的快樂!本網站部分轉載文章,如果有版權問題請與我聯系。

          BlogJava 首頁 新隨筆 聯系 聚合 管理
            447 Posts :: 145 Stories :: 368 Comments :: 0 Trackbacks

           

          Oracle

          mysql

          對比版本

          Release 10.2.0.1.0 XE windowsXP

          5.0.45-community-nt-log MySQL Community Edition (GPL)

          當作計算器

          SQL> select 1+1 from dual;

          mysql> select 1+1;

          mysql> select 1+1 from dual;

          顯示表結構

          SQL> desc 表名

          mysql> desc 表名;

          SQL> describe 表名

          mysql> describe 表名;

           

          mysql> explain 表名;

          注意explain 也可以用來獲取執行計劃。

          需要訪問:

          User_tablesuser_tab_colsUSER_COL_COMMENTSUSER_INDEXES等等字典表。

          mysql> show columns from 表名;

           

          bin>mysqlshow 庫名表名

          日期的概念

          一個完全不同于字符串的類型。日期類型沒有所謂的格式,日期就是日期,只有在顯示的時候可以指定轉換成的字符串的格式。絕對不會允許2008-00-00這種情況出現。對于日期轉換為另一個日期相對比較簡單,比如select trunc(sysdate) fromdual;

          可以方便的和字符串進行比較、轉換。允許0000-00-00這種情況出現作為null的替代品方便處理(個人不認為這樣比較方便,反而給我造成困惑)。對于字符串轉換為日期比較簡單,比如CREATETABLE `datetime` (

           `dt` datetime NOTNULLdefault'0000-00-00 00:00:00',

           PRIMARYKEY (`dt`)

          );

          INSERTINTO `datetime` VALUES ('2008-01-01 00:00:00');

          select*from `datetime`;

          日期類型

          date

          datetime

          Date

          日期

          Time

          時間

          Timestamp

          如果表中其他字段變化,此類型的字段自動更新為當前系統時間。

          Timestamp

          保存了毫秒級別的時間

          不清楚

          日期函數

          SQL> select trunc(sysdate)from dual;

          mysql> select curdate();

          mysql> select current_date;

          SQL> select sysdate from dual;

          mysql> select sysdate();

          mysql> select now();

          SQL> select to_char(sysdate,'HH24:Mi:SS')from dual;

          注意此處返回結果為字符串,而不是日期類型。Oracle不提供和mysqltime類型相應的類型。

          mysql> select current_time;

          mysql> select curtime();

          注意:此處返回的是time類型。就是時間17:22:14這種時間。Oracle中沒有此類型。

          毫秒級別:

          SQL> selectcurrent_timestampfrom dual;

          需要使用函數MICROSECOND。目前還不會。

          日期格式化

          SQL> select to_char(sysdate,'yyyy-mm-dd') from dual;

          mysql> select date_format(now(),'%Y-%m-%d');

          SQL> select to_char(sysdate,'hh24-mi-ss') from dual;

          mysql> select time_format(now(),'%H-%i-%S');

          日期函數

          (增加一天)

          SQL> select sysdate+1from dual;

          結果:2008-2-20 19:34:27

          mysql> select date_add(now(),interval 1 day);

          mysql>select now()+interval 1 day;

          日期函數

          (增加一個月)

          SQL> select add_months(sysdate,1)from dual;

          結果:2008-3-19 19:34:27

          mysql> select date_add(now(),interval 1 month);

          mysql>select now()+interval 1 month;

          別名

          SQL> select1as a from dual;

          mysql> select1as a;

          SQL> select1 a from dual;

          mysql> select1 a;

          字符串截取函數

          SQL> select substr('abcdefg',1,5)from dual;

          結果:abcde

          mysql> select substr('abcdefg',1,5);

          結果:abcde

          去除空格:

          select trim('abc   ')from dual;

          去除空格:

          select trim('abc   ')from dual;

          字符串拼接:

          SELECT CONCAT('a',' test')from dual;

          結果:a test

          SELECT CONCAT('a',' test');

          結果:a test

          注意oracle||為字符串拼接

          select'a'||' test'from dual;

          結果:a test

          注意mysql||為或操作符。

          select 0||1;

          結果1;

          Select 0||0;

          結果0。

          判斷是否包含:

          select instr('abcd','bcd')from dual;

          結果:2

          mysql> SELECT INSTR('foobarbar', 'bar');

          結果:4

          另有正則表達式。

          另有SUBSTRING_INDEX(str,delim,count)函數

          執行sql腳本

          SQL >@a.sql

          1mysql> source a.sql

          執行外部shell腳本

          SQL>host test.sh

          目前還不會

          SQL>! cd ..

          改表名

          SQL> altertable T renameto T1;

          mysql> alter table t rename t1;

          mysql> alter table T1 rename to T;

          執行命令

          ;<回車>

          ;<回車>

          /

          go

          r

          ego

          run

           

          distinct用法

          SQL> select distinct 1 from 1;

          mysql> select distinct 1 from 1;

          SQL> select distinct 1,2 from 1;

          mysql> select distinct 1,2 from 1;

          注釋

          --

          --

          /* */

          /**/

          REM

          #

          限制返回記錄條數為5

          SQL> select * from 表名 where rownum<=5;

          mysql> select * from 表名 limit 5;

          分頁查詢

          select*

          from (

          select row_.*, rownum rownum_

          from (

          yourSqlHere ) row_

          where rownum <= 100)

          where rownum_ > 20;

          select*from t limit20,100;

          外連接

           (+)

          left join

          LEFTOUTERJOIN

          left outer join

          RIGHTOUTERJOIN

           

          查詢索引

          SQL> select index_name,table_name from user_indexes;

          mysql> show index from 表名 [FROM 庫名];

          通配符

          “%”

          “%”“_”

          如果存在則更新,否則插入

          Merge into

          Replace into

          參見,mysqlreplace沒有oraclemerge嚴格:

          http://www.bitbybit.dk/carsten/blog/?p=128#comment-50048

          SQL語法

          SELECT selection_list 選擇哪些列

          SELECT selection_list 選擇哪些列

          FROM table_list 從何處選擇行

          FROM table_list 從何處選擇行

          WHERE primary_constraint 行必須滿足什么條件

          WHERE primary_constraint 行必須滿足什么條件

          GROUP BY grouping_columns 怎樣對結果分組

          注意:oracle如果需要排序必須指定order by 子句。

          GROUP BY grouping_columns 怎樣對結果分組

          注意:即使不存在order by子句,mysql也會按照group by 的列進行排序。甚至還能為group by 語句指定asc/desc子句。

          HAVING secondary_constraint 行必須滿足的第二條件

          HAVING secondary_constraint 行必須滿足的第二條件

          ORDER BY sorting_columns 怎樣對結果排序

          ORDER BY sorting_columns 怎樣對結果排序

          Oracle的結果集限定語句見:”分頁查詢”

          注意:oracle的rownum和mysql的Limit完全不同。

          LIMIT count 結果限定

          對not in null的處理,是關于三值邏輯的問題。

          CREATETABLE a

          ( code INT);

          INSERTINTO a

               VALUES(2);

          INSERTINTO a

               VALUES(NULL);

          SELECT1

           FROM DUAL

           WHERE1NOTIN(SELECT code FROM a);

          結果:無返回結果。

          CREATETABLE a

          ( code INT);

          INSERTINTO a

               VALUES(2);

          INSERTINTO a

               VALUES(NULL);

          SELECT1

           FROM DUAL

           WHERE1NOTIN(SELECT code FROM a);

          結果:無返回結果

          對not exists的處理

          CREATETABLE a

          ( code INT);

          INSERTINTO a

               VALUES(2);

          INSERTINTO a

               VALUES(NULL);

          SELECT1

           FROM DUAL

           WHERENOTEXISTS(SELECT1

                               FROM a WHERE a.code =1);

          結果:1

          CREATETABLE a

          ( code INT);

          INSERTINTO a

               VALUES(2);

          INSERTINTO a

               VALUES(NULL);

          SELECT1

           FROM DUAL

           WHERENOTEXISTS(SELECT1

                               FROM a WHERE a.code =1);

          結果:1

          獲取sql語句執行計劃

          SQL>EXPLAIN PLAN FOR   select * from t;

          然后

          SQL>select * from table(DBMS_XPLAN.DISPLAY)

          Mysql> explainselect*from t;

          執行計劃對照

          全表掃描: TABLE ACCESS FULL

          Type=all

          Where條件過濾:FILTER

          Extra=Using where

          排序:SORT ORDER BY

          Extra=Using filesort

             
             

          事務管理

          默認不自動提交

          innoDB支持事務

          默認自動提交autocommit

          阻塞讀取方式

           

           

          Unique index的區別。

          又是關于三值邏輯的問題。

          CREATETABLE hr.t (

             IDINTNOTNULL,

             DATACHAR(30)DEFAULTNULL,

             UNIQUE(ID,DATA)

           );

           

          INSERTINTO hr.t

               VALUES(1,NULL);

           

          INSERTINTO hr.t

               VALUES(1,NULL);

          mysql> CREATE TABLE t (

             ID INT NOT NULL,

             DATA CHAR(30) DEFAULT NULL,

             UNIQUE (ID, DATA)

           );

          INSERT INTO t

               VALUES (1, NULL);

          INSERT INTO t

               VALUES (1, NULL);

          select * from t;

          Query OK, 0 rows affected

          Query OK, 1 row affected

          Query OK, 1 row affected

          +----+------+

          | ID | DATA |

          +----+------+

          | 1 | NULL |

          | 1 | NULL |

          +----+------+

          2 rows in set

          ORA-00001: 違反唯一約束條件 (HR.SYS_C003999)

          posted on 2010-07-08 15:40 rogerfan 閱讀(1525) 評論(0)  編輯  收藏 所屬分類: 【數據庫】
          主站蜘蛛池模板: 灵宝市| SHOW| 金坛市| 当阳市| 宁德市| 临潭县| 襄樊市| 东台市| 龙南县| 玛沁县| 延川县| 吴桥县| 沾化县| 岳池县| 宜黄县| 西华县| 团风县| 报价| 繁峙县| 潍坊市| 西峡县| 社旗县| 翁牛特旗| 宝清县| 七台河市| 东乡| 米易县| 锡林浩特市| 内乡县| 沽源县| 贡觉县| 繁昌县| 洛南县| 青冈县| 潢川县| 云梦县| 南华县| 新河县| 茂名市| 循化| 斗六市|