1. 程式人生 > >SQL學習筆記|二

SQL學習筆記|二

高階SQL語句:

TOP:用於返回規定要反回的記錄數目。對於擁有大量資料的大型表實用。

註釋:並非所用的資料庫都支援Top語句。

SQL Server 的語法:

SELECT TOP  數字|百分比  列名 FROM 表名

MySQL和Oracle的語法:

MySQL語法

SELECT 列名 FROM 表名 LIMIT 數量;

commit;

Oracle語法

SELECT  列名 FROM 表名 WHERE ROWNUM <= 數量 ;

COMMIT;

取Person表中的50%

SELECT TOP 50 PERCENT * FROM Person

取Person表中的頭兩條是資料

SELECT TOP 2 * FROM Person

LIKE:

SELECT 列名 FROM 表名 WHERE 列名 LIKE 模式(像正則表示式一樣)

選擇城市名以“K”字母開頭的城市。

SELECT * FROM Person WHERE city

選擇城市名以“N”字母結尾的城市:LIKE 'K%'

SELECT * FROM Person WHERE  city LIKE '%N'

選擇城市名中含有“lon”字元的城市。

SELECT *  FROM Person WHERE city LIKE '%lon%'

NOT LIKE :

選擇城市名中不含有"lon’的城市

SELECT * FROM Person WHERE city NOT LIKE "%LON%"

萬用字元:

% 替換一個或多個字元

_ 僅替換一個字元

[^charlist] 含有字串中的任何一個字元

[!charlist]不含有字串集合中的任意字元

從Person表中選取城市名以【ABC】,“A”,“B”,“C”開頭的人。

SELECT *  FROM Person WHERE city LIKE '[ABC]%'

IN:

允許我們在WHERE句子中中規定多個值。

從表選出姓氏為“李”和“吳”的人

SELECT * FROM Person WHERE LastName IN

('李','吳')

BETWEEN:

SELECT column_name(s)  FROM  table_name

WHERE column_name

BETWEEN values1 AND  values2

以字母順序顯示介於“Adams”(包括)和“Carter”(不包括)之間的人。

SELECT * FROM  Person WHERE LastName

BETWEEN 'Adams' AND 'Carter'

SELECT *  FROM Person WHERE LastName

NOT BETWEEN 'Adams' AND 'Carter'

Alias(別名)

使用表別名

SELECT colum_name(s)

FROM table_name

AS alias_name

SELECT po.OrderID,p.LastName,p.FirstName

FROM Person AS p,Proddeuct_Orders As po

WHERE p.LastName='Adams' AND FirstName = 'John'

使用列別名

SELECT  LastName AS Family, FirstName AS Name From Persons

JOIN:

通過應用兩個表的表示式,從兩個表中獲取資料:

誰訂購了什麼產品:

SELECT  Person.LAstName ,Person.FristName,Orders.OrderNo

FROM Person,Oders

WHERE Person,Id_P = Orders.Id_p

下面使用JOIN來實現

SELECT  Person.LastName,Perosns.FirstName,Oreders.Order.OrderNo

FROM Persons

INNER JOIN Orders

ON Persons.Id_p = Orders.Id_P

OERDER BY Person.LAstName

INNER JOIN (內連線)

JOIN:如果表中至少一個匹配,側返回行。

INNER JOIN():在表中至少存在一個匹配,則返回行。

SELECT  列名 FROM 第一個表名

INNER JOIN 第二個表名 ON 表一.列名 = 第二個表名.列名

SELECT Person.LastName,Person.FirstName.Oerders.OerderNo

FROM Persons INNER JOIN Orders ON Person.Id_P = Orders.id_P

ORDER BY Person.LastName

LEFT JOIN:即使右表沒有匹配,也從左表返回所有行。

SELECT Person.LastName,Person.FirstName,Orders.OrderNO

FROM Perons 

LEFT JOIN Orders ON Person.id_P = Orders.id_P

ORDER BY Person.LastName

ROGHT JOIN:即使左表沒有匹配,也從右表返回所有行。 

SELECT Person.LastName,Persons.FirstName,Orders.OrdersNo

FROM Person

RIGHT JOIN Orders ON Person.id_P = Orders.id_P

ORDER BY Person.LastName

FULL JOIN:只要其中一個表中存在匹配,就返回行。

SELECT  Persons.LastName,Persons.FirstName,Orders.OrderNo

FROM Prersons

FULL JOIN  Orders

ON Persons.id_p = Orders.id_P

ORDER BY Persons.LastName

UNION

操作用於合併兩個或多個SELECT語句的結果集。

UNION內部的SELECT語句必須擁有相同數量的列。

列也必須擁有相似的資料型別。

同時每條SEECT語句中的列的順序必須相同。

UNION 預設選取不同的值

UNION ALL 允許 重複的值

SELECT 列名 FROM 表名

UNION

SELECT 列名 FROM 表名

SELECT e_NAME Emplyees_China

UNION 

SELECT E_NAME FROM Emplyees_USA

SELECT INTO

SELECT INTO 語句從一個表中選取據插入到另外的表中

SELECT INTO 語句常用於建立表的數備份檔案或者用於對記錄進行存檔

SELECT * INTO new_table_name FROM old_table_name 

SELCT colum_name INTO new-table_name FROM old_tableanme

向另一個數據庫中拷貝

SELECT * INTO Persons IN 'Bakcup.mdb' FROM Persons

帶有WHERE子句

SELECT LastName,FirstName INTO Persons_backup

FROM Peronss WHERE City='Beijing'

被連線的表

SELEST Persons.LastName,Orders.OrdersNo

INTO Person_Orders_Backup

FROM Persons

INNER JOIN Orders

ON Persons.Id_P=Orders.id_p

CREATE DATABASE

用於建立資料庫

CREATE DATABASE my_db

CREATE TABLE tablename

( 列名 資料型別,列名 資料型別,....)