SQL

MySQL(筆記)

MySQL資料庫系統是一種關聯式資料庫,結構類似Excel。每個資料庫至少由一個資料表(Table)所構成,每個資料表可以有多個不同資料型別的資料欄位(Field)來儲存資料,這些欄位類似Excel的行(Column)。當資料表增加或刪除資料,也就是增加或刪除它的資料錄(Record),每筆資料錄類似Excel的列(Row)

  • 需要下載與安裝的檔案:

        MySQL資料庫系統

        http://www.appservnetwork.com/

        JDBC(Java DataBase Connectivity)MySQL的驅動程式,透過它Java的應用程式才可以連結MySQL資料庫。

        http://dev.mysql.com/

  • 實作

        做一個實用的資料庫至少有幾個事項要做:

  1. 仔細規劃資料庫的資料表
  2. 建立新資料庫
  3. 建立該資料庫的新資料表
  4. 存取資料庫中資料錄
  • 如何應用程式連結資料庫的步驟:
  1. 在程式最前面必須載入有關資料庫查詢類別sql套件:

         import java.sql.*;      

     2.  連結JDBC資料庫驅動程式:

         Class.forName("com.mysql.jdbcDriver");

     3.  連結準備建立或使用的資料庫:

         connection = DriverManager.getConnection("jdbc:mysql://localhost/資料庫名稱"+"?user=使用者名稱&password=密碼");

     4.利用前面傳回的Conncetion物件產生一個Statement物件:

         statement = connection.createStatement();

        Statement介面物件可以執行SQL語法,建立或刪除資料庫,並可查詢或修改Record的內容。所謂SQL語法即資料庫系統使用的指令,

        如建立資料庫(CREATE DATABASE) 刪除資料庫(DROP DATABASE) 建立資料表(CREATE TABLE) 資料表查詢(SELECT) 修改

        (UPDATE)等....最基本功能的語法。Java將SQL語法以字串方式來執行。

  • 建立資料庫

         statement.executeUpdate("CREATE DATABASE 資料庫名稱");

  • 刪除資料庫

         statement.executeUpdate("DROP DATABASE 資料庫名稱");

  • 建立資料表

         statement.executeUpdate("CREATE TABLE 資料表名稱");

  • 資料表的資料查詢

         ResultSet result = statement.executeQuery("SQL查詢資料表語法");

         SQL查詢資料表語法:

         SELECT*|[欄位名稱]FORM 資料表名稱 [WHERE 條件式]

        利用executeQuery()方法執行SQL查詢資料表的資料,將其結果傳回到ResultSet物件中。

  • 增加資料表的Record:

         statement.executeUpdate(INSERT INTO 資料表名稱 [欄位名稱] VALUES (數值));

  • 刪除資料表的Record:

         statement.executeUpdate(DELETE FROM  資料表名稱 [WHERE 條件式] );

  • 修改Record內容:

         statement.executeUpdate(UPDATE 資料表SET (欄位=數值)[WHERE 條件式] );

  • 關閉資料庫並釋放資料庫:

         statement.close():

         result.close();

       由於Java對於資料庫處理有嚴格的要求,因此程式大部分都要使用例外處裡(try catch),捕捉處理各種有關資料庫執行過程中可能產生的錯誤。

SQL語法

我們列出所有在這個網站有列出 SQL 指令的語法

這一頁的目的是提供一個簡潔的 SQL 語法做為讀者參考之用

Select

SELECT "欄位" FROM "表格名"

Distinct

SELECT DISTINCT "欄位"
FROM "表格名"

Where

SELECT "欄位"
FROM "表格名"
WHERE "condition"

And/Or

SELECT "欄位"
FROM "表格名"
WHERE "簡單條件"
{[AND|OR] "簡單條件"}+

In

SELECT "欄位"
FROM "表格名"
WHERE "欄位" IN ('值1', '值2', ...)

Between

SELECT "欄位"
FROM "表格名"
WHERE "欄位" BETWEEN '值1' AND '值2'

Like

SELECT "欄位"
FROM "表格名"
WHERE "欄位" LIKE {模式}

Order By

SELECT "欄位"
FROM "表格名"
[WHERE "條件"]
ORDER BY "欄位" [ASC, DESC]

Count

SELECT COUNT("欄位")
FROM "表格名"

Group By

SELECT "欄位1", SUM("欄位2")
FROM "表格名"
GROUP BY "欄位1"

Having

SELECT "欄位1", SUM("欄位2")
FROM "表格名"
GROUP BY "欄位1"
HAVING (函數條件)

Create Table

CREATE TABLE "表格名"
("欄位 1" "欄位 1 資料種類",
"欄位 2" "欄位 2 資料種類"",
... )

Drop Table

DROP TABLE "表格名"

Truncate Table

TRUNCATE TABLE "表格名"

Insert Into

INSERT INTO "表格名" ("欄位1", "欄位2", ...)
VALUES ("值1", "值2", ...)

Update

UPDATE "表格名"
SET "欄位1" = [新值]
WHERE {條件}

Delete From

DELETE FROM "表格名"
WHERE {條件}

SQL Server 簡介

SQLServer 6.0於1995年6月14日完成並進入RTM(released to manufacturing),對於SQL
Server團隊以及微軟來說,SQL Server
6.0是重要的里程碑,因為此版本是完全由微軟自行開發,未假手Sybase或其他廠商,因此SQL Server
6.0的發行,讓微軟的資料庫研發能力正式被外界認可


SQL Server 6.0
原本即是針對分散是主從運算所設計之關連式資料庫管理系統,在成功的發展基礎上,SQL Server 6.5 更針對企業在傳統上最需要的高效率,可靠度與伸縮彈性做了極大程度的擴充,以應快速變遷下的種種挑戰
能夠讓您集中管理所有的資料庫伺服器,才是理想的分散是管理架構,藉助仙境的是窗管理工具與功能強悍的伺服器作業排程系統,您能夠以視覺壞的方式輕鬆控制多部伺服器,並而自動啟動分散是環境中的遠端作業。


內建的資料複製功能,提供一種強大且可靠的方式將所有資訊正確的發佈至企業的每一個角落。重要的是此一功能並未僅僅侷限於SQL Server的資料庫,它可以涵蓋其他多種資料庫。
當設計
SQL Server 時,我們仍然心繫Internet,因此他能以及高的速度存取您公司Web的頁面,而其新提供的Web
Assistant更可以透過多種方式將SQL 資料發佈至你的Web伺服器,以及將公司資料分散至內部的Intranet或Web的全球資訊網上。

SQL Server 6.5的另外一項新功能就是分散是異動交易協調員,他能自動化橫跨多部伺服器的異動交易管理,這不僅使分散式應用程式更易建立,也讓程式設計師大大節省過去為了達到此項功能,而必須個別替前端程式撰寫特定程式碼所耗費的時間,SQL Server 同時ㄝ滿竹了您對可靠度與安全性的嚴苛要求,舉凡是資料參考完整性與安全性等,都可藉著ANIS.FIPS.NIST等工業標準來達成。


與Windows NT
緊密的整合,乃是達成高效率與高可靠度的主要原因,除此之外。身為Back
Office家族的成員之一,
SQL Server 當然可以與其他Back Office伺服器應用程式整合以成就全方為的主從架構系統。

一直演進到現在的SQL Server 2008, 他已不再是一套單純存放資料的資料庫系統, 微軟企圖聯合資料管理與程式開發兩種應用,繼續去開拓動態IT的策略。此外,對效能的改善也成了其力求突破的重點。

 

走向應用程式和資料雙棲的企業IT平台

SQL Server 2008的新功能,具有濃厚的程式開發風格,不論從企業到個人端、行動運算、甚至雲端,微軟都想在這個平臺上發展出對應的功能。

 

財金資訊

財金資訊以歷史資料庫為測試對象,啟用SQL Server 2008的資料壓縮功能,效能相當理想,資料壓縮讓儲存空間佔用減少6成,空間只需原來的4成不到,而且取出特定資料只要1秒。 

 

提供統一的資料存取方法

解決開發者須熟悉多種資料存取模式的麻煩

 

