<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    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_tables、user_tab_colsUSER_COL_COMMENTS、USER_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 閱讀(1521) 評論(0)  編輯  收藏 所屬分類: 【數據庫】
    主站蜘蛛池模板: 亚洲综合婷婷久久| 亚洲午夜免费视频| 亚洲综合色婷婷在线观看| 在线日韩日本国产亚洲| 免费看片免费播放| 免费AA片少妇人AA片直播| 免费毛片在线看不用播放器 | 国产乱妇高清无乱码免费| 亚洲午夜无码久久久久软件| 亚洲一区二区三区电影| 亚洲精品tv久久久久久久久| 亚洲va中文字幕无码| 免费无码又爽又刺激高潮| 国产在线观看免费观看不卡| 99久热只有精品视频免费看| 国产免费拔擦拔擦8X高清在线人 | 成人免费在线观看网站| 亚洲三级在线免费观看| 四虎国产精品永久免费网址| 在线观看片免费人成视频无码| 免费人成网站永久| 国产偷国产偷亚洲高清在线| 亚洲熟女综合色一区二区三区| 亚洲午夜国产精品| 亚洲综合在线成人一区| 亚洲资源在线观看| 老司机亚洲精品影院无码| 亚洲视频在线播放| 亚洲国产人成在线观看69网站| 亚洲AV无码精品色午夜在线观看| 亚洲精品乱码久久久久久| 亚洲一区二区三区在线观看精品中文 | 91成年人免费视频| 2020因为爱你带字幕免费观看全集 | 久久久久久99av无码免费网站| 18女人毛片水真多免费| 最近中文字幕无免费| 久久国产免费福利永久| 男女免费观看在线爽爽爽视频| 91在线视频免费看| 四虎成人精品一区二区免费网站 |