1. 程式人生 > >select查詢語句

select查詢語句

一.SELECT 語句的基本格式為:

SELECT 要查詢的列名 FROM 表名字 WHERE 限制條件;

如果要查詢表的所有內容,則把 要查詢的列名 用一個星號 * 號表示(實驗2、3中都已經使用過),代表要查詢表中所有的列。

二.而大多數情況,我們只需要檢視某個表的指定的列,比如要檢視employee 表的 name 和 age:

SELECT name,age FROM employee;

01

三.數學符號條件

SELECT 語句常常會有 WHERE 限制條件,用於達到更加精確的查詢。WHERE限制條件可以有數學符號 (=,<,>,>=,<=

) ,剛才我們查詢了 name 和 age,現在稍作修改:篩選出 age 大於 25 的結果:

SELECT name,age FROM employee WHERE age>25;

或者查詢一個名字為 Mary 的員工的 name,age 和 phone:

SELECT name,age,phone FROM employee WHERE name='Mary';



四.“AND”與“OR”

從這兩個單詞就能夠理解它們的作用。WHERE 後面可以有不止一條限制,而根據條件之間的邏輯關係,可以用 OR(或) 和 AND(且) 連線:

#篩選出 age 小於 25,或 age 大於 30
SELECT name,age FROM employee WHERE age<25 OR age>30;
#篩選出 age 大於 25,且 age 小於 30
SELECT name,age FROM employee WHERE age>25 AND age<30;

而剛才的限制條件 age>25 AND age<30 ,如果需要包含25和30這兩個數字的話,可以替換為 age BETWEEN 25 AND 30 :

五. IN 和 NOT IN

關鍵詞INNOT IN

的作用和它們的名字一樣明顯,用於篩選“在”“不在”某個範圍內的結果,比如說我們要查詢在dpt3dpt4的人:

SELECT name,age,phone,in_dpt FROM employee WHERE in_dpt IN ('dpt3','dpt4');

NOT IN的效果則是,如下面這條命令,查詢出了不在dpt1也不在dpt3的人:

SELECT name,age,phone,in_dpt FROM employee WHERE in_dpt NOT IN ('dpt1','dpt3');

六. 萬用字元

關鍵字 LIKE 在SQL語句中和萬用字元一起使用,萬用字元代表未知字元。SQL中的萬用字元是 _ 和 % 。其中_ 代表一個未指定字元,% 代表不定個未指定字元。

比如,要只記得電話號碼前四位數為1101,而後兩位忘記了,則可以用兩個 _ 萬用字元代替:

SELECT name,age,phone FROM employee WHERE phone LIKE '1101__';

這樣就查找出了1101開頭的6位數電話號碼

另一種情況,比如只記名字的首字母,又不知道名字長度,則用 % 萬用字元代替不定個字元:

SELECT name,age,phone FROM employee WHERE name LIKE 'J%';

這樣就查找出了首字母為 J 的人:

七.對結果排序

為了使查詢結果看起來更順眼,我們可能需要對結果按某一列來排序,這就要用到 ORDER BY 排序關鍵詞。預設情況下,ORDER BY的結果是升序排列,而使用關鍵詞ASCDESC可指定升序降序排序。

比如,我們按salary降序排列,SQL語句為:

SELECT name,age,salary,phone FROM employee ORDER BY salary DESC; 

八.SQL 內建函式和計算

SQL 允許對錶中的資料進行計算。對此,SQL 有 5 個內建函式,這些函式都對 SELECT 的結果做操作:

函式名: COUNT SUM AVG MAX MIN
作用: 計數 求和 求平均值 最大值 最小值

其中 COUNT 函式可用於任何資料型別(因為它只是計數),而 SUM 、AVG 函式都只能對數字類資料型別做計算,MAX 和 MIN 可用於數值、字串或是日期時間資料型別。

具體舉例,比如計算出salary的最大、最小值,用這樣的一條語句:

SELECT MAX(salary) AS max_salary,MIN(salary) FROM employee;

有一個細節你或許注意到了,使用AS關鍵詞可以給值重新命名,比如最大值被命名為了max_salary:

九.子查詢

上面討論的都是SELECT語句都是僅僅涉及一個表中的資料,然而有的時候必須處理多個表才能獲得所需的東西。例如:想要知道名字為“TOM”的員工所在部門做了幾個工程。員工資訊儲存在employee表中,但員工資訊儲存在project表中。

對於這樣的情況,我們可以使用子查詢:

SELECT of_dpt,COUNT(proj_name)AS count_project FROM project WHERE of_dpt IN

(SELECT in_dpt FROM employee WHERE name='TOM');

子查詢還可以擴充套件到3層,四層或者更多層。

十.連線查詢

在處理多個表時,子查詢只有在結果來自一個表的時候才有用。但如果需要顯示兩個表或多個表中的資料,這時就必須使用連線(join)操作。

連線的基本思想就是把兩個或多個表當作一個新的表來操作,如下:

SELECT id,name,people_num

FROM employee,department

WHERE employee.in_dpt=department.dpt_name

ORDER BY id;

這條語句查詢出的是,各個員工所在部門的人數,其中員工的id和name來自employee表,people_num來自department表:

另外一個連線語句就是使用JOIN ON與語法,剛才的語句等同於:

SELECT id,name,people_num

FROM employee JOIN department

ON  employee.in_dpt=department.dpt_name

ORDER BY id;

參考:https://blog.csdn.net/jijerry/article/details/70794559