強化了資料個的延展性和集中管理

2008新的管理介面,雖然納入了許多管理工具,但對於習慣SQL Server
2000或2005等系統的管理人員來說,要上手並不是很困難,2008比以往更加強集中管理功能,採用了原則管理,並建立組態伺服器,以單一介面集中管理所有的SQL Server資料庫。 

 

效能改善為主要訴求

SQL Server 2008在整合服務與分析服務沒有大幅度變動,主要降低了系統的負載與強化的分析方法,同時也擴充資料採礦中的時間序列演算法運用。 


 

SQL

SQL 全名是結構化查詢語言(Structured Query Language),是用於資料庫中的標準數據查詢語言,IBM 公司最早使用在其開發的資料庫系統中。1986年10月,美國 ANSI 對 SQL 進行規範後以此作為關係式資料庫管理系統的標準語言 (ANSI X3. 135-1986),1987年得到國際標準組織的支持下成為國際標準。不過各種通行的資料庫系統在其實踐過程中都對 SQL 規範作了某些編改和擴充。所以,實際上不同資料庫系統之間的SQL語言不能完全相互通用。

SQL 是高級的非過程化編程語言,它允許用戶在高層資料結構上工作。它不要求用戶指定對數據的存放方法,也不需要用戶了解其具體的數據存放方式。而它的界面能使具有底層結構完全不同的資料庫系統和不同資料庫之間使用相同的 SQL 語言作為數據的輸入與管理。它以記錄項目〔records〕的合集(set)〔項集,record set〕作為操縱對象,所有 SQL 語句接受項集作為輸入,回送出的項集作為輸出,這種項集特性允許一條 SQL 語句的輸出作為另一條 SQL 語句的輸入,所以 SQL 語句可以嵌套,這使它擁有極大的靈活性和強大的功能。在多數情況下,在其他編程語言中需要用一大段程式才可實踐的一個單獨事件,而其在 SQL 上只需要一個語句就可以被表達出來。這也意味著用 SQL 語言可以寫出非常複雜的語句。

SQL 同時也是資料庫文件格式的擴展名。

SQL 語言包含4個部分:

「資料定義語言」(DDL : Data Definition Language)
「資料操作語言」(DML : Data Manipulation Language)
「資料查詢語言」(DQL : Data Query Language)
「資料控制語言」(DCL : Data Control Language)

以 SQL 為基礎的其他延伸語言
T-SQL
微軟 MS SQL-Server 系列資料庫所用的 SQL 語言
PL-SQL
Oracle 資料庫所使用的 SQL 語言

安全問題

由於 SQL 指令在部份進階使用時,語法會依照特定條件來變換,而且若是表格中的欄位過多時,許多開發人員都會習慣以字串組立的方式建立 SQL 指令,而且又使用系統管理員級的帳戶連到資料庫,因此讓駭客有機會利用 SQL 的組立方式進行攻擊,像是在指令中添加部份刺探性或破壞性的指令 (例如 DROP TABLEDROP DATABASE 或是 DELETE * FROM myTable 等具破壞性的指令),讓資料庫的資料或實體伺服器被破壞,導致服務中斷或是系統癱瘓等後果,此種攻擊手法稱為SQL Injection

目前實務上較有效的防禦方法,就是全面改用參數化查詢,或是檢查輸入資料,過濾掉可能的危險指令或資料來防範。 


SQL語法入門: http://www.1keydata.com/tw/sql/sql.html

節錄自:http://tw.knowledge.yahoo.com/question/question?qid=1608072001268

http://zh.wikipedia.org/w/index.php?title=SQL&variant=zh-tw

SQL

關連式資料庫,是利用一些被定義的集合,用表格去形成各種關連,接著將各種關連組合起來構成一個關連式資料庫。這種結構是由E.F Codd於1970年提出,與傳統的階層式、網狀式不同,我們可以從各種表格之間的關連,去取得每個表格理的某筆資料來形成一個新的表格,而關連式資料庫的優點在於設計較為單純,理論簡單明朗,適合表達表格間較為複雜的關係,且存取路徑並非是先決定的,適用於隨機查詢。而缺點則在於當查詢量過少時,關連式資料庫的效率遠比傳統的階層式、網狀式來的差。

SQL是結構化查詢語言(Structured Query Language)的簡稱,最初是由IBM於1970初期開發的查詢語言,它讓我們能夠定義資料庫的結構、建立表格、定義欄位形態與長度,也可用來增加、異動或刪除資料。SQL已經是查詢語言的標準語言,而且SQL可與數據庫程序協同工作,比如MS Access、DB2、Informix、MS SQL Server、Oracle、Sybase以及其他數據庫系統。 但在當時SQL語言存在的許多不同版本,為了與ANSI(美國國家標準學會)標準化相容,它們必須以相似的方式共同地來支持一些主要的關鍵詞(比如SELECT、UPDATE、DELETE、INSERT、WHERE等等)。

SQL語法沒有幾種,但值得一提的是它的外部連結,即先前提到過的結合表格做出新的表格,在資料庫某些場合裡,是非常有用且有力的。

SQL Server 特性

SQL Server 可以充分和Windows及Windows環境的應用程式緊密結合,降低成本及安裝的複雜度,目前已有許多的協力廠商開發的Windows應用程式及工具能夠支援SQL Server
    管理人員可以從單一的場所,透過Windows 95及Windows NT的作業系統上管理網站上不同的SQL Server伺服器,而Cursoor的使用允許開發者輕鬆的建立內容豐富,具有互動能力的應用程式,SQL Server 的連結環境允許Windows應用程式存取大型電腦上的DB2.Oracle.ingrse等其他資料庫的資料,透過SQL Server開放式的介面,開發者可以利用各種Windows的開發工具像是Visual Basice.Visual C++R 來進行開發的工作。

SQL Server是和Web站台相結合最理想的資料庫產品。由於它能夠和Internet Information Server緊密配合,使用者可以透過瀏覽程式取得SQL Server所提供的資料。而SQL ServerODBC上使用的驅動程式也可以和Internet Database ConnectorActive Server PageWeb資料庫存取技術結合,提供高效能的資料處理環境。另外SQL Server 6.5所提供的Web Assistant可以讓系統自動更新HTML頁面,定時提供使用者正確的資料。

SQL Server的分散式資料管理環境允許工作站在同一個時間內存取數個SQL Servers上的資料,進而允許開發人員設計分散式應用程式。SQL Server允許您透過單一的分散式交易處理,對數個不同的伺服器資料進行更新,而依舊能保持資料的整合性及一致性。如果該工作站或是任何一台伺服器有失效的情況,所有伺服器上所進行的相關交易都會自動取消,回復到交易進行前的狀況。
SQL Server 6.5針對上述狀況的處理方式相當聰明,而不需要應用程式處理細部的程序。它是透過Distributed Transaction Coordinator (DTC)這個元件進行處理的動作,DTC目前支援市場上流行的程式介面,包括ODBCDB-LibraryTransact-SQLXA以及OLE transactions

這些是課程有接觸過的 其他的話請參考http://www.dahsun.net.tw/sql2.htm

何謂SQL SERVER 資料庫

SQL Server 是主從式資料庫伺服器,它本身並沒有像 Access
提供使用者介面元件供我們開發用戶端程式。不過這是正是主從式架構的特點,伺服器本身並不需要著重在使用者介面;反之,透過伺服器所支援的各種存取方式,
我們能經由 Access存取,或是以各種不同的發展工具如Visual
Basic、Delphi、C++、PowerBuilder、ASP來開發用戶端應用程式,最後再與後端資料庫 SQL Server
組合成一個完整的應用系統。

SQL Server一般則區分為:

●資料庫設計者 (Database Designer)

負責整個資料庫的設計,規劃使用者的存取權限。

●資料庫管理者(DataBase Administrator,DBA)

管理、維護、監督、紀錄、修改、備分資料庫及帳戶權限管理。

●應用程式設計者(Application Designer)

運用應用程式撰寫存取資料庫的用戶端應用程式。

●一般使用者(End user)

資料庫使用者。

在一般中小企業中,資料庫的設計者與管理者有可能就是同一人;而大型企業,則可能資料庫設計者是一組人,而資料庫管理者又是另外一組人。

SQL (Structured Query Language 一般都習慣念成 sequel )
中文譯為結構化查詢語言,它目前是關聯式資料庫系統使用最廣泛的查詢語言,也就是說,大部分的關聯式資料庫管理系統都支援
SQL,所以使用者可以利用SQL語法直接對關聯式資料庫進行存取與管理的操作。

一些SQL的數學運算

標準 ANSI SQL-92 提供以下運算:

+
-
*
/
% 餘數

餘數為除法後剩整數,這不在標準的 ANSI SQL 中,但大部份的資料庫都會支援這運算元。以下列出有用的函數,雖不在 ANSI SQL-92 提供,但一般資料庫也會支援他們。

ABS(x) 傳回 x 絕對值
SIGN(x) returns the sign of input x as -1, 0, or 1 (negative, zero, or positive respectively)
MOD(x,y) 餘數 - returns the integer remainder of x divided by y (同 x%y)
FLOOR(x) 傳回小或等於 x 的最大整數值
CEILING(x) or CEIL(x) 傳回大或等於 x 的最小整數值
POWER(x,y) x的 y 次方
ROUND(x) 把 x 四捨五入為整數
ROUND(x,d) 四捨五入取到小數 d 位
SQRT(x) x 開平方

 

參考網頁: http://www.sy3es.tnc.edu.tw/teaching/php_mysql/sql-2/math.html

SQL

SQL來源與功能:

SQL是一專門用來處理關聯式資料庫的標準程式語言。它誕生於1970年代後半,促使SQL問世的功臣是位於加州聖荷西的IBM實驗室(IBM Laboratory)SQLStructured Query Languoge(結構化查詢語言)的縮寫。它讀成「S-Q-L」或「see-kwul」。

 

       
SQL的標準化作業,是由ANSI(美國國家標準學會)ISO(國際標準組織)2個標準化組織所推動的。它最初的標準化規格,是在1986年由ANSI所制定,並緊接著在1992年時ANSIISO分別制南的新的規格,這項規格一般為SQL-92規格,通稱SQL2。在目前,ANSISIO也持續地在研討新一代的規格,這項規格一般稱為SQL-99規格,通稱SQL3

 


現在的
SQL規格便是上述的SQL-92(SQL2)。儘管SQL的標準化不斷地進行著,但在另一方面,資料庫的軟體商卻也續地在擴充自已獨特的功能。事實上目前大多數的資料庫軟體商,都會在其RDBMS產品的SQL中,加上它們獨特的功能。因此各個產品中實際使用的是不具相容性的擴儿SQL。包括了Oracle所使用的PL/SQL、以及SQLServer中所使用的Transact-SQL。而這些SQL中由軟體商獨自擴充的部份都是不具有相容性的。

 

       
SQL是一種關聯式資料庫的專屬語言,換句話說它只能用來處理資料庫。SQL被稱為「非程序語言」。程序語言(procedural
language)
會將多項命令彙整起來,然後按照處理的流程依序撰寫。非程序語言(nonprocedural
language)
則是單獨地撰寫一個命令。一個命令便擁有一個完整的意義,可用來處理一項工作。

 


儘管
SQL是一種功能強大的資料庫語言,但它終究不是一般的程式語言,所以我們無法僅利用SQL就來實現各種架構。一般的處理便要交由傳統的程式語言來處理,而SQL之中會內建有可讓其它程式語言將它單叫出來的介面。當碰上需要執行資料庫方面的處理時,一般程式語言便可利用這個介面,來呼叫SQL以執行處理。而這個將SQL呼叫出的語,是稱為Host語言。

 


SQL中已事先定義好一些在語法上具有特殊意義,同時其用法也已事先決定好的單字,稱為關鍵字(keyword)。由於這些關鍵字已被SQL所使用,所以使用者不能再將它們設定為資料表或欄位的名稱。

 


若將關鍵與其它單字組合起來使用的話,便可構成一個具有意義的單位。這種單位稱為子句
(clause)。將若干個子句組合在一起,將可建立出一個具有完整意義的命令。這種命令便稱為敘述(statement)

 


