MySQL入門教程:結構化查詢語言SQL
最新學訊:近期OCP認證正在報名中,因考試人員較多請盡快報名獲取最近考試時間,報名費用請聯系在線老師,甲骨文官方認證,報名從速!
我要咨詢MySQL使用結構化查詢語言(Structured Query Language,SQL)與服務器通訊。MySQL系統使用的SQL語言基本上符合SQL92的標準,但是其對SQL92標準既有擴展,又有未實現的地方。
表、列和數據類型
表是數據在一個MySQL數據庫中的存儲機制,如表1-1所示,它包含一組固定的列。表中的列描述該表所跟蹤的實體的屬性,每個列都有一個名字及各自的特性。
列由兩部分組成:數據類型(datatype)和長度(length)。對于使用NUMERIC數據類型的列,可以指定列的小數位及精度特性,精度決定數值的有效位數,小數位表示數值的小數點位置。說明為NUMERIC(9,2)的列表示該列總共有9位數,其中2位數在小數點右邊。缺省的數值精度為10位數。
表1-1一個數據表techers
Id |
Name |
Tel |
Sex |
1 |
Tom |
62763218 |
M |
2 |
Marry |
21532777 |
F |
3 |
Mike |
45769021 |
M |
4 |
Jerry |
3245012 |
M |
… |
… |
… |
… |
注意,在上表中你可能會有每行記錄是按順序記錄的印象,假設你想取出表中的前十個記錄。使用傳統的編程語言,你可以做一個循環,取出前十個記錄后結束循環。但使用標準的SQL查詢,這是不可能實現的。因為在關系數據模型中,記錄就是行是沒有順序的,也就是說,在一個表中不存在前十個記錄這種概念。
函數
函數(function)是存儲在數據庫中的代碼塊。其差別在于函數可以把值返回調用程序。你可以建立自己的函數,并在SQL語句中調用它們,就像執行Oracle提供的函數一樣。例如,MySQL提供一個SUBSTRING函數來執行字符串上的“取子串”操作,如果創建一個叫做MYSUB的函數來執行一個自定義的取子串操作,就可以在一個SQL命令中調用它:
SELECT MYSUB("This is a test",6,2)
SQL的語句
SQL是一種典型的非過程化程序設計語言,這種語言的特點是:只指定哪些數據被操縱,至于對這些數據要執行哪些操作,以及這些操作是如何執行的,則未被指定。非過程化程序設計語言的優點在于它的簡單易學,因此已經成為關系數據庫訪問和操縱數據的標準語言。
與之相對應的是過程化程序設計語言,我們平常熟悉的各種高級程序設計語言都屬于這一范疇。這種語言的特點是:一條語句的執行是與其前后的語句和控制結構(如條件語句、循環語句等)相關的。與SQL相比,這些語言顯得比較復雜,但優點是使用靈活,數據操縱能力非常強大。
這種語言被設計為不允許你按照某種特定的順序來取出記錄,因為這樣做會降低SQLSever取記錄的效率。使用SQL,你只能按查詢條件來讀取記錄。
當考慮如何從表中取出記錄時,自然會想到按記錄的位置讀取它們。例如,也許你會嘗試通過一個循環,逐個記錄地掃描,來選出特定的記錄。在使用SQL時,你必須訓練自己,不要有這種思路。
假如你想選出所有的名字是“Tom”的記錄,如果使用傳統的編程語言,你也許會構造一個循環,逐個查看表中的記錄,看名字域是否是“Tom”。
這種選擇記錄的方法是可行的,但是效率不高。使用SQL,你只要說,“選擇所有名字域等于Tom的記錄”,SQL就會為你選出所有符合條件的記錄。SQL會確定實現查詢的最佳方法。
例如,我們從表1-1中取出id為1的數據:
SELECT * FROM teachers WHERE id=1
相同的功能用普通的高級語言,也許需要一個復雜的循環。