本文是基本的SQL查詢語句用法,內容主要來自Alan Learning SQL這本書第3章,包括select,from,where,group by,having,order by六個查詢子句,後續會深入介紹每個查詢子句的用法。
1. 查詢機制
在已經創建數據庫連接的情況下,當查詢被髮送到服務器端時,服務器在執行查詢語句之前需要進行檢查:
2. 查詢語句
3. select子句
儘管select子句是查詢語句中第一個組成部分,但實際上在數據庫服務中,它是最後被評估的,因爲在確定結果集最後包含哪些列之前,必須先要知道結果集所有可能的列。
select 語句除了能選擇表中的列,還可以包含其他內容,包括:
-> emp_id * 3.14159 empid_x_pi,
-> UPPER(lname) last_name_upper
status, empid_x_pi等是列的別名,使得輸出結果更容易理解,有時爲了清楚的表示別名,一般加掛檢測AS
-> emp_id * 3.14159 AS empid_x_pi,
-> UPPER(lname) AS last_name_upper
4. from子句
其中表既包括永久表(create table產生的表),也包括臨時表(子查詢所返回的表),虛擬表(使用create view子句創建的試圖)
SELECT e.emp_id, e.fname, e.lname
FROM (SELECT emp_id, fname, lname, start_date, title
SELECT e.emp_id, e.fname, e.lname, d.name dept_name #d.name 使用別名dept_name
FROM employee e INNER JOIN department d ## 使用了表別名employee e
表別名也可以使用AS關鍵詞,比如 FROM employee AS e INNER JOIN department AS d
5. Where子句
SELECT emp_id, fname, lname, start_date, title
WHERE (title = 'Head Teller' AND start_date > '2006-01-01')
OR (title = 'Teller' AND start_date > '2007-01-01');
6. group by和having子句
group by對查詢結果進行分組,having對分組結果進行過濾(類似於where子句,但此處不能用Where子句,二者的區別https://www.cnblogs.com/yzdqxing/p/4603508.html)
SELECT d.name, count(e.emp_id) num_employees
FROM department d INNER JOIN employee e
7. order by子句
order by子句對結果集中原始列或者計算表達式的結果進行排序。
SELECT open_emp_id, product_cd
ORDER BY open_emp_id, product_cd;
SELECT account_id, product_cd, open_date, avail_balance
SELECT cust_id, cust_type_cd, city, state, fed_id
還可以制定列的位置進行排序,比如用第2列和第5列進行排序: