02 DML(DataManipulationLanguage)
2024-10-08 17:08:59
1.插入记录
基本语法 :
INSERT INTO tbl_name (col_name ,col_name1,..,col_nameN) VALUES (val1,val2,…,valN) ;
对于可空字段/非空但用默认值字段/自增字段 可以不在insert后的字段列表中出现,对应的值分别为NULL/默认值/自增的下一个数字
批量插入:
INSERT INTO tbl_name (col_name1,col_name2,..,col_nameN)
VALUES (val1,val2,..,valN)
,(val1,val2,..,valN)
,(val1,val2,..,valN)
,(val1,val2,..,valN);
批量操作的好处是插入大量记录的时候,节省网络开销,大大提高插入效率。
2.更新记录
基础语法:
UPDATE tbl_name SET col_name1 = val1 ,..,col_nameN = valN [WHERE CONDITION];
拓展语法:
UPDATE t1,t2,..,tn SET t1.col_name1 = val1 ,tn.col_nameN = valN [WHERE CONDITION] ;
⚠️注意:多表更新的方式多用于根据一个表的字段动态更新另外一个表的字段 的场景。
3.删除记录
基础语法:
DELETE FROM tbl_name [WHERE CONDITION] ;
拓展语法:
DELETE FROM t1,t2,..,tn FROM t1,t2,..,tn [WHERE CONDITION] ;
4.查询记录
基础语法:
SELECT * FROM tbl_name [WHERE CONDITION] ;
查询不重复记录:
demo : SELECT DISTINCT deptno FROM emp ;
排序和限制:
SELECT * FROM tbl_name [WHERE CONDITION] [ORDER BY col_name1 [DESC|ASC] ,col_name2 [DESC|ASC] , .. ,col_nameN [DESC | ASC] [LIMIT offset_start , row_cnt] ;
⚠️注意:如果LIMIT后只有一个参数 表示 offset_start=0 ,而这个参数代表的是row_cnt
聚合(group by)
SELECT [col_name1,col_name2,..col_nameN] func_name
FROM tbl_name
[WHERE CONDITION]
[GROUP BY col_name1,col_name2,..,col_nameN]
[WITH ROLLUP]
[HAVING where_condition] ;
其中,func_name : 代表的是聚合函数,如SUM(),COUNT(),MAX(),MIN()等。
WITH ROLLUP : 表示是否要对分类聚合后对结果进行再汇总。
HAVING :表示对分类结果再进行条件过滤。
HAVING和WHERE等区别:
WHERE是先进行条件过滤,而HAVING是对结果进行再过滤。
如果逻辑上允许,首先考虑用WHERE,这样结果集变小对进行聚合操作的效率将大大提高。
5.表连接
分为内连接和外连接。区别是内连接只选出两个表中相互匹配的记录;而外链接会连同不匹配的记录一并选取出来。通常使用内连接。
a.内连接:
demo : SELECT * FROM t1 ,t2 where t1.id = t2.id ;
b.外连接:
分为左连接和右连接。
左连接:包含所有左表中的数据,不管是否在右表中是否匹配到相关数据。
右连接:包含所有右表中的数据,无论是否在左表中是否有匹配记录。
demo:
select col1,col2 from t1 LFET JOIN t2 ON t1.xx = t2.xx ;
6.子查询
关键字主要包括: in , not in , = , != , exists , not exists
demo :
SELECT * FROM emp where deptno in(SELECT eptno FROM dept) ;
当子查询记录数唯一,可用=代替in
某些时候子查询可以转化为表连接。
例如:
SELECT * FROM emp WHERE deptno IN(SELECT deptno FROM dept);
可以转化为
SELECT emp,* FROM emp,dept WHERE emp.deptno = dept.deptno ;
表连接在很多时候 用于优化子查询。
7.记录联合
关键字: union , union all
SELECT * FROM t1
UNION | UNION ALL
SELECT * FROM t2
UNION | UNION ALL
...
SELECT * FROM tn ;
UNION 和 UNION ALL 主要区别:
UNION ALL 是将结果集直接合并到一起,而UNION是将UNION ALL后到结果进行一次DISTINCT , 去除重复记录后的结果。
⚠️注意:做UNION / UNION ALL操作的两(多)张表,他们的字段名,字段类型以及要显示的字段个数/顺序都要保持一致 todo
最新文章
- mysql多个时间戳字段默认值问题
- Linux I2C总线设备驱动模型分析(ov7740)
- sql server 查询数据库所有的表名+字段
- 深入了解android平台的jni---图像灰度化处理
- .bash_profile备份
- mysql online ddl2
- Perl脚本学习经验(三)--Perl中ftp的使用
- iOS 网络错误-分类
- MOCK.JS 生成随机数据,拦截 Ajax 请求
- 内核操作系统Linux内核变迁杂谈——感知市场的力量
- WebService应用--使用java开发WebService程序
- “海市蜃楼”般的逛街体验——VR全景智慧城市常诚
- poj3320 (尺取法)
- java保留两位小数(不四舍五入)
- Linux程序前台后台切换
- 虎牙直播弹幕转换字幕格式 基于Node.js 的 huya-danmu
- centos下mysql授予权限提示ERROR 1133 (42000): Can't find any matching row in the user table
- pytorch visdom可视化工具学习—1—详细使用-1—基本使用函数
- 网络编程学习二(IP与端口)
- python 3.6.5 map() max() lambda匿名函数
热门文章
- 从Uber司机只是合同工看,零工经济将受沉重打击?
- 移动端禁止缩放<;meta>;
- js中for循环(原生js)
- 生成资源文件时候,可以动态替换为maven属性
- 吴裕雄 Bootstrap 前端框架开发——Bootstrap 辅助类:元素浮动到右边
- 【剑指Offer面试编程题】题目1510:替换空格--九度OJ
- Linux命令:cp命令
- Linux centosVMware shell脚本中的逻辑判断、文件目录属性判断、if特殊用法、case判断
- JavaScript之bind方法实现代码分析
- 在Java中,为什么十六进制数0xFF取反之后对应的十进制数是-256呢?