close


SQL ( Structured Query Language,結構化查詢語言 ),起源於 IBM 在1974年啟動的 System/R 研究計畫,這是個關連式資料庫的原型,整個計畫在1979年結束,並且獲得兩項重要的成果:


一是驗證了關連式資料模型的可行性


二是發展出 SEQUEL _ Structured English Query Language,結構化英文查詢語言



IBM並沒有放棄 System/R 計畫的研究成果,1981年推出了 SQL/Data System( SQL/DS),1983年推出 Database 2( DB2 ) 的產品;而且,以IBM在業界的實力,SEQUEL 自然就成為相關業界的標準。



之後,SEQUEL 查詢語言經 美國國家標準局_ANSI 和國際標準組織_ISO 不斷地歸納與修改,於1986年訂定了 SQL-86 關聯性資料庫操作語言的國家標準,而更名現今大家熟知的SQL,但,它的發音仍然依循著 IBM  SEQUEL( [`sikwl] )的唸法。之後, SQL-89 、 SQL-92 、 SQL:1999、 SQL:2003也相繼訂定 ... ... 茲簡要表列如下:


 






























年度        
名    稱                
別    名            
註    解
1986SQL-86SQL-87First published by ANSI. Ratified by ISO in 1987.
1989SQL-89 Minor revision.
1992SQL-92SQL2Major revision (ISO 9075).
1999SQL:1999SQL3Added regular expression matching, recursive queries, triggers, non-scalar types and some object-oriented features.
2003SQL:2003 Introduced XML-related features, window functions, standardized sequences and columns with auto-generated values (including identity-columns).

 


RDBMS ( Relational DataBase Management System,關聯式資料庫管理系統 ) 是以 SQL 命令文字作為系統操作的語言。目前市面上所有的主流資料庫產品,都屬於 RDBMS 的範疇,包括,跟 PHP 關係異常密切的 MySQL 資料庫管理系統也是如此;也就是說,這些產品設計時都起碼會遵守 SQL-92 的標準。因此,學習 SQL-92 對各種資料庫相關的IT人員或程式設計人員都非常重要。



雖然 SQL 語言的學習有它一定的困難度,尤其是,各家廠商也都針對其資料庫的特性對ANSI SQL有不同的擴充。可是,只要是想進入資料管理或軟體設計領域的人,卻也是無法逃避、不能視而不見的功課



再者,不管資料庫產品提供何種Client端的使用者操作介面,基本上,我們所習慣的視窗圖像式軟體操作視窗畫面,其最終的結果就是幫使用者產生一段 SQL 文字交付管理系統執行;也就是說,對於已經熟練 SQL 的人而言,直接輸入命令文字將要比在視窗上繁複的操作來得有彈性。



SQL 語言的學習過程需要許多經驗的累積 ... 就像,從牙牙學語開始,到我寫成這篇"文章"



我們會逗弄孩子咿咿呀呀地學說話,你想,是為什麼?



所以囉,不管你們喜不喜歡,我還是得試著逗弄你們 ... 咿呀咿呀喲



學生時代,我們也曾被要求被課文;你想,這又是為了什麼?



所以囉,不管你們喜不喜歡,我還是得試著強迫你們 ... 以前怎麼背,現在,依樣畫葫蘆
( 偶就不信 ... 如果不瞭解意思,ㄚ能夠背下多少東西!)



請學員依照偶的引導,將下列示範的 SQL 指令文字碼交付 MySQL 資料庫執行 ... ...


 


SQL 2 (SQL-92)提供了三種具有個別功能的關聯式資料庫管理系統命令語言:



資料控制語言 ( DCL_Data Control Language )



GRANT ALL PRIVILEGES ON * . * TO 'classic'@'localhost' IDENTIFIED BY 'the_pwd'
WITH GRANT OPTION MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0
      MAX_UPDATES_PER_HOUR 0 ;



GRANT SELECT , INSERT , UPDATE , DELETE , CREATE TEMPORARY TABLES ON classic.*
      TO 'somebody'@'mysql2.byethost.com' IDENTIFIED BY 'his_pwd'
WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0
      MAX_UPDATES_PER_HOUR 5 ;



資料定義語言 ( DDL_Data Definition Language )



CREATE DATABASE `classic` DEFAULT CHARACTER SET big5 COLLATE big5_chinese_ci;


CREATE TABLE customers (
 cid       CHAR(10)      NOT NULL,
 cname      VARCHAR(30)      NOT NULL,
 csex       CHAR(1)      NOT NULL,
 cadd      VARCHAR(99),
 cmail      VARCHAR(50),
 PRIMARY  KEY  (cId)
 );



CREATE TABLE orders (
 oid      int      UNSIGNED      AUTO_INCREMENT,
 cid      VARCHAR(10),
 done      BOOL       DEFAULT  false,
 odate      TIMESTAMP,
 PRIMARY KEY  (oid),
 FOREIGN KEY  (cid)  REFERENCES customers(cid)
 ON DELETE SET NULL  ON UPDATE CASCADE
 );



CREATE TABLE sorts (
 sid       CHAR(6)      NOT NULL,
 cname      VARCHAR(50)      NOT NULL,
 PRIMARY  KEY  (sid)
 );



CREATE TABLE products (
 pid       CHAR(8)       NOT NULL,
 sid       CHAR(6),
 pname       VARCHAR(30)       NOT NULL,
 price FLOAT(10, 2),
 PRIMARY KEY  (pid),
 FOREIGN KEY  (sid)  REFERENCES sorts(sid)
 ON DELETE SET NULL  ON UPDATE CASCADE
 );



CREATE TABLE items (
 oid      int      UNSIGNED,
 pid      CHAR(8)       NOT NULL,
 quantity      smallint   DEFAULT  0,
 PRIMARY KEY  (oid, pid),
 FOREIGN KEY (oid) REFERENCES orders(oid)
 ON DELETE CASCADE  ON UPDATE CASCADE,
 FOREIGN KEY (pid) REFERENCES products(pid)
 );


 





資料處理語言 ( DML_Data Manipulation Language )



INSERT  INTO  sorts  VALUES  ('xyz041', '個人電腦');
INSERT  INTO  sorts  VALUES  ('xyz042', '手提電腦');
INSERT  INTO  sorts  VALUES  ('xyz043', '電腦週邊');


INSERT  INTO  products  VALUES  ('pc060001', 'xyz041', '華碩雙核心魔幻精靈', 24999);
INSERT  INTO  products  VALUES  ('nb060005', 'xyz042', 'ACER宏碁AS3619ALCi', 29999);
INSERT  INTO  products  VALUES  ('pt060012', 'xyz043', 'HP_A310相片印表機', 2600);


INSERT  INTO  customers  VALUES  ('abcd060001', '趙一叔', 'M', '台北市', 'aaa@bbb.com');
INSERT  INTO  customers  VALUES  ('abcd060002', '錢二嫂', 'F', '台中市', 'ccc@ddd.com');
INSERT  INTO  customers  VALUES  ('abcd060003', '孫三妹', 'F', '高雄市', 'eee@fff.com.tw');


INSERT  INTO  orders (cid) VALUES  ('abcd060002');


INSERT  INTO  items  VALUES  (1, 'pc060001', 1);
INSERT  INTO  items  VALUES  (1, 'nb060005', 1);
INSERT  INTO  items  VALUES  (1, 'pt060012', 2);



SELECT customers.cname AS 客戶名稱, customers.cadd AS 客戶住址,
      customers.cmail AS 客戶信箱, Sum(items.quantity*products.price) AS 交易額,
      orders.odate AS 交易日期, orders.oid AS 訂單編號
FROM sorts RIGHT JOIN (products RIGHT JOIN((customers RIGHT JOIN orders
      ON customers.cid = orders.cid) RIGHT JOIN items ON orders.oid = items.oid)
      ON products.pid = items.pid) ON sorts.sid = products.sid
WHERE  orders.done=False  AND  customers.cid  LIKE  '_b%02'
GROUP BY customers.cname, customers.cadd, customers.cmail, orders.odate, orders.oid;



SELECT customers.cid AS 客戶編號, customers.cname AS 客戶名稱, items.oid AS 訂單編號,
      items.pid AS 產品編號, items.quantity AS 採購數量
FROM (customers RIGHT JOIN orders ON customers.cid = orders.cid)
      RIGHT JOIN items ON orders.oid = items.oid
WHERE customers.cid = 'abcd060002'  OR customers.cname = '錢二嫂';



UPDATE  items SET quantity = 1  WHERE  oid = 1 AND  pid = 'pt060012';


Delete From items  WHERE  oid = 1 AND  pid = 'nb060005';


 


 



附記:



當 System/R 計畫進行中時,有一群工程師也相當看好關連式資料庫的潛力,因此,也在1977年成立了一家名為 Relational Software, Inc. ( 即現在的 Oracle company _ "甲骨文"公司 ),並在1979年推出了一個以 SQL 作為查詢語言的商業專用資料庫管理系統,也就是有名的 Oracle 資料庫


 



Oracle 執行長艾里森 ( Lawrence J. Ellison )


 


Oracle 公司目前的執行長,也是創辦人之一的艾里森(Lawrence J. Ellison),曾連續登上富比士雜誌全球十大億萬富豪的榜單,2000年時曾直追比爾蓋茲,名列世界第二;2006年,排名全球第 4 ...  ... ㄚ這樣,大家應該就知道,資料庫管理系統是不容小覷的吼~



微軟是在1993年開始生產中小型商業專用資料庫管理系統 SQL Server 4.21 for Windows NT;目前常見的分別是1999年的 SQL Server 7.0;2000年的 SQL Server 2000 以及最新的 SQL Server 2005。至於微軟 Office 家族中 Access 資料庫的 Jet Database Engine,勉強也可歸納為 RDBMS之列



有興趣深入學習 SQL 語言的 PHP 網頁設計者,除了可以參考這裡 或其他網路資源外


我建議可以去買這本原文的工具書來研讀:



書名:Learning SQL
作者:Alan Beaulieu
出版社:O'Reilly
出版日期:2005年8月
ISBN:0-596-00727-2
頁數:306頁


 


目前,具有專利的關聯性資料庫系統軟體有:(依字母排序)


4th Dimension
Alpha Five
Alpha Software Inc Alpha Five - RAD for Web and Desktop
Bizgres MPP
CA-Datacom
DB2
Dataphor
Daffodil database
EnterpriseDB
FileMaker
Helix database
Informix
InterBase
Kognitio, WX2
Linter
Matisse
Microsoft Jet Database Engine (part of Microsoft Access)
Microsoft SQL Server
Microsoft Visual FoxPro
Mimer SQL
Netezza
NonStop SQL
Openbase
Oracle
Oracle Rdb for OpenVMS
OpenLink Virtuoso Universal Server
Pervasive
Pyrrho DBMS
Progress 4GL
Sand Analytic Server (formerly known as Nucleus)
SQLBase
Sybase Adaptive Server Anywhere (formerly known as Watcom SQL)
Sybase Adaptive Server Enterprise
Sybase Adaptive Server IQ
Teradata
ThinkSQL
TimesTen
Valentina (Database)
Vertica
VistaDB
VMDS
Whitecross Systems
WinBase602


 


免費或開放原始碼的關聯性資料庫系統軟體有:(依字母排序)


Cloudscape
Derby
Firebird
FrontBase
H2
HSQLDB
Ingres
Java DB
MaxDB
MonetDB
MySQL
PostgreSQL
SmallSQL
SQLite
tdbengine
OpenLink Virtuoso (Open Source Edition)
txtSQL
Mckoi SQL Database
Rebol sql-protocol


 


 


 


引用文章:  功夫如來鶯聲燕語


arrow
arrow
    全站熱搜
    創作者介紹
    創作者 夜貓 的頭像
    夜貓

    夜貓的棲息地

    夜貓 發表在 痞客邦 留言(4) 人氣()