一.SQL語句語法
ALTER TABLE
ALTER TABLE 用來更新已存在表的結構。
ALTER TABLE tablename (ADD|DROP column datatype [NULL|NOT NULL] [CONSTRAINTS], ... );
COMMIT
COMMIT 用來將事物寫入數據庫。
COMMIT [TRANSACTION];
CREATE INDEX
CREATE INDEX 用於在一個或多個列上創建索引。
CREATE INDEX indexname ON tableanme (column,...);
CREATE PROCEDURE
CREATE PROCEDURE 用於創建存儲過程。
CREATE PROCEDURE AS SQL statement;
CREATE TABLE
CREATE TABLE 用於創建新數據庫表。更新已經存在的表的結構,使用ALTER TABLE。
CREATE TABLE tablename ( column datatype [NULL|NOT NULL] [CONSTRAINS], column datatype [NULL|NOT NULL] [CONSTRAINS], ... );
CREATE VIEW
CREATTE VIEW 用於創建一個或多個表上的新視圖。
CREATE VIEW viewname AS SELECT columns, ... FROM tables, ... [WHERE ...] [GROUP BY ...] [HAVING ...];
DELETE
DELETE 從表中刪除一行多多行。
DELETE FROM tablename [WHERE ...];
DROP
DROP 永久刪除數據庫對象(表,視圖,索引等)。
DROP INDEX|PROCEDURE|TABLE|VIEW indexname|procedurename|tablename|viewname;
INSERT
INSERT 為表添加一行。
INSERT INTO tablename[(columns, ...)] VALUES (values, ...);
INSERT SELECT
INSERT SELECTT 將SELECT結果插入到一個表。
INSERT INTO tablename [(columns, ...)] SELECT columns, ... FROM tablename, ... [WHERE ...];
ROLLBACK
ROLLBACK 用於撤銷一個事物塊。
ROLLBACK [TO savepointname];
SELECT
SELECT 用於從一個或多個表(視圖)中檢索數據。
SELECT columnname, ... FROM tablename, ... [WHERE ...] [UNION ...] [GROUP BY ...] [HAVING ...] [ORDER BY ...];
UPDATE
UPDATE 更新表中的一行或多行。
UPDATE tablename SET columnname = value, ... [WHERE ...];
二.SQL常用語句
檢索數據
SELECT語句后面跟要檢索的列,FROM后跟要檢索的表,WHERE用於過濾需要的條件。ORDER BY用於排序(DESC用於降序,ASC用於升序)。SELECT *表示檢索所有的列。
SELECT colunmname_1, columnname_2, clunmname_3, ... FROM tablename [WHERE ...] [ORDER BY ... ASC|DESC];
過濾數據
WHERE用於過濾數據,后面可跟字句操作符,后跟 NOT 用於否定,后跟AND、OR和IN(完成與OR相同的功能)用於過濾多個條件,后跟LIKE用於通配符過濾(%表示任意字符出現任意次數,_表示匹配單個字符,[]用來指定一個字符集)。例如:
SELECT prod_id, prod_name, prod_price FROM Products WHERE NOT prod_price BETWEN 3.44 AND 5.88 AND prod_name LIKE '[JM]%';
下表為WHERE字句操作符:
拼接字段
MySQL數據庫中用Concat來進行拼接字段。AS來取一個別名。RTRIM()來去掉字符串右邊的空格,LTRIM()來去掉字符串左邊的空格,TRIM()來去掉字符串左右兩邊的空格。例如:
SELECT Concat( vend_name, '(' ,RTRIM(vend_country), ')' ) AS vend_title FROM Vendors ORDER BY vend_name;
數據函數
常用數據的處理、匯總函數如下:
例如:
SELECT COUNT(*) AS num_cust FROM Customers;
子查詢
子查詢,即嵌套在其他查詢中的查詢。例如:
SELECT cust_name,cust_state, (SELECT COUNT(*) FROM Orders WHERE Orders.cust_id=Customer.cust_id) AS orders FROM Customers ORDER BY cust_name;
聯結表
SQL最強大的功能之一就是能在數據查詢的執行中聯結(join)表。聯結是利用SQL的SELECT能執行的最重要的操作,很好的理解聯結及其語法是學習SQL的極為重要的部分。創建聯結表非常簡單,指定要聯結的所有表及關聯它們的方式即可。例如:
SELECT vend_name,prod_name,prod_price FROM Vendors, Products WHERE Vendors.vend_id=Products.vend_id;
以上使用的聯結稱為內聯結,也稱為等值聯結,它基於兩個表之間的相等測試。下面的SELECT語句返回與前面例子完全相同的數據:
SELECT vend_name,prod_name,prod_price FROM Vendor INNER JOIN Products ON Vendor.vend_id=Products.vend_id;
組合查詢
可用UNION操作符來組合多條SQL語句,在各條語句之間放上關鍵字UNION。UNION從查詢結果集中自動去除重復的行,如果顯示所有可用UNION ALL表示返回所有的匹配行。例如:
SELECT cust_name, cust_contact,cust_email FROM Customers WHERE cust_state IN('IL', 'IN' ,'MI') UNION SELECT cust_name, cust_contact,cust_email FROM Customers WHERE cust_name ='JACK';
插入數據
可用INSERT操作符對標進行插入操作,后面的INTO是可選的(建議加上)。例如:
INSERT INTO Students(id,name,age,tel) VALUES( '001', 'JACK' , '21' , '8612345'; )
三.主鍵與外鍵
主鍵是一種特殊的約束,用來保證一列(或一組列)中的值是唯一的,而且永遠不改動。換句話說,表中的一列或多個列的唯一標識表中的每一行。這方便了直接或交互處理表中的行。沒有主鍵,要安全的進行UPDATE和DELETE特定行而不影響其他行會非常困難。一種定義主鍵的方法是創建它,例如下面聲明vend_id為主鍵:
CREATE TABLE Vendors ( vend_id CHAR(10) NOT NULL PRIMARY KEY, vend_name CHAR(50) NOT NULL, vend_addr CHAR(50) NULL );
外鍵是表中的一列,其值必須列在另一表的主鍵中。外鍵是保證引用完整性的及其重要的部分。例如:
CREATE TABLE Orders ( order_num INTEGER NOT NULL PRIMARY KEY, order_data DATATIME NOT NULL, cust_id CHAR(10) NOT NULL REFERENCES Customers(cust_id) );
上面語句定義使用了REFERENCES關鍵字,它表示cust_id中的任何都必須是Customers表的cust_id中的值。
相同的工作也可以在ALTER TABLE語句中用CONSTRAINT語法來完成:
ALTER TABLE Orders ADD CONSTRAINT FROEIGN KEY (cust_id) REFERENCES Customers (cust_id)
四.數據類型
表4.1 字符串數字類型
表4.2 數值數據類型
表4.3 日期和時間數據類型
表4.4 二進制數據類型
以上是SQL相關的常用語法及語句結構,詳情可查看SQL及DBMS相關文檔。
參考文獻
《SQL必知必會》,Ben Forta ,人民郵電出版社。