來源:實驗樓mysql
本節實驗中學習了 SELECT 語句的經常使用方法:git
基本語法github
數學符號條件sql
AND OR IN數據庫
通配符函數
排序學習
SQL 內置函數和計算spa
子查詢與鏈接查詢.net
輸入命令,下載代碼: git clone https://github.com/shiyanlou/SQL4blog
下載完成後,輸入命令開啓 MySQL 服務並使用 root 用戶登陸:
#打開 MySQL 服務
sudo service mysql start
#使用 root 用戶登陸
mysql -u root
剛纔下載的 SQL4 目錄下,有兩個文件 MySQL-04-01.sql 和 MySQL-04-02.sql,其中第一個文件用於建立數據庫,第二個文件向數據庫中插入數據。 (SQL4目錄在桌面上,你能夠用gedit查看裏面兩個的文件。)
加載文件中的數據,須要在 MySQL 控制檯中輸入命令,
搭建數據庫:
source /home/shiyanlou/Desktop/SQL4/MySQL-04-01.sql
向數據庫插入數據:
source /home/shiyanlou/Desktop/SQL4/MySQL-04-02.sql
SELECT 語句的基本格式爲:
SELECT 要查詢的列名 FROM 表名字 WHERE 限制條件;
若是要查詢表的全部內容,則把 要查詢的列名 用一個星號 * 號表示,表明要查詢表中全部的列。
SELECT * FROM employee;
而大多數狀況,咱們只須要查看某個表的指定的列,好比要查看employee 表的 name 和 age:
SELECT name,age FROM employee;
SELECT 語句經常會有 WHERE 限制條件,用於達到更加精確的查詢。WHERE限制條件能夠有數學符號 (=,<,>,>=,<=) ,剛纔咱們查詢了 name 和 age,如今稍做修改:
SELECT name,age FROM employee WHERE age>25;篩選出 age 大於 25 的結果:
或者查找一個名字爲 Mary 的員工的 name,age 和 phone:
SELECT name,age,phone FROM employee WHERE name='Mary';
#篩選出 age 小於 25,或 age 大於 30 SELECT name,age FROM employee WHERE age<25 OR age>30;
若是須要包含25和30這兩個數字的話,能夠替換爲 age BETWEEN 25 AND 30;
關鍵詞IN和NOT IN的做用和它們的名字同樣明顯,用於篩選「在」或「不在」某個範圍內的結果,好比說咱們要查詢在dpt3或dpt4的人:
SELECT name,age,phone,in_dpt FROM employee WHERE in_dpt IN ('dpt3','dpt4');
關鍵字 LIKE 在SQL語句中和通配符一塊兒使用,通配符表明未知字符。SQL中的通配符是 _ 和 % 。
其中 _ 表明一個未指定字符,% 表明不定個未指定字符。
好比,要只記得電話號碼前四位數爲1101,然後兩位忘記了,則能夠用兩個 _ 通配符代替:
SELECT name,age,phone FROM employee WHERE phone LIKE '1101__'; 這樣就查找出了1101開頭的6位數電話號碼: https://doc.shiyanlou.com/MySQL/sql-04-09.png/wm
另外一種狀況,好比只記名字的首字母,又不知道名字長度,則用 % 通配符代替不定個字符:
SELECT name,age,phone FROM employee WHERE name LIKE 'J%'; 這樣就查找出了首字母爲 J 的人: https://doc.shiyanlou.com/MySQL/sql-04-10.png/wm
計算出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 GROUP BY of_dpt HAVING of_dpt IN (SELECT in_dpt FROM employee WHERE name='Tom');
在處理多個表時,子查詢只有在結果來自一個表時纔有用。但若是須要顯示兩個表或多個表中的數據,這時就必須使用鏈接 (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 表: https://doc.shiyanlou.com/MySQL/sql-04-14.png/wm 另外一個鏈接語句格式是使用 JOIN ON 語法,剛纔的語句等同於:
SELECT id,name,people_num FROM employee JOIN department ON employee.in_dpt = department.dpt_name ORDER BY id;結果也與剛纔的語句相同。
題:使用鏈接查詢的方式,查詢出各員工所在部門的人數與工程數,工程數命名爲 count_project。(鏈接3個表,並使用COUNT內置函數)
答案參考:http://www.javashuo.com/article/p-ngzhqvrq-nd.html
謝謝!