SQL - 語法



什麼是 SQL 語法?

SQL 語法是一套獨特的規則和指南,編寫 SQL 語句時必須遵循這些規則和指南。本教程透過列出所有基本的 SQL 語法,使您快速入門 SQL。

所有 SQL 語句都以 SELECT、INSERT、UPDATE、DELETE、ALTER、DROP、CREATE、USE、SHOW 等關鍵字中的任何一個開頭,所有語句都以分號 (;) 結尾。

大小寫敏感性

這裡需要注意的最重要的一點是,SQL 不區分大小寫,這意味著SELECTSelect 在 SQL 語句中具有相同的含義。然而,MySQL 會區分表名。因此,如果您使用的是 MySQL,則需要按照資料庫中存在的名稱提供表名。

SQL 表

讓我們考慮一個名為 CUSTOMERS 的表(如下所示),並將其用作參考,以便在同一個表上演示所有 SQL 語句。

ID 姓名 年齡 地址 薪水
1 Ramesh 32 Ahmedabad 2000.00
2 Khilan 25 Delhi 1500.00
3 kaushik 23 Kota 2000.00
4 Chaitali 25 Mumbai 6500.00
5 Hardik 27 Bhopal 8500.00
6 Komal 22 Hyderabad 4500.00
7 Muffy 24 Indore 10000.00

SQL 語句

本教程列出了各種 SQL 語句。它們中的大多數與 MySQL、Oracle、Postgres 和 SQL Server 資料庫相容。

所有 SQL 語句都需要在每個語句的末尾使用分號 (;)。分號是分隔不同 SQL 語句的標準方法,允許在一行中包含多個 SQL 語句。

本教程中給出的所有 SQL 語句都已在 Linux 和 Windows 上的 MySQL 伺服器上進行了測試。

SQL CREATE DATABASE 語句

要在資料庫中儲存資料,您首先需要建立它。這對於區分屬於某個組織的資料是必要的。

您可以使用以下語法建立資料庫:

CREATE DATABASE database_name;

讓我們嘗試使用CREATE DATABASE 語句在 SQL 中建立一個示例資料庫sampleDB

CREATE DATABASE sampleDB

SQL USE 語句

建立資料庫後,需要使用它才能開始相應地儲存資料。以下是將當前位置更改為所需資料庫的語法:

USE database_name;

我們可以透過在 SQL 中使用USE 語句將前面建立的 sampleDB 設定為預設資料庫:

USE sampleDB;

SQL DROP DATABASE 語句

如果資料庫不再需要,您也可以刪除它。要刪除/刪除資料庫,請使用以下語法:

DROP DATABASE database_name;

您也可以使用 SQL 中的DROP DATABASE 語句刪除 sampleDB 資料庫:

DROP DATABASE sampleDB;

SQL CREATE TABLE 語句

在 SQL 驅動的資料庫中,資料以結構化的方式儲存,即表格的形式。要建立表,使用以下語法:

CREATE TABLE table_name(
   column1 datatype,
   column2 datatype,
   column3 datatype,
   .....
   columnN datatype,
   PRIMARY KEY( one or more columns )
);

下面的程式碼塊是一個示例,它建立了上面給出的 CUSTOMERS 表,其中 ID 作為主鍵,NOT NULL 是約束,表示在建立此表中的記錄時這些欄位不能為 NULL:

CREATE TABLE CUSTOMERS(
   ID   INT              NOT NULL,
   NAME VARCHAR (20)     NOT NULL,
   AGE  INT              NOT NULL,
   ADDRESS  CHAR (25) ,
   SALARY   DECIMAL (18, 2),
   PRIMARY KEY (ID)
);

SQL DESC 語句

資料庫中的每個表都有其自身的結構。要顯示資料庫表的結構,我們使用 DESC 語句。以下是語法:

DESC table_name;

但是,DESC 語句僅適用於少數 RDBMS 系統;因此,讓我們透過在 MySQL 伺服器上使用 DESC 語句來看一個示例:

DESC CUSTOMERS;

SQL INSERT INTO 語句

SQL INSERT INTO 語句用於將資料插入資料庫表中。以下是語法:

INSERT INTO table_name( column1, column2....columnN)
VALUES ( value1, value2....valueN);

以下示例語句將在空的 CUSTOMERS 表中建立七條記錄。

INSERT INTO CUSTOMERS VALUES
(1, 'Ramesh', 32, 'Ahmedabad', 2000.00 ),
(2, 'Khilan', 25, 'Delhi', 1500),
(3, 'kaushik', 23, 'Kota', 2000),
(4, 'Chaitali', 25, 'Mumbai', 6500),
(5, 'Hardik', 27, 'Bhopal', 8500),
(6, 'Komal', 22, 'Hyderabad', 4500),
(7, 'Muffy', 24, 'Indore', 10000);

SQL SELECT 語句

為了從資料庫表中檢索儲存資料的 result-sets,我們使用 SELECT 語句。以下是語法:

SELECT column1, column2....columnN FROM table_name;

要從 CUSTOMERS 表中檢索資料,我們使用如下所示的 SELECT 語句。

SELECT * FROM CUSTOMERS;

SQL UPDATE 語句

當資料庫表中儲存的資料已過時且需要更新而無需刪除表時,我們使用 UPDATE 語句。以下是語法:

UPDATE table_name
SET column1 = value1, column2 = value2....columnN=valueN
[ WHERE  CONDITION ];

為了檢視示例,以下查詢將更新 ID 號為 6 的客戶的地址。

UPDATE CUSTOMERS SET ADDRESS = 'Pune' WHERE ID = 6;

SQL DELETE 語句

無需從資料庫中刪除整個表,您還可以透過應用條件來刪除資料的特定部分。這是使用 DELETE FROM 語句完成的。以下是語法:

DELETE FROM table_name WHERE  {CONDITION};

以下程式碼包含一個查詢,該查詢將刪除 ID 為 6 的客戶。

DELETE FROM CUSTOMERS WHERE ID = 6;

SQL DROP TABLE 語句

當不再需要時,要從資料庫中完全刪除表,請使用以下語法:

DROP TABLE table_name;

此查詢將從資料庫中刪除 CUSTOMERS 表。

DROP TABLE CUSTOMERS;

SQL TRUNCATE TABLE 語句

TRUNCATE TABLE 語句在 SQL 中用於刪除表的資料,但不刪除表本身。使用此 SQL 語句時,表將像空表一樣保留在資料庫中。以下是語法:

TRUNCATE TABLE table_name;

以下查詢將刪除 CUSTOMERS 表的所有記錄:

TRUNCATE TABLE CUSTOMERS;

SQL ALTER TABLE 語句

ALTER TABLE 語句用於更改表的結構。例如,您可以使用此語句新增、刪除和修改列的資料。以下是語法:

ALTER TABLE table_name 
{ADD|DROP|MODIFY} column_name {data_type};

以下是如何使用 ALTER TABLE 命令向 CUSTOMERS 表新增新列的示例:

ALTER TABLE CUSTOMERS ADD SEX char(1);

SQL ALTER TABLE 語句(重新命名)

ALTER TABLE 語句也用於更改表名。使用以下語法:

ALTER TABLE table_name RENAME TO new_table_name;

以下是如何使用 ALTER TABLE 命令重新命名 CUSTOMERS 表的示例:

ALTER TABLE CUSTOMERS RENAME TO NEW_CUSTOMERS;

SQL DISTINCT 子句

資料庫中的 DISTINCT 子句用於識別列中的非重複資料。使用 SELECT DISTINCT 語句,您可以從列中檢索不同的值。以下是語法:

SELECT DISTINCT column1, column2....columnN FROM   table_name;

例如,讓我們將DISTINCT 關鍵字與 SELECT 查詢一起使用。重複的薪水 2000.00 只會檢索一次,而其他記錄將被忽略。

SELECT DISTINCT SALARY FROM CUSTOMERS ORDER BY SALARY;

SQL WHERE 子句

WHERE 子句用於透過應用條件來過濾表中的行。以下是用於從表中檢索已過濾行的語法:

SELECT column1, column2....columnN
FROM   table_name
WHERE  CONDITION;

以下查詢是一個示例,使用 SELECT 語句從 CUSTOMERS 表中獲取薪水大於 2000 的所有記錄:

SELECT ID, NAME, SALARY 
FROM CUSTOMERS 
WHERE SALARY > 2000;

SQL AND/OR 運算子

AND/OR 運算子用於在 WHERE 子句中應用多個條件。以下是語法:

SELECT column1, column2....columnN
FROM   table_name
WHERE  CONDITION-1 {AND|OR} CONDITION-2;

以下查詢是一個示例,使用 SELECT 語句從 CUSTOMERS 表中獲取薪水大於 2000 且年齡小於 25 的所有記錄:

SELECT ID, NAME, SALARY FROM CUSTOMERS WHERE SALARY > 2000 AND age < 25;

SQL IN 子句

IN 運算子用於使用 WHERE 子句檢查資料是否存在於列中。以下是語法:

SELECT column1, column2....columnN
FROM   table_name
WHERE  column_name IN (val-1, val-2,...val-N);

例如,我們想使用IN運算子顯示名稱等於'Khilan'、'Hardik'和'Muffy'(字串值)的記錄,如下所示:

SELECT * FROM CUSTOMERS 
WHERE NAME IN ('Khilan', 'Hardik', 'Muffy');

SQL BETWEEN 子句

BETWEEN運算子用於使用WHERE子句從表中檢索落在特定範圍內的值。語法如下:

SELECT column1, column2....columnN
FROM   table_name
WHERE  column_name BETWEEN val-1 AND val-2;

讓我們嘗試使用BETWEEN運算子檢索AGE介於20到25之間的CUSTOMERS記錄。

SELECT * FROM CUSTOMERS WHERE AGE BETWEEN 20 AND 25;

SQL LIKE 子句

LIKE運算子用於使用WHERE子句從表中檢索與特定模式匹配的值。語法如下:

SELECT column1, column2....columnN
FROM   table_name
WHERE  column_name LIKE { PATTERN };

例如,讓我們嘗試顯示CUSTOMERS表中SALARY以200開頭的所有記錄。

SELECT * FROM CUSTOMERS WHERE SALARY LIKE '200%';

SQL ORDER BY 子句

ORDER BY子句用於按給定/指定的順序排列列值。語法如下:

SELECT column1, column2....columnN
FROM   table_name
WHERE  CONDITION
ORDER BY column_name {ASC|DESC};

在下面的示例中,我們嘗試按客戶名稱的字母順序升序排列結果:

SELECT * FROM CUSTOMERS ORDER BY NAME ASC;

SQL GROUP BY 子句

GROUP BY子句用於將列的值組合在一起。語法如下:

SELECT SUM(column_name)
FROM   table_name
WHERE  CONDITION
GROUP BY column_name;

我們嘗試按客戶的年齡對客戶進行分組,並使用以下查詢計算每個年齡組的平均工資:

SELECT ADDRESS, AGE, SUM(SALARY) 
AS TOTAL_SALARY FROM CUSTOMERS 
GROUP BY ADDRESS, AGE;

SQL COUNT 函式

COUNT函式給出指定列中非空值的個數。語法如下:

SELECT COUNT(column_name)
FROM   table_name
WHERE  CONDITION;

讓我們看一個例子:

SELECT AGE, COUNT(Name) FROM CUSTOMERS GROUP BY AGE;

SQL HAVING 子句

HAVING子句也用於透過應用條件來過濾一組行。語法如下:

SELECT SUM(column_name)
FROM   table_name
WHERE  CONDITION
GROUP BY column_name
HAVING (arithematic function condition);

在下面的示例中,我們嘗試檢索CUSTOMERS表中工資總和大於5000的所有記錄:

SELECT ADDRESS, AGE, SUM(SALARY) AS 
TOTAL_SALARY FROM CUSTOMERS GROUP BY 
ADDRESS, AGE HAVING TOTAL_SALARY >=5000 
ORDER BY TOTAL_SALARY DESC;

SQL CREATE INDEX 語句

要建立資料庫表的索引,SQL提供CREATE INDEX語句。語法如下:

CREATE UNIQUE INDEX index_name
ON table_name ( column1, column2,...columnN);

讓我們使用以下查詢為現有CUSTOMERS表中名為'NAME'的列建立一個索引:

CREATE INDEX sample_index on CUSTOMERS(NAME);

SQL DROP INDEX 語句

DROP INDEX語句用於從表中刪除索引。語法如下:

DROP INDEX index_name ON table_name;

讓我們使用以下查詢刪除之前為現有CUSTOMERS表中名為'NAME'的列建立的索引:

DROP INDEX sample_index on CUSTOMERS;
廣告