特別注意敘述的末端一個「
;」,敘述結束的處理方式,在各個RDBMS產品中會略有差異。例如在Microsoft SQL ServerAccess中,即使沒有加上分號也無妨。特別是在Microsoft  SQL
Server
中,一般都不加上分號的。因此,雖通常會在敘述的末端加上分號,但碰到Microsoft  SQL
Server
的輸入範例時,有時便不會再加上分號了。

 


在程式碼中附加註解
(comment),將可高程式的易讀性。要附加註解時,必須先寫上「--(2個負號),然後再寫上註解的內容。從「--」之後,一直到該列結束處為止,全都會被視為註解。絕大多數的RDBMS產品在註解方面,除了支援「--」之外,也支援了C語言中所慣用的「/*」與「*/」。由「/*」與「*/」所包夾的部份中,不管有多少列,它們全都會被視為是註解。

 

       
SQL的關鍵字是不區分大小寫的。SQL有中單字與單字間的空白數,也是不具任何意義的,換句話說,您也可以利用Tab鍵。但也有部份的RDBMS產品會區分資料表名稱和欄位名稱的大小寫。

 


字串常數
(string constant)必須使用「'(單引號)來前後包夾字串。字串本身即包含有單引號時,可連續鍵入2個單引號「''」。Access中當要寫上字串常數時,一般都不是利用「'(單引號),而是利用「''(雙引號)。數值常數不需要使用單
引號,只要直接寫上數值便可。

 

 功能分類:

 


料定義語言
(DDL)

 


SQL
中屬於料料定義語言的命令,共有下列這幾項:


CREATE
:建立資料庫或資料表


ALTER
:變更資料庫或資料表的結構


DROP
:刪除資料庫或資料表

 


資料操作語言
(DML)

 


SELECT
:搜尋資料


INSERT
:新增資料


UPDATE
:更新資料


DELETE
:刪除資料

 


資料控制語言
(DCL)

 


GRANT
:授予使用者操作資料的權限


REVOKE
:撤回使用者操作資料的權限


COMMIT
:確定資料的變更


ROLLBACK
取消資料的變更

 


但也有某些
RDBMS產品,是將資料控制語言歸類在資料定義語言之中來進行管理的。

 

SQL語法舉例

1.(SELECT)-讀取

   SELECT "欄位名" FROM "表格名"

NBA_Information 表格


Team name
Star player      Date

LAKERS

Kobe Bryant

Jan-05-1999

BOSTON
Kevin Garnett
Jan-07-1999

CAVALIERS
LeBron James
Jan-08-1999

SAN ANTONIO

Tim Duncan

Jan-08-1999


若要選出所有的店名 (NBA_name),我們就鍵入:

SELECT NBA name FROM NBA_Information

結果:

Team name
LAKERS
BOSTON
CAVALIERS
SAN ANTONIO

 

 

 (2)WHERE-選取的條件

SELECT "欄位名" FROM "表格名" WHERE "條件"

輸入

SELECT NBA name
FROM NBA_Information
WHERE
Star player後衛

結果:

Team name

LAKERS

 

 (3)ORDER BY-排序

SELECT "欄位名" FROM "表格名" [WHERE "條件"]

ORDER BY "欄位名" [ASC, DESC]

 

輸入

SELECT store_name, Sales, Date
FROM Store_Information
ORDER BY Sales DESC

 結果

Team name Star player          
Date

LAKERS

Kobe Bryant
  
Jan-05-1999

CAVALIERS
LeBron James   
Jan-08-1999

SAN ANTONIO

Tim Duncan
  
Jan-08-1999

BOSTON
Kevin Garnett   
Jan-07-1999

 (4)DISTINCT

SELECT DISTINCT "欄位名" FROM "表格名"

 輸入

 SELECT DISTINCT Team name
FROM NBA_Information

 

結果:

Team name
CAVALIERS
SAN ANTONIO
BOSTON

 參考網頁:http://www.1keydata.com/tw/sql/sqldistinct.html

 

 

 

 

 

 

 

 

 


 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

訂閱文章