前言:
前面幾篇文章為大家介紹了DML以及DDL語句的使用方法,本篇文章將主要講述常用的查詢語法悲雳。其實(shí)MySQL官網(wǎng)給出了多個(gè)示例數(shù)據(jù)庫供大家實(shí)用查詢,下面我們以最常用的員工示例數(shù)據(jù)庫為準(zhǔn)晌端,詳細(xì)介紹各自常用的查詢語法谚殊。
1.員工示例數(shù)據(jù)庫導(dǎo)入
官方文檔員工示例數(shù)據(jù)庫介紹及下載鏈接:
https://dev.mysql.com/doc/employee/en/employees-installation.html
同樣的,為了方便大家仇参,我這里將員工庫的數(shù)據(jù)庫備份分享給大家嘹叫,大家也可以下載我這份數(shù)據(jù),然后再解壓導(dǎo)入進(jìn)你們本地庫就可以了诈乒。
鏈接: https://pan.baidu.com/s/13s1OH-3DepN-rpejys76Ww
密碼: 2xqx
下載解壓后罩扇,直接導(dǎo)入即可,如鏈接失效可后臺(tái)聯(lián)系我怕磨。
如果你導(dǎo)入完成喂饥,就可以看到下面這6張表了,這就是我們接下來練習(xí)查詢語法要用的表哦肠鲫。
為了讓大家對(duì)示例數(shù)據(jù)庫更了解员帮,這里給出此數(shù)據(jù)庫各表之間的關(guān)系圖:
簡(jiǎn)單介紹下這6張表:
-
departments
:部門表,記錄的是9個(gè)部門的部門編號(hào)和部門名稱导饲。 -
dept_emp
:部門員工表捞高,記錄各部門員工數(shù)據(jù),員工id和部門id渣锦,起始時(shí)間和結(jié)束時(shí)間(注:9999-01-01的意思就是仍在該部門就職)硝岗。 -
dept_manager
:部門經(jīng)理表,同第二張表結(jié)構(gòu)差不多袋毙,記錄每個(gè)部門的每個(gè)經(jīng)理的任職時(shí)期型檀。 -
employees
:?jiǎn)T工信息表,記錄員工信息听盖,員工編號(hào)emp_no是唯一鍵值胀溺。 -
salaries
:薪資表,記錄每個(gè)員工每段時(shí)期的薪資媳溺。 -
titles
:職稱表月幌,記錄每個(gè)員工每段時(shí)期的職位名稱。
2.模糊查詢
#查找名字以L開頭的員工信息
SELECT * FROM employees WHERE first_name LIKE 'L%'悬蔽;
3.排序
#按部門編號(hào)排序
mysql> SELECT * FROM departments ORDER BY dept_no;
+---------+--------------------+
| dept_no | dept_name |
+---------+--------------------+
| d001 | Marketing |
| d002 | Finance |
| d003 | Human Resources |
| d004 | Production |
| d005 | Development |
| d006 | Quality Management |
| d007 | Sales |
| d008 | Research |
| d009 | Customer Service |
+---------+--------------------+
9 rows in set (0.00 sec)
總結(jié):
order by排序默認(rèn)按asc升序來排列
也可指定desc降序排列
4.限制多少行
#取前5行
mysql> SELECT * FROM employees LIMIT 5;
+--------+------------+------------+-----------+--------+------------+
| emp_no | birth_date | first_name | last_name | gender | hire_date |
+--------+------------+------------+-----------+--------+------------+
| 10001 | 1953-09-02 | Georgi | Facello | M | 1986-06-26 |
| 10002 | 1964-06-02 | Bezalel | Simmel | F | 1985-11-21 |
| 10003 | 1959-12-03 | Parto | Bamford | M | 1986-08-28 |
| 10004 | 1954-05-01 | Chirstian | Koblick | M | 1986-12-01 |
| 10005 | 1955-01-21 | Kyoichi | Maliniak | M | 1989-09-12 |
+--------+------------+------------+-----------+--------+------------+
5 rows in set (0.00 sec)
mysql> SELECT * FROM employees ORDER BY hire_date desc LIMIT 5;
+--------+------------+------------+-----------+--------+------------+
| emp_no | birth_date | first_name | last_name | gender | hire_date |
+--------+------------+------------+-----------+--------+------------+
| 463807 | 1964-06-12 | Bikash | Covnot | M | 2000-01-28 |
| 428377 | 1957-05-09 | Yucai | Gerlach | M | 2000-01-23 |
| 499553 | 1954-05-06 | Hideyuki | Delgrande | F | 2000-01-22 |
| 222965 | 1959-08-07 | Volkmar | Perko | F | 2000-01-13 |
| 47291 | 1960-09-09 | Ulf | Flexer | M | 2000-01-12 |
+--------+------------+------------+-----------+--------+------------+
5 rows in set (0.11 sec)
總結(jié):
limit限定顯示前多少行扯躺,可與order by聯(lián)合使用
5.聚合函數(shù)
#查找某員工薪水總和
SELECT SUM(salary) FROM salaries WHERE emp_no = 10001;
#統(tǒng)計(jì)歷史上各個(gè)部門所擁有的員工數(shù)量,并降序排序
mysql> SELECT dept_no, COUNT(*) AS emp_sum FROM dept_emp GROUP BY dept_no ORDER BY emp_sum DESC;
+---------+---------+
| dept_no | emp_sum |
+---------+---------+
| d005 | 85707 |
| d004 | 73485 |
| d007 | 52245 |
| d009 | 23580 |
| d008 | 21126 |
| d001 | 20211 |
| d006 | 20117 |
| d003 | 17786 |
| d002 | 17346 |
+---------+---------+
9 rows in set (0.07 sec)
6.JOIN
#可以試下下面3個(gè)語句執(zhí)行結(jié)果的不同
SELECT *
FROM salaries INNER JOIN dept_emp
ON salaries.emp_no = dept_emp.emp_no
WHERE salaries.emp_no = 10010;
SELECT *
FROM salaries LEFT JOIN dept_emp
ON salaries.emp_no = dept_emp.emp_no
WHERE salaries.emp_no = 10010;
SELECT *
FROM salaries RIGHT JOIN dept_emp
ON salaries.emp_no = dept_emp.emp_no
WHERE salaries.emp_no = 10010;
總結(jié):
a left join b a表全,用b表去匹配a表
LEFT JOIN 關(guān)鍵字會(huì)從左表 (a) 那里返回所有的行录语,即使在右表 (b) 中沒有匹配的行,匹配不到的列用NULL代替
a right join b b表全倍啥,用a表去匹配b表
RIGHT JOIN 關(guān)鍵字會(huì)右表 (b) 那里返回所有的行,即使在左表 (a) 中沒有匹配的行,匹配不到的列用NULL代替
inner join 與join 效果一樣
在表中存在至少一個(gè)匹配時(shí)澎埠,INNER JOIN 關(guān)鍵字返回行
總結(jié):
推薦大家在本地導(dǎo)入這個(gè)示例數(shù)據(jù)庫虽缕,其實(shí)這個(gè)數(shù)據(jù)庫是練習(xí)查詢語法的好素材。對(duì)于我們?nèi)粘W(xué)習(xí)或工作中蒲稳,用的最多的應(yīng)該就是查詢語句了氮趋,個(gè)人以為寫查詢SQL沒有技巧,只有多加練習(xí)才能快速寫出能解決需求的SQL江耀。