SQL進階語法(筆記)

SELESCT TOP子句==>指定返回記錄的數量

注意:1)不是所有的數據庫都支持。2) MySQL==> LIMIT     ORACLE ==> ROWNUM
MySQL中的用法

SELECT column_name(s)
FROM table_name
WHERE condition
LIMIT number;

ORACLE中的用法

SELECT column_name(s)
FROM table_name
WHERE ROWNUM<=number;

eg(MySQL):

SELECT * FROM Customers
WHERE Country='Germany'
LIMIT 3;

LIKE操作符==> 模糊匹配查詢

兩個通配符(極其重要):
    1)% - 匹配0個、1個及多個字符
    2)_ - 匹配單個字符
LIKE語法

SELECT column1, column2, ...
FROM table_name
WHERE columnN LIKE pattern;

eg:(選擇客戶名稱以a結尾的所有客戶)

SELECT *EROM Customers
WHERE CustomerName LIKE "%a";

Wildcards通配符

①%
②_
③[charlist]通配符  
eg:"[bsp]%"==>以b、s或者p開頭
        "%[a-c]"==>以a、b或c開頭
④[!charlist]通配符

IN運算符

==>用於在WHERE子句中指定多個值,可以看作是多個OR條件的簡寫

IN語法:

SELECT column_name(s)
FROM table_name
WHERE column_name IN (value1, value2, ...);

eg:(選擇位於“Germany”,“France”和“UK”的所有客戶)

SELECT * FROM Customers
WHERE Country IN ('Germany', 'France', 'UK');

BETWEEN運算符==>選擇給定範圍內的值(數字、文本或者日期)

BETWEEN語法

SELECT column_name(s)
FROM table_name
WHERE column_name BETWEEN value1 AND value2;

eg:(選擇價格在10和20之間的所有產品)

SELECT * FROM Products
WHERE Price BETWEEN 10 AND 20;

帶有 IN 的 BETWEEN 操作符實例
eg:(選擇價格在10到20之間,並且CategoryID不是1、2或3的所有產品)

SELECT * FROM Products
WHERE (Price BETWEEN 10 AND 20)
AND NOT CategoryID IN (1,2,3);

帶有文本值的 BETWEEN 操作符實例

eg:(選擇所有帶有ProductName BETWEEN'Carnarvon Tigers'和'Mozzarella di Giovanni'的產品)
SELECT * FROM Products
WHERE ProductName BETWEEN 'Carnarvon Tigers' AND 'Mozzarella di Giovanni'
ORDER BY ProductName;

帶有日期值的 BETWEEN 操作符實例

eg(選取 OrderDate 介於 '04-July-1996' 和 '09-July-1996' 之間的所有訂單):
SELECT * FROM Orders
WHERE OrderDate BETWEEN #07/04/1996# AND #07/09/1996#;

注意,在不同的數據庫中,BETWEEN 操作符會產生不同的結果!
在一些數據庫中,BETWEEN 選取介於兩個值之間但不包括兩個測試值的字段。
在一些數據庫中,BETWEEN 選取介於兩個值之間且包括兩個測試值的字段。
在一些數據庫中,BETWEEN 選取介於兩個值之間且包括第一個測試值但不包括最後一個測試值的字段。

因此,請檢查您的數據庫是如何處理 BETWEEN 操作符!
(經測試,MySQL中的BETWEEN包括兩個測試值的字段)

SQL數據類型

SQL JOIN

==>基於表之間的共同字段,把兩個或多個表的行結合起來

幾種不同的JOIN類型:
-->INNER JOIN:如果表中有至少一個匹配,則返回行
-->LEFT JOIN:即使右表中沒有匹配,也從左表返回所有的行
-->RIGHT JOIN:即使左表中沒有匹配,也從右表返回所有的行
-->FULL JOIN:只要其中一個表中存在匹配,則返回行

1)INNER JOIN ==>選擇兩個表中具有匹配值的記錄

語法:
SELECT column_name(s)
FROM table1
INNER JOIN table2 ON table1.column_name = table2.column_name;
eg:
SELECT Customers.CustomerName, Orders.OrderID 
FROM Customers 
INNER JOIN Orders 
ON Customers.CustomerID=Orders.CustomerID 
ORDER BY Customers.CustomerName;

2)LEFT JOIN==>必返回table1,若沒有符合條件的table2,則返回null

語法:
SELECT column_name(s)
FROM table1
LEFT JOIN table2
ON table1.column_name=table2.column_name;
eg:
SELECT Customers.CustomerName, Orders.OrderID
FROM Customers
LEFT JOIN Orders 
ON Customers.CustomerID = Orders.CustomerID
ORDER BY Customers.CustomerName;
--返回Customers中的所有行,若Orders沒有匹配的值則返回null

3)RIGHT JOIN==>用法與LEFT JOIN類似

4)FULL OUTER JOIN==>當左右兩表匹配時,返回所有記錄。對不匹配項也會列出。

語法:
SELECT column_name(s)
FROM table1
FULL OUTER JOIN table2 ON table1.column_name = table2.column_name;

Self JOIN==>SQL自連接

語法:
SELECT column_name(s)
FROM table1 T1, table1 T2
WHERE condition;

eg:
SELECT A.CustomerName AS CustomerName1, B.CustomerName AS CustomerName2, A.City
FROM Customers A, Customers B
WHERE A.CustomerID <> B.CustomerID
AND A.City = B.City 
ORDER BY A.City;

SQL UNION運算符==>用於組合兩個或更多SELECT語句的結果集。

要求:
①SELECT語句列數相同
②列具有相似的數據類型
③每個SELECT語句中的列以相同的順序排列

UNION語法:(默認選擇不同的值)
SELECT column_name(s) FROM table1
UNION
SELECT column_name(s) FROM table2;

UNION ALL語法:(允許重複值)
SELECT column_name(s) FROM table1
UNION ALL
SELECT column_name(s) FROM table2;

UNION與WHERE
eg:(從客戶和供應商中選擇不同的德國城市)
SELECT City, Country FROM Customers
WHERE Country='Germany'
UNION
SELECT City, Country FROM Suppliers
WHERE Country='Germany'
ORDER BY City;

SELECT INTO==>從一個表中複製數據,然後插入到新表中(MySQL不支持)

語法:

SELECT *
INTO newtable [IN externaldb]
FROM table1;

用於 MySQLDROP 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

CREAT DATABASE語句==》數據庫的創建
語法:

CREAT DATABASE dbName;

CREAT TABLE語句==》數據庫的表的創建
語法:

CREAT TABLE tbName(
column_name1 data_type(size),
column_name2 data_type(size),
column_name3 data_type(size),
column_name4 data_type(size)
);

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

eg:(examples for mysql!!)

--向table1中添加user_eat列(最大長度爲32字符)
ALTER TABLE table1 ADD user_eat VARCHAR (32);
--添加主鍵
ALTER TABLE table1 ADD PRIMARY KEY (user_ID);

--刪除列
ALTER TABLE table1 DROP user_eat

--修改列的數據類型
ALTER TABLE table1 MODIFY COLUMN user_eat VARCHAR (8);

--同時修改列名和數據類型
ALTER TABLE table1 CHANGE COLUMN user_sex user_lovers CHAR(2);

--AUTO_INCREMENT==》自動插入增量字段
ALTER TABLE table1 MODIFY user_ID INT AUTO_INCREMENT;

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章