1. 程式人生 > >[SQL] SQL學習筆記之基礎操作

[SQL] SQL學習筆記之基礎操作

1 SQL介紹

  SQL 是用於訪問和處理資料庫的標準的計算機語言。關於SQL的具體介紹,我們通過回答如下三個問題來進行。

  SQL 是什麼?

  • SQL,指結構化查詢語言,全稱是 Structured Query Language。
  • SQL 是一種 ANSI(American National Standards Institute 美國國家標準化組織)標準的計算機語言。

  SQL 能做什麼?

  • SQL 面向資料庫執行查詢
  • SQL 可從資料庫取回資料
  • SQL 可在資料庫中插入新的記錄
  • SQL 可更新資料庫中的資料
  • SQL 可從資料庫刪除記錄
  • SQL 可建立新資料庫
  • SQL 可在資料庫中建立新表
  • SQL 可在資料庫中建立儲存過程
  • SQL 可在資料庫中建立檢視
  • SQL 可以設定表、儲存過程和檢視的許可權

  雖然 SQL 是一門 ANSI(American National Standards Institute 美國國家標準化組織)標準的計算機語言,但是仍然存在著多種不同版本的 SQL 語言。然而,為了與 ANSI 標準相相容,它們必須以相似的方式共同地來支援一些主要的命令(比如 SELECT、UPDATE、DELETE、INSERT、WHERE 等等)。

lamp 註釋:除了 SQL 標準之外,大部分 SQL 資料庫程式都擁有它們自己的專有擴充套件!

  在網站上如何使用 SQL?

  要建立一個顯示資料庫中資料的網站,需要:

  • RDBMS 資料庫程式(比如 MS Access、SQL Server、MySQL)
  • 使用伺服器端指令碼語言,比如 PHP 或 ASP
  • 使用 SQL 來獲取您想要的資料
  • 使用 HTML / CSS
lamp

註釋:RDBMS (Relational Database Management System)指關係型資料庫管理系統。RDBMS 是 SQL 的基礎,同樣也是所有現代資料庫系統的基礎,比如 MS SQL Server、IBM DB2、Oracle、MySQL 以及 Microsoft Access。

RDBMS 中的資料儲存在被稱為表的資料庫物件中。表是相關的資料項的集合,它由列和行組成。

2 SQL語句

在資料庫上執行的大部分工作都由 SQL 語句完成。我們先介紹幾個有關SQL的注意事項,為我們接下來詳細介紹每一條SQL做一個基礎。

  1)SQL語句的大小寫問題:
  SQL 對大小寫不敏感:SELECT 與 select 是相同的。

2)SQL 語句後面的分號問題:

  某些資料庫系統要求在每條 SQL 語句的末端使用分號。

  分號是在資料庫系統中分隔每條 SQL 語句的標準方法,這樣就可以在對伺服器的相同請求中執行一條以上的 SQL 語句。

3)一些重要的 SQL 命令:

  • SELECT - 從資料庫中提取資料
  • UPDATE - 更新資料庫中的資料
  • DELETE - 從資料庫中刪除資料
  • INSERT INTO - 向資料庫中插入新資料
  • CREATE DATABASE - 建立新資料庫
  • ALTER DATABASE - 修改資料庫
  • CREATE TABLE - 建立新表
  • ALTER TABLE - 變更(改變)資料庫表
  • DROP TABLE - 刪除表
  • CREATE INDEX - 建立索引(搜尋鍵)
  • DROP INDEX - 刪除索引

3 SQL SELECT語句

  SELECT 語句用於從資料庫中選取資料,結果被儲存在一個結果表中,稱為結果集。

  SQL SELECT 語法:

SELECT column_name,column_name
FROM table_name;

  與

SELECT * FROM table_name;

  本文中,我們使用眾所周知的 Northwind 樣本資料庫進行舉例介紹。下面是選自 "Customers" 表的資料:

CustomerIDCustomerNameContactNameAddressCityPostalCodeCountry
1

Alfreds Futterkiste Maria Anders Obere Str. 57 Berlin 12209 Germany
2 Ana Trujillo Emparedados y helados Ana Trujillo Avda. de la Constitución 2222 México D.F. 05021 Mexico
3 Antonio Moreno Taquería Antonio Moreno Mataderos 2312 México D.F. 05023 Mexico
4 Around the Horn Thomas Hardy 120 Hanover Sq. London WA1 1DP UK
5 Berglunds snabbköp Christina Berglund Berguvsvägen 8 Luleå S-958 22 Sweden

  下面的 SQL 語句從 "Customers" 表中選取 "CustomerName" 和 "City" 列:

SELECT CustomerName,City FROM Customers;

  下面的 SQL 語句從 "Customers" 表中選取所有列:

SELECT * FROM Customers;

  在表中,一個列可能會包含多個重複值,有時也許希望僅僅列出不同(distinct)的值。DISTINCT 關鍵詞用於返回唯一不同的值。

  SQL SELECT DISTINCT 語法:

SELECT DISTINCT column_name,column_name
FROM table_name;

4 SQL WHERE語句

   WHERE 子句用於提取那些滿足指定標準的記錄。

  SQL WHERE語法:

SELECT column_name,column_name
FROM table_name
WHERE column_name operator value;

  下面的 SQL 語句從 "Customers" 表中選取國家為 "Mexico" 的所有客戶:

SELECT * FROM Customers
WHERE Country='Mexico';

  SQL 使用單引號來環繞文字值(大部分資料庫系統也接受雙引號)。如果是數值欄位,請不要使用引號。

SELECT * FROM Customers
WHERE CustomerID=1;

  WHERE 子句中的運算子

  下面的運算子可以在 WHERE 子句中使用:

運算子描述
= 等於
<>

不等於。

註釋:在 SQL 的一些版本中,該操作符可被寫成 !=

> 大於
< 小於
>= 大於等於
<= 小於等於
BETWEEN 在某個範圍內
LIKE 搜尋某種模式
IN 指定針對某個列的多個可能值

5 SQL AND與OR關鍵字

  AND & OR 運算子用於基於一個以上的條件對記錄進行過濾。

  下面的 SQL 語句從 "Customers" 表中選取國家為 "Germany" 且城市為 "Berlin" 的所有客戶:

SELECT * FROM Customers
WHERE Country='Germany'
AND City='Berlin';

  下面的 SQL 語句從 "Customers" 表中選取城市為 "Berlin" 或者 "München" 的所有客戶:

SELECT * FROM Customers
WHERE City='Berlin'
OR City='München';

  下面的 SQL 語句從 "Customers" 表中選取國家為 "Germany" 且城市為 "Berlin" 或者 "München" 的所有客戶:

SELECT * FROM Customers
WHERE Country='Germany'
AND (City='Berlin' OR City='München');

6 SQL ORDER BY關鍵字

  ORDER BY 關鍵字用於對結果集按照一個列或者多個列進行排序。ORDER BY 關鍵字預設按照升序對記錄進行排序。如果需要按照降序對記錄進行排序,您可以使用 DESC 關鍵字。

  ORDER BY語法:

SELECT column_name,column_name
FROM table_name
ORDER BY column_name,column_name ASC|DESC;

  下面的 SQL 語句從 "Customers" 表中選取所有客戶,並按照 "Country" 列升序排序:

SELECT * FROM Customers
ORDER BY Country;

  下面的 SQL 語句從 "Customers" 表中選取所有客戶,並按照 "Country" 列降序排序:

SELECT * FROM Customers
ORDER BY Country DESC;

  下面的 SQL 語句從 "Customers" 表中選取所有客戶,並按照 "Country" 和 "CustomerName" 列排序:

SELECT * FROM Customers
ORDER BY Country,CustomerName;

7 SQL INSERT INTO語句

  INSERT INTO 語句用於向表中插入新記錄。

  INSERT INTO 語句可以有兩種編寫形式。第一種形式無需指定要插入資料的列名,只需提供被插入的值即可:

INSERT INTO table_name
VALUES (value1,value2,value3,...);

  第二種形式需要指定列名及被插入的值:

INSERT INTO table_name (column1,column2,column3,...)
VALUES (value1,value2,value3,...);

  假如插入操作前的表如下所示:

CustomerIDCustomerNameContactNameAddressCityPostalCodeCountry
87 Wartian Herkku Pirkko Koskitalo Torikatu 38 Oulu 90110 Finland
88 Wellington Importadora Paula Parente Rua do Mercado, 12 Resende 08737-363 Brazil
89 White Clover Markets Karl Jablonski 305 - 14th Ave. S. Suite 3B Seattle 98128 USA
90 Wilman Kala Matti Karttunen Keskuskatu 45 Helsinki 21240 Finland
91 Wolski Zbyszek ul. Filtrowa 68 Walla 01-012 Poland

  我們要向 "Customers" 表中插入一個新行。我們可以使用下面的 SQL 語句:

INSERT INTO Customers (CustomerName, ContactName, Address, City, PostalCode, Country)
VALUES ('Cardinal','Tom B. Erichsen','Skagen 21','Stavanger','4006','Norway');

  執行插入操作以後的表如下所示:

CustomerIDCustomerNameContactNameAddressCityPostalCodeCountry
87 Wartian Herkku Pirkko Koskitalo Torikatu 38 Oulu 90110 Finland
88 Wellington Importadora Paula Parente Rua do Mercado, 12 Resende 08737-363 Brazil
89 White Clover Markets Karl Jablonski 305 - 14th Ave. S. Suite 3B Seattle 98128 USA
90 Wilman Kala Matti Karttunen Keskuskatu 45 Helsinki 21240 Finland
91 Wolski Zbyszek ul. Filtrowa 68 Walla 01-012 Poland
92 Cardinal Tom B. Erichsen Skagen 21 Stavanger 4006 Norway
lamp

註釋:我們無需插入CustomerID列,它是自動更新的。

  我們也可以在指定的列插入資料。

  下面的 SQL 語句將插入一個新行,但是隻在 "CustomerName"、"City" 和 "Country" 列插入資料(CustomerID 欄位會自動更新):

INSERT INTO Customers (CustomerName, City, Country)
VALUES ('Cardinal', 'Stavanger', 'Norway');

  插入後的表如下所示:

CustomerIDCustomerNameContactNameAddressCityPostalCodeCountry
87 Wartian Herkku Pirkko Koskitalo Torikatu 38 Oulu 90110 Finland
88 Wellington Importadora Paula Parente Rua do Mercado, 12 Resende 08737-363 Brazil
89 White Clover Markets Karl Jablonski 305 - 14th Ave. S. Suite 3B Seattle 98128 USA
90 Wilman Kala Matti Karttunen Keskuskatu 45 Helsinki 21240 Finland
91 Wolski Zbyszek ul. Filtrowa 68 Walla 01-012 Poland
92 Cardinal null null Stavanger null Norway
lamp

註釋:沒有複製的列被自動填充為null。

8 SQL DELETE語句

  DELETE 語句用於刪除表中的行。

  SQL DELETE 語法:

DELETE FROM table_name
WHERE some_column=some_value;
lamp

請注意 SQL DELETE 語句中的 WHERE 子句!
WHERE 子句規定哪條記錄或者哪些記錄需要刪除。如果您省略了 WHERE 子句,所有的記錄都將被刪除!

  假設我們要從 "Customers" 表中刪除客戶 "Alfreds Futterkiste"。我們使用下面的 SQL 語句:

DELETE FROM Customers
WHERE CustomerName='Alfreds Futterkiste' AND ContactName='Maria Anders';

  您可以在不刪除表的情況下,刪除表中所有的行。這意味著表結構、屬性、索引將保持不變:

DELETE FROM table_name;

or

DELETE * FROM table_name;
lamp

註釋:在刪除記錄時要格外小心!因為不能重來!

9 SQL UPDATE語句

  UPDATE 語句用於更新表中已存在的記錄。

  SQL UPDATE語法:

UPDATE table_name
SET column1=value1,column2=value2,...
WHERE some_column=some_value;
lamp 請注意 SQL UPDATE 語句中的 WHERE 子句!
WHERE 子句規定哪條記錄或者哪些記錄需要更新。如果您省略了 WHERE 子句,所有的記錄都將被更新!

  假設我們要把客戶 "Alfreds Futterkiste" 更新為一個新的聯絡人和城市。

CustomerIDCustomerNameContactNameAddressCityPostalCodeCountry
1 Alfreds Futterkiste Maria Anders Obere Str. 57 Berlin 12209 Germany

  我們使用下面的 SQL 語句:

UPDATE Customers
SET ContactName='Alfred Schmidt', City='Hamburg'
WHERE CustomerName='Alfreds Futterkiste';

更新後結果:

CustomerIDCustomerNameContactNameAddressCityPostalCodeCountry
1 Alfreds Futterkiste Alfred Schmidt Obere Str. 57 Hamburg 12209 Germany

10 參考內容

相關推薦

no