gembin

          OSGi, Eclipse Equinox, ECF, Virgo, Gemini, Apache Felix, Karaf, Aires, Camel, Eclipse RCP

          HBase, Hadoop, ZooKeeper, Cassandra

          Flex4, AS3, Swiz framework, GraniteDS, BlazeDS etc.

          There is nothing that software can't fix. Unfortunately, there is also nothing that software can't completely fuck up. That gap is called talent.

          About Me

           

          SQL語法參考手冊

           
           
          SQL (Structured Query Language),是一種非常口語化、既易學(xué)又易懂的語法。此一語言幾乎是每個資料庫系統(tǒng)都必須提供的,用以表示關(guān)連式的操作,包含了資料的定義(DDL)以及資料的處理(DML)。SQL原來拼成SEQUEL,這語言的原型以“系統(tǒng) R“的名字在 IBM 圣荷西實驗室完成,經(jīng)過IBM內(nèi)部及其他的許多使用性及效率測試,其結(jié)果相當(dāng)令人滿意,并決定在系統(tǒng)R 的技術(shù)基礎(chǔ)發(fā)展出來 IBM 的產(chǎn)品。而且美國國家標(biāo)準(zhǔn)學(xué)會(ANSI)及國際標(biāo)準(zhǔn)化組織(ISO)在1987遵循一個幾乎是以 IBM SQL 為基礎(chǔ)的標(biāo)準(zhǔn)關(guān)連式資料語言定義。

          一、資料定義 DDL(Data Definition Language)
          資料定語言是指對資料的格式和形態(tài)下定義的語言,他是每個資料庫要建立時候時首先要面對的,舉凡資料分哪些表格關(guān)系、表格內(nèi)的有什麼欄位主鍵、表格和表格之間互相參考的關(guān)系等等,都是在開始的時候所必須規(guī)劃好的。

          1、建表格:
          CREATE TABLE table_name(
          column1 DATATYPE [NOT NULL] [NOT NULL PRIMARY KEY],
          column2 DATATYPE [NOT NULL],
          ...)
          說明: 
          DATATYPE --是資料的格式,詳見表。
          NUT NULL --可不可以允許資料有空的(尚未有資料填入)。
          PRIMARY KEY --是本表的主鍵。

          2、更改表格 
          ALTER TABLE table_name
          ADD COLUMN column_name DATATYPE
          說明:增加一個欄位(沒有刪除某個欄位的語法。
          ALTER TABLE table_name
          ADD PRIMARY KEY (column_name)
          說明:更改表得的定義把某個欄位設(shè)為主鍵。
          ALTER TABLE table_name
          DROP PRIMARY KEY (column_name)
          說明:把主鍵的定義刪除。

          3、建立索引 
          CREATE INDEX index_name ON table_name (column_name)
          說明:對某個表格的欄位建立索引以增加查詢時的速度。

          4、刪除 
          DROP table_name
          DROP index_name

          二、的資料形態(tài) DATATYPEs
          smallint
          16 位元的整數(shù)。
          interger
          32 位元的整數(shù)。
          decimal(p,s)
          p 精確值和 s 大小的十進(jìn)位整數(shù),精確值p是指全部有幾個數(shù)(digits)大小值,s是指小數(shù)
          點後有幾位數(shù)。如果沒有特別指定,則系統(tǒng)會設(shè)為 p=5; s=0 。
          float
          32位元的實數(shù)。
          double
          64位元的實數(shù)。
          char(n)
          n 長度的字串,n不能超過 254。
          varchar(n)
          長度不固定且其最大長度為 n 的字串,n不能超過 4000。
          graphic(n)
          和 char(n) 一樣,不過其單位是兩個字元 double-bytes, n不能超過127。這個形態(tài)是為
          了支援兩個字元長度的字體,例如中文字。
          vargraphic(n)
          可變長度且其最大長度為 n 的雙字元字串,n不能超過 2000。
          date
          包含了 年份、月份、日期。
          time
          包含了 小時、分鐘、秒。
          timestamp
          包含了 年、月、日、時、分、秒、千分之一秒。

          三、資料操作 DML (Data Manipulation Language)
          資料定義好之後接下來的就是資料的操作。資料的操作不外乎增加資料(insert)、查詢資料(query)、更改資料(update) 、刪除資料(delete)四種模式,以下分 別介紹他們的語法:

          1、增加資料:
          INSERT INTO table_name (column1,column2,...)
          VALUES ( value1,value2, ...)
          說明:
          1.若沒有指定column 系統(tǒng)則會按表格內(nèi)的欄位順序填入資料。
          2.欄位的資料形態(tài)和所填入的資料必須吻合。
          3.table_name 也可以是景觀 view_name。

          INSERT INTO table_name (column1,column2,...)
          SELECT columnx,columny,... FROM another_table
          說明:也可以經(jīng)過一個子查詢(subquery)把別的表格的資料填入。

          2、查詢資料:
          基本查詢
          SELECT column1,columns2,...
          FROM table_name
          說明:把table_name 的特定欄位資料全部列出來
          SELECT *
          FROM table_name
          WHERE column1 = xxx
          [AND column2 > yyy] [OR column3 <> zzz]
          說明:
          1.'*'表示全部的欄位都列出來。
          2.WHERE 之後是接條件式,把符合條件的資料列出來。

          SELECT column1,column2
          FROM table_name
          ORDER BY column2 [DESC]
          說明:ORDER BY 是指定以某個欄位做排序,[DESC]是指從大到小排列,若沒有指明,則是從小到大
          排列

          組合查詢
          組合查詢是指所查詢得資料來源并不只有單一的表格,而是聯(lián)合一個以上的
          表格才能夠得到結(jié)果的。
          SELECT *
          FROM table1,table2
          WHERE table1.colum1=table2.column1
          說明:
          1.查詢兩個表格中其中 column1 值相同的資料。
          2.當(dāng)然兩個表格相互比較的欄位,其資料形態(tài)必須相同。
          3.一個復(fù)雜的查詢其動用到的表格可能會很多個。

          整合性的查詢:
          SELECT COUNT (*)
          FROM table_name
          WHERE column_name = xxx
          說明:
          查詢符合條件的資料共有幾筆。
          SELECT SUM(column1)
          FROM table_name
          說明:
          1.計算出總和,所選的欄位必須是可數(shù)的數(shù)字形態(tài)。
          2.除此以外還有 AVG() 是計算平均、MAX()、MIN()計算最大最小值的整合性查詢。
          SELECT column1,AVG(column2)
          FROM table_name
          GROUP BY column1
          HAVING AVG(column2) > xxx
          說明:
          1.GROUP BY: 以column1 為一組計算 column2 的平均值必須和 AVG、SUM等整合性查詢的關(guān)鍵字
          一起使用。
          2.HAVING : 必須和 GROUP BY 一起使用作為整合性的限制。

          復(fù)合性的查詢
          SELECT *
          FROM table_name1
          WHERE EXISTS (
          SELECT *
          FROM table_name2
          WHERE conditions )
          說明:
          1.WHERE 的 conditions 可以是另外一個的 query。
          2.EXISTS 在此是指存在與否。
          SELECT *
          FROM table_name1
          WHERE column1 IN (
          SELECT column1
          FROM table_name2
          WHERE conditions )
          說明: 
          1. IN 後面接的是一個集合,表示column1 存在集合里面。
          2. SELECT 出來的資料形態(tài)必須符合 column1。

          其他查詢
          SELECT *
          FROM table_name1
          WHERE column1 LIKE 'x%'
          說明:LIKE 必須和後面的'x%' 相呼應(yīng)表示以 x為開頭的字串。
          SELECT *
          FROM table_name1
          WHERE column1 IN ('xxx','yyy',..)
          說明:IN 後面接的是一個集合,表示column1 存在集合里面。
          SELECT *
          FROM table_name1
          WHERE column1 BETWEEN xx AND yy
          說明:BETWEEN 表示 column1 的值介於 xx 和 yy 之間。

          3、更改資料:
          UPDATE table_name
          SET column1='xxx'
          WHERE conditoins
          說明:
          1.更改某個欄位設(shè)定其值為'xxx'。
          2.conditions 是所要符合的條件、若沒有 WHERE 則整個 table 的那個欄位都會全部被更改。

          4、刪除資料:
          DELETE FROM table_name
          WHERE conditions
          說明:刪除符合條件的資料。

          說明:關(guān)于WHERE條件后面如果包含有日期的比較,不同數(shù)據(jù)庫有不同的表達(dá)式。具體如下:
          (1)如果是ACCESS數(shù)據(jù)庫,則為:WHERE mydate>#2000-01-01#
          (2)如果是ORACLE數(shù)據(jù)庫,則為:WHERE mydate>cast('2000-01-01' as date)
          或:WHERE mydate>to_date('2000-01-01','yyyy-mm-dd')
          在Delphi中寫成:
          thedate='2000-01-01';
          query1.SQL.add('select * from abc where mydate>cast('+''''+thedate+''''+' as date)');

          如果比較日期時間型,則為:
          WHERE mydatetime>to_date('2000-01-01 10:00:01','yyyy-mm-dd hh24:mi:ss')  

          posted on 2007-09-21 11:26 gembin 閱讀(946) 評論(1)  編輯  收藏

          評論

          # re: SQL語法參考手冊 2007-09-22 00:12 千里冰封

          不錯,有時間好好研究一下  回復(fù)  更多評論   


          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           

          導(dǎo)航

          統(tǒng)計

          常用鏈接

          留言簿(6)

          隨筆分類(440)

          隨筆檔案(378)

          文章檔案(6)

          新聞檔案(1)

          相冊

          收藏夾(9)

          Adobe

          Android

          AS3

          Blog-Links

          Build

          Design Pattern

          Eclipse

          Favorite Links

          Flickr

          Game Dev

          HBase

          Identity Management

          IT resources

          JEE

          Language

          OpenID

          OSGi

          SOA

          Version Control

          最新隨筆

          搜索

          積分與排名

          最新評論

          閱讀排行榜

          評論排行榜

          free counters
          主站蜘蛛池模板: 华池县| 花莲县| 漯河市| 宜良县| 田林县| 靖江市| 宁强县| 馆陶县| 元谋县| 凤山市| 镶黄旗| 土默特左旗| 安新县| 滦平县| 东乌| 广河县| 石林| 满城县| 庆城县| 贵阳市| 台江县| 邛崃市| 封开县| 界首市| 临汾市| 奉节县| 德安县| 高清| 湘潭县| 固阳县| 夹江县| 甘南县| 灌阳县| 四平市| 白朗县| 丰台区| 孝昌县| 白河县| 河北区| 高碑店市| 驻马店市|