1. 程式人生 > >SQL基礎(四):SQL命令

SQL基礎(四):SQL命令

版本 數據庫應用 ges odi 改變 sql per 測試 數據類型

1、CREATE INDEX 語句

  CREATE INDEX 語句用於在表中創建索引。在不讀取整個表的情況下,索引使數據庫應用程序可以更快地查找數據。

  索引:在表中創建索引,以便更加快速高效地查詢數據。用戶無法看到索引,它們只能被用來加速搜索/查詢。

  註釋:更新一個包含索引的表需要比更新一個沒有索引的表花費更多的時間,這是由於索引本身也需要更新。因此,理想的做法是僅僅在常常被搜索的列(以及表)上面創建索引。

//SQL CREATE INDEX 語法
//在表上創建一個簡單的索引。允許使用重復的值:
CREATE INDEX index_name
ON table_name (column_name)
//SQL CREATE UNIQUE INDEX 語法 //在表上創建一個唯一的索引。不允許使用重復的值:唯一的索引意味著兩個行不能擁有相同的索引值。 CREATE UNIQUE INDEX index_name ON table_name (column_name) //註釋:用於創建索引的語法在不同的數據庫中不一樣。因此,檢查您的數據庫中創建索引的語法。
//在 "Persons" 表的 "LastName" 列上創建一個名為 "PIndex" 的索引:
CREATE INDEX PIndex
ON Persons (LastName)
//如果希望索引不止一個列,可以在括號中列出這些列的名稱,用逗號隔開:
CREATE INDEX PIndex ON Persons (LastName, FirstName)

2、 DROP 語句

  DROP語句可以輕松地刪除索引、表和數據庫。

  DROP INDEX 語句用於刪除表中的索引。

//用於 MS Access 的 DROP INDEX 語法:
DROP INDEX index_name ON table_name
//用於 MS SQL Server 的 DROP INDEX 語法:
DROP INDEX table_name.index_name
//用於 DB2/Oracle 的 DROP INDEX 語法:
DROP INDEX index_name
//用於 MySQL 的 DROP INDEX 語法: ALTER TABLE table_name DROP INDEX index_name

  DROP TABLE 語句用於刪除表。語法:DROP TABLE table_name

  DROP DATABASE 語句用於刪除數據庫。語法:DROP DATABASE database_name

  TRUNCATE TABLE 語句:僅僅需要刪除表內的數據,但並不刪除表本身。語法:TRUNCATE TABLE table_name

3、ALTER TABLE 語句

  ALTER TABLE 語句用於在已有的表中添加、刪除或修改列。

  語法:

//如需在表中添加列,請使用下面的語法:
ALTER TABLE table_name
ADD column_name datatype
//如需刪除表中的列,請使用下面的語法(請註意,某些數據庫系統不允許這種在數據庫表中刪除列的方式):
ALTER TABLE table_name
DROP COLUMN column_name
//要改變表中列的數據類型,請使用下面的語法:
//SQL Server / MS Access:
ALTER TABLE table_name
ALTER COLUMN column_name datatype
//My SQL / Oracle:
ALTER TABLE table_name
MODIFY COLUMN column_name datatype
//Oracle 10G 之後版本:
ALTER TABLE table_name
MODIFY column_name datatype;

  請看 "Persons" 表:

技術分享

  現在,我們想在 "Persons" 表中添加一個名為 "DateOfBirth" 的列。我們使用下面的 SQL 語句:ALTER TABLE Persons ADD DateOfBirth date。新列 "DateOfBirth" 的類型是 date,可以存放日期。數據類型規定列中可以存放的數據的類型。

  現在,"Persons" 表將如下所示:

技術分享

  現在,我們想要改變 "Persons" 表中 "DateOfBirth" 列的數據類型。我們使用下面的 SQL 語句:ALTER TABLE Persons ALTER COLUMN DateOfBirth year。現在 "DateOfBirth" 列的類型是 year,可以存放 2 位或 4 位格式的年份。

  接下來,我們想要刪除 "Person" 表中的 "DateOfBirth" 列。我們使用下面的 SQL 語句:ALTER TABLE Persons DROP COLUMN DateOfBirth。現在加的DateOfBirth列就被刪除了。

4、SQL NULL 值

  如果表中的某個列是可選的,那麽我們可以在不向該列添加值的情況下插入新記錄或更新已有的記錄。這意味著該字段將以 NULL 值保存。

  NULL 值的處理方式與其他值不同。NULL 用作未知的或不適用的值的占位符。

  註意:無法比較 NULL 和 0;它們是不等價的。

  那麽我們如何測試 NULL 值呢?無法使用比較運算符來測試 NULL 值,比如 =、< 或 <>。我們必須使用 IS NULL 和 IS NOT NULL 操作符。

  SQL IS NULL:我們如何僅僅選取在 "Address" 列中帶有 NULL 值的記錄呢?我們必須使用 IS NULL 操作符:

SELECT LastName,FirstName,Address FROM Persons
WHERE Address IS NULL
//請始終使用 IS NULL 來查找 NULL 值。

  SQL IS NOT NULL:我們如何僅僅選取在 "Address" 列中不帶有 NULL 值的記錄呢?我們必須使用 IS NOT NULL 操作符:

SELECT LastName,FirstName,Address FROM Persons
WHERE Address IS NOT NULL

5、SQL NULL 函數

  ISNULL() 函數用於規定如何處理 NULL 值。

  NVL()、IFNULL() 和 COALESCE() 函數也可以達到相同的結果。

//在這裏,我們希望 NULL 值為 0。
//下面,如果 "UnitsOnOrder" 是 NULL,則不會影響計算,因為如果值是 NULL 則 ISNULL() 返回 0:
//SQL Server / MS Access
SELECT ProductName,UnitPrice*(UnitsInStock+ISNULL(UnitsOnOrder,0))
FROM Products
//Oracle:Oracle 沒有 ISNULL() 函數。不過,我們可以使用 NVL() 函數達到相同的結果:
SELECT ProductName,UnitPrice*(UnitsInStock+NVL(UnitsOnOrder,0))
FROM Products
//MySQL:MySQL 也擁有類似 ISNULL() 的函數。不過它的工作方式與微軟的 ISNULL() 函數有點不同。在 MySQL 中,我們可以使用 IFNULL() 函數,如下所示:
SELECT ProductName,UnitPrice*(UnitsInStock+IFNULL(UnitsOnOrder,0))
FROM Products
//或者我們可以使用 COALESCE() 函數,如下所示:
SELECT ProductName,UnitPrice*(UnitsInStock+COALESCE(UnitsOnOrder,0))
FROM Products
//如果alexa列為null值,則賦予0,否則,取原值
select id,name,url,ifnull(alexa,0)from websites;
select id,name,url,COALESCE(alexa,0) from websites;

6、數據類型

  查檢查文檔

SQL基礎(四):SQL命令