大家好, 歡迎遇到你. 繼上兩篇查詢彙總貼後,今天整理一下數據表的增加、修改、刪除。
上兩篇超鏈接:
基礎篇 傳送門
進階篇 傳送門
加上今天整理的這篇,就湊齊了增刪改查四大天王了!
本文內容其實挺抽象的,因爲原始表格您沒有見過,所以閱讀的過程僅能熟悉或者說在心中跑一遍代碼。如果需要原表格,可以私聊我要。之前提供過二維碼,然後文章就審覈不過去了。
INSERT 語句
普通語法
插入寫入記錄,可以是一條記錄,也可以是多條記錄
- INSERT INTO 表名(字段1,字段2,…) VALUES (值1,值2,…);.
- INSERT INTO 表名(字段1,字段2,…) VALUES (值1,值2,…),(值1,值2,…);
-- INSERT INTO
INSERT INTO t_dept (deptno, dname, loc)
VALUES (50,'技術部','北京'),(60,'後勤部','北京'),(70,'保安部','北京');
-- 向技術部添加一條員工記錄, 只知道他是技術部,不知道技術部是什麼編號
INSERT INTO t_emp
(empno,ename, job,mgr,hiredate,sal,comm,deptno)
VALUES (8001,'劉娜','SALESMAN',8000,'1988-12-20',2000,NULL,
(SELECT deptno FROM t_dept WHERE dname='技術部'));
-- 子查詢只能是一個單行單列纔可以.
INSERT方言語法
不具備通用性[red]
mysql的方言: INSERT INTO 表名 SET 字段1=值1,字段2=值2,…
IGNORE 語句
ignore關鍵字讓insert只插入數據庫不存在的記錄
- INSERT [IGNORE] INTO 表名…;
案例: 70已有了(上邊插入的),現在再插入一個70和一個80,運行後記得刪除
-- 70已有,80沒有
INSERT IGNORE INTO t_dept ( deptno,dname,loc)
values (70,'A','北京'),(80,'B','上海');
UPDATE 語句
用來修改記錄的,語法如下:
UPDATE [IGNORE] 表名
SET 字段1=值1,字段2=值2,…
[WHERE 條件1 . …] – 寫了就是條件修改
[ORDER BY…] – 寫了就按排序修改
[LIMIT…]; – 只能修改前第一個分頁記錄, 比如limit 10,代表前十條
案例&練習:
-- 案例1: 把每位員工編號和上司編號都加一
UPDATE t_emp SET empno=empno+1 , mgr=mgr+1
ORDER BY empno DESC;
-- 案例2:把月收入前三名員工底薪減100,用LIMIT完成
UPDATE t_emp
SET sal = sal-100
ORDER BY sal+IFNULL(comm,0) DESC
LIMIT 3;
update錶鏈接
- 語法: **UPDATE 表1 JOIN 表2 ON 條件 SET 字段1=值1, 字段2=值2, … **
- 錶鏈接的UPDATE語句可以修改多張表的記錄
- 語法: : UPDATE 表1, 表2 SET 字段1=值1, 字段2=值2, … WHERE 連接條件
案例:
-- 把ALLEN調往RESEARCH部門,職務調整爲ANALYST
-- e.deptno=d.deptno 這句話是把research部門編號,賦給艾倫的編號
UPDATE t_emp e JOIN t_dept d
SET e.deptno=d.deptno ,e.job='ANALYST' , d.loc="北京"
WHERE e.ename="ALLEN" AND d.dname="RESEARCH";
-- 把底薪低於公司平均底薪的員工,底薪增加150元
-- 錶鏈接update
UPDATE t_emp e JOIN (SELECT AVG(sal) AS avg FROM t_emp)t
ON e.sal <t.avg
SET e.sal =e.sal+150;
- update語句的錶鏈接即可以是內連接,又可以外連接
UPDATE 表1 [LEFT | RIGHT] JOIN 表2 ON 條件 SET 字段1=值1, 字段2=值2,…;
案例 :
-- 把沒有部門的員工,或者sales部門低於2000元底薪的員工,都調往20部門
UPDATE t_emp e LEFT JOIN t_dept d ON e.deptno=d.deptno
SET e.deptno = 20
WHERE e.deptno IS NULL OR ( d.dname="SALES" AND e.sal<2000);
DELETE 刪除
DELETE [ IGNORE ] FROM 表名
**[ WHERE 條件1 ,條件2,… ] **
[ ORDER BY … ] 排序後刪除數據
[ LIMIT … ] 分頁
內連接
案例:
-- 刪除10部門中,工齡超過20年的員工
DELETE
FROM t_emp
WHERE deptno=10 AND DATEDIFF(now(),hiredate)/365>=20;
-- 刪除20部門中,工資最高的員工的記錄
DELETE FROM t_emp
WHERE deptno=20
ORDER BY sal+IFNULL(comm,0)DESC
LIMIT 1;
-- 刪除SALES部門和該部門全部員工記錄,一個delete語句刪除了兩張表的記錄
DELETE e,d
FROM t_emp e JOIN t_dept d ON e.deptno=d.deptno
WHERE d.dname='SALES';
-- 刪除每個部門平均底薪的員工記錄
DELETE e
FROM t_emp e JOIN
(SELECT deptno,AVG(sal) avgg
FROM t_emp GROUP BY deptno) t
ON e.deptno=t.deptno AND e.sal < t.avgg;
-- 刪除員工KING 和他的直接下屬的員工記錄,用錶鏈接實現.
DELETE e
FROM t_emp e JOIN
(SELECT empno FROM t_emp WHERE ename='king') t
ON e.mgr=t.empno OR e.empno=t.empno;
外連接
DELETE 表1,…FROM 表1 [ LEFT | RIGHT ] JOIN 表2 ON 條件…
案例:
-- 刪除SALES部門員工,以及沒有部門的員工.
DELETE e
FROM t_emp e LEFT join t_dept d ON e.deptno=d.deptno
WHERE d.dname='SALES' OR e.deptno IS NULL;
TRUNCATE TABLE
快速刪除數據表全部記錄
- DELETE語句是在事物機制下刪除記錄,刪除記錄之前,先把要刪除的記錄保存到日誌文件裏, 然後再刪除記錄.
- TRUNCATE TABLE 表名;
-- TRUNCATE TABLE 員工表
TRUNCATE TABLE t_emp;
本文學習了:
- INSERT 語法
- UPDATE 語法
- DELETE 語法
- TRUNCATE TABLE 語法
- 掌握了數據更新和刪除中表鏈接語法
路漫漫其修遠兮,吾將上下而求索!