SQL語句之-簡單查詢

   

SQL 語句的語法順序是:數據庫

 

  • SELECT[DISTINCT]
  • FROM
  • WHERE
  • GROUP BY
  • HAVING
  • UNION
  • ORDER BY

 

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 呢?

  • 語法更加清楚
  • 求值順序比OR AND容易管理
  • 比OR執行速度更快,性能好
  • 最大優勢,能夠包含其餘的SELECT語句

七、高級過濾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條件鏈接字句
  • 在FROM字句中使用JOIN.......ON

-- 查看訂單編號,購買數量,購買商品編號(訂單表),用戶姓名(用戶表)

【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)

 

三、自聯結

相關文章
相關標籤/搜索