大聊MySQL查詢(2)
在《大聊MySQL查詢(1)》中已經介紹了,簡單查詢、條件查詢、分組查詢、分組函式。
(本文中用到的資料庫下載:https://download.csdn.net/my)
現在,再介紹查詢的接下來的幾個內容,首先我還是把查詢順序圖放在這裡:
1、order by 前面提到過 order by 現在詳細介紹一下
按照薪水由小到大排序(系統預設由小到大) select * from emp order by sal;
注: select * from emp order by sal asc; (這是系統預設的升序排列方式,所以可以省略asc)
select * from emp order by sal desc; (降序排列方式)
取得job為MANAGER的員工,按照薪水由小到大排序 select * from emp where job='MANAGER' order by sal;
注:如果包含where語句order by必須放到where後面,如果沒有where語句order by放到表的後面。其實也就是說,先按照一定的條件進行篩選,然後將結果按照升序或降序顯示出來。
按照job和薪水升序 select * from emp order by job,sal;
注:其實也就是說,先按照job的升序排列,在此基礎上,如果有多條記錄的job相同,則再把同一種的job按照sal的升序排列。
2、資料處理函式/單行處理函式
簡單說一下這一部分的內容,(這部分內容,主要是摘錄 power node 那個老師講的)
Lower |
轉換小寫 |
upper |
轉換大寫 |
substr |
取子串(substr(被擷取的字串,起始下標,擷取的長度)) |
length |
取長度 |
trim |
去空格 |
str_to_date |
將字串轉換成日期 |
date_format |
格式化日期 |
format |
設定千分位 |
round |
四捨五入 |
rand() |
生成隨機數 |
Ifnull |
可以將null轉換成一個具體值 |
選幾個來說一下
a) substr 查詢姓名以M開頭所有的員工 select * from emp where substr(ename, 1, 1)=upper('m');
b) trim 取得工作崗位為manager的所有員工 select * from emp where job=trim(upper('manager '));
注:trim會去首尾空格,不會去除中間的空格
c) str_to_date 查詢1981-02-20入職的員工(第二種方法,將字串轉換成date型別)
select * from emp where HIREDATE=str_to_date('1981-02-20','%Y-%m-%d');
select * from emp where HIREDATE=str_to_date('02-20-1981','%m-%d-%Y');
d) date_format 查詢1981-02-20以後入職的員工,將入職日期格式化成yyyy-mm-dd hh:mm:ss
select empno, ename, date_format(hiredate, '%Y-%m-%d %H:%i:%s') as hiredate from emp;
e) format 查詢員工薪水加入千分位和保留兩位小數 select empno, ename, Format(sal, 2) from emp;
f) case … when … then …..else …end 如果job為MANAGERG薪水上漲10%,如果job為SALESMAN工資上漲50%select empno, ename, job, sal, case job when 'MANAGER' then sal*1.1 when 'SALESMAN' then sal*1.5 end as newsal from emp;
g) ifnull select ifnull(comm,0) from emp; 如果comm為null 就替換為 0
3、子查詢
這個地方我也不說什麼,沒有什麼好說的,多寫幾個關於子查詢的程式碼
子查詢就是巢狀的select語句,可以理解為子查詢是一張表
4、limit 的使用
取得前5條資料 select * from emp limit 5;
從第二條開始取兩條資料 select * from emp limit 1,2;
limit 起始位置 ,長度
算是完了吧,其實沒有太多好寫的,多練練可能比較好!!!!!!!!!!!!!