Mysql語法入門與進階
阿新 • • 發佈:2021-09-13
1. Mysql語法分類
-
DDL:資料定義語言(Data Define Language):create(建立),alter(修改),drop(刪除),TRUNCATE(截斷),RENAME(重新命名);
-
DML:select(查詢),delete(刪除),update(更新),insert(新增);
-
DCL:grant(新增許可權),revoke(回收許可權);
2. 資料表操作
2.1 修改表名
alter table 舊錶名 rename to 新表名;
2.2 增加一列
alter table 表名 add 新列名 欄位型別 [欄位選項];
2.3 刪除一列
alter table 表名 drop 欄位名;
2.4 修改列型別
alter table 表名 modify 欄位名 新的欄位型別 [新的欄位選項];
2.5 修改列名稱
alter table 表名 change 原欄位名 新欄位名 新的欄位型別 [新的欄位選項];
3. 資料操作
SQL完整語法:select * from user where group by having order by limit
3.1 ifnull
注意:只要有null參與的運算,結果一定為null
select name,(sal+comm)*12 as yearsql from emp; # 解決辦法:ifnull()空處理函式 select name,(sal+ifnull(comm,0))*12 as yearsql from emp;
3.2 count(id)與count(*)與count(1)
- count(*):對行的資料進行計算,包含NULL
- count(1):和上述一樣
- count(column):對特定列進行計算,不包含NULL
3.3 where後面不能用聚合函式
4. 關於group by,having
分組函式:按照某個欄位或某些欄位進行分組。
having:對分組之後的資料進行再次過濾。
如:找出每個工作崗位的最高薪資
1. select XXXXXX from emp group by job; # 先分組 2. select max(sql) from emp group by job; # 查詢出來的只要最高工資,不知道最高工資屬於誰 3. select ename,max(sal),job from emp group by job; # 雖然查出來了人,但是資料有問題,ename是從該job分組裡面取的一個人的enma,不一定恰好就是最高工資那個人的名字 4. 結論:當一條sql語句有group by的時候。select 後面只能跟分組欄位,或聚合函式(max,avg..) 否則查詢出來的結果毫無意義0
如:找出每個部門的最高薪資,要求只顯示薪資大於3000的資料【能用where代替having的情況】
# 效率低
select max(sal),detptno from emp group by deptno having max(sal) > 3000;
# 效率高
select max(sql),deptno from emp where sal > 3000 group by deptno;
如:找出每個部門的平均薪資,要求只顯示薪資大於3000的資料【不能用where代替having的情況】
select deptno,avg(sql) from emp group by deptno having avg(sal) > 3000