SQL 語句的語法順序是:數據庫
1、查詢SELECToracle
一、查詢所有列:SELECT * FROM products性能
二、查詢選中的列:SELECT prod_name,prod_id FROM products; 列之間要用逗號隔開,通常而言除非須要全部的列才用通配符檢索,不然最好不要用,這樣會下降檢索和應用程序的性能。spa
三、去掉重複出現的值:SELECT DISTINCT vend_id FROM products; DISTINCT關鍵字做用於全部的列,若是後面緊跟二個列,則結果會是顯示全部數據。3d
四、限制顯示結果:code
SQLservice數據庫:SELECT TOP 4 prod_name FROM products;blog
MySQL數據庫:SELECT prod_name FROM products LIMIT 5排序
檢索其中的幾行:SELECT prod_name FROM products LIMIT 4 OFFSET 2 第一個數字是檢索的行數顯示四行,第二個數字從哪裏開始,不包括啓始的,至關於從第三行開始。it
等價於==SELECT prod_name FROM products LIMIT 2,4 注意數字是和上面相反的class
oracle數據庫:SELECT prod_name FROM products LIMIT WHERE ROWNUM <=5
五、註釋:#號
多行註釋:/* */
2、排序數據 ORDER BY
一、單列排序:SELECT prod_name FROM products ORDER BY prod_name; ORDER BY保證是最後一條字句,否則會報錯
二、多列排序:
SELECT prod_id,prod_price, prod_name FROM products
ORDER BY prod_price, prod_name;
四、按照列位置排序:--結果與上面同樣
SELECT prod_id,prod_price, prod_name FROM products ORDER BY 2,3;
五、指定排序方向:
DESC--降序,默認是升序,若是想多列都排序,必須對沒列指定DESC
SELECT prod_id,prod_price, prod_name FROM products ORDER BY prod_price DESC,prod_name;
3、過濾數據
一、使用where字句--行數
SELECT prod_id,prod_price, prod_name FROM products
WHERE prod_price=3.49
二、where字句操做符:大於>、小於<、不等於<> !=、>=、<=、
(1)檢查單個值
SELECT prod_id,prod_price, prod_name FROM products WHERE prod_price >10;
(2)不匹配檢查
SELECT prod_id,prod_price, prod_name FROM products WHERE prod_id !='DLL01';
(3)範圍值檢查
SELECT prod_id,prod_price, prod_name FROM products WHERE prod_price BETWEEN 5.99 AND 10 包括開始和結束的值
(4)空值檢查
SELECT cust_name,cust_email FROM customers WHERE cust_email IS NULL
三、高級過濾AND-且的關係
SELECT prod_id,prod_price,prod_name,vend_id FROM products
WHERE vend_id='DLL01' AND prod_price<=4
四、高級過濾OR-或的關係
SELECT prod_id,prod_price,prod_name,vend_id FROM products
WHERE vend_id='DLL01' OR prod_price>4
ORDER BY prod_price DESC
五、高級過濾求值順序
想要的是>10的數據,爲何獲得小於10的呢?這是由於and的優先級高於OR,因此計算的順序變成了
(vend_id='BRS01' AND prod_price>=10),應該修改成如下語句,括號的優先級高於其餘二個
六、高級過濾IN--符合選擇條件的
SELECT prod_id,prod_price,prod_name,vend_id FROM products
WHERE vend_id IN('DLL01','BRS01')
ORDER BY prod_price DESC
其實和OR是相同的功能,爲何用IN 呢?
七、高級過濾NOT——否認其後的條件
SELECT prod_id,prod_price,prod_name,vend_id FROM products
WHERE NOT vend_id ='DLL01'
ORDER BY prod_name
通常配合IN 、BETWEEN、EXISTS使用
4、更新
1 UPDATE Customers SET cust_email = 'kim@thetoystore.com'
2 WHERE cust_id = '1000000005';//沒有WHERE子句,DBMS將會用這個電子郵件地址更新Customers表中的全部行
3
4 UPDATE Customers SET cust_contact = 'Sam Roberts',cust_email = 'sam@toyland.com' WHERE cust_id = '1000000006';//更新多個列
5
6 DELETE FROM Customers WHERE cust_id = '1000000006';//刪除數據
5、子查詢
假如須要列出訂購物品RGAN01的全部顧客,應該怎樣檢索?下面列出具體的步驟。
1.檢索包含物品RGAN01的全部訂單的編號。
2.檢索具備前一步驟列出的訂單編號的全部顧客的ID。
3.檢索前一步驟返回的全部顧客ID的顧客信息。
1 -- SELECT order_num,prod_id FROM orderitems WHERE prod_id='RGAN01'
2 -- SELECT cust_id FROM orders WHERE order_num IN(20007,20008) 3 SELECT cust_id FROM orders WHERE order_num IN (SELECT order_num FROM orderitems WHERE prod_id = 'RGAN01');//結合二個語句
SELECT cust_name, cust_contact
FROM Customers
WHERE cust_id IN (SELECT cust_id
FROM Order
WHERE order_num IN (SELECT order_num
FROM OrderItems
WHERE prod_id = 'RGAN01'));
6、聯結表
表結構
一、內聯結查詢
根據表中的共同列來查詢的,是指主外鍵關係,二個表沒有主次之分。
-- 查看訂單編號,購買數量,購買商品編號(訂單表),用戶姓名(用戶表)
【WHERE】
2個表
3個表
【JOIN .........IN】
二、外連接查詢
至少返回一個表中的全部記錄,根據匹配條件有選擇的返回另外一個表中的記錄,有主次之分
【左外鏈接】
LEFT JOIN 以左表爲主,返回主表的全部記錄,若是左表的一些行在右表沒有匹配,用NULL
【右外鏈接】
右邊的爲主表
下面二個語法是等價的
-- SELECT vend_name,prod_name,prod_price FROM vendors,products WHERE vendors.vend_id = products.vend_id; -- SELECT vend_name,prod_name,prod_price FROM vendors JOIN products ON vendors.vend_id=products.vend_id;//和上面等價
二、聯結多個表
SELECT prod_name, vend_name, prod_price, quantity FROM OrderItems, Products, Vendors WHERE Products.vend_id = Vendors.vend_id AND OrderItems.prod_id = Products.prod_id AND order_num = 20007;
不要聯結沒必要要的表。聯結的表越多,性能降低越厲害。
使用別名
SELECT cust_name, cust_contact FROM Customers AS C, Orders AS O, OrderItems AS OI WHERE C.cust_id = O.cust_id AND OI.order_num = O.order_num AND prod_id = 'RGAN01'; //Oracle不支持AS關鍵字。要在Oracle中使用別名,能夠不用AS,簡單地指定列名便可(所以,應該是Customers C,而不是Customers AS C)
三、自聯結