使用DML语句【weber出品必属精品】
DML语句包含以下语法:
INSERT:往一个表中增加新行
DELETE:从一个表中删除掉现有的行
UPDATE:更改一个表中现有的行
INSERT语句
语法:INSERT INTO TABLE(COLUMN1,COLUMN2,....) VALUES(VAL1,VAL2,...)
使用这种方法只能一次插入一行数据插入包含每一个列值的新行,按缺省顺序列出表中所有的列值.
- 创建带有结构的空表
SQL> create table t as select * from emp where 1=2;---1是不会等于2的,给了这个假条件是使得创建的表只有emp里面的表结构,而没有数据Table created.SQL> select count(*) from e;COUNT(*) ----------0SQL> desc e名称 是否为空? 类型----------------------------------------- -------- ----------------------------EMPNO NUMBER(4)ENAME VARCHAR2(10)JOB VARCHAR2(9)MGR NUMBER(4)HIREDATE DATESAL NUMBER(7,2)COMM NUMBER(7,2)DEPTNO NUMBER(2)
- 插入一条数据,日期值和字符值要用单引号括起来
SQL>insert into t values(7369,' SMITH', ' CLERK' ,' 7902',' 17-DEC-80',800,null,20);1 row created.SQL> select * from t;EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ----- ------ --------- ----- --------- ----- ----- ------7369 SMITH CLERK 7902 17-DEC-80 800 20SQL>commit; Commit complete.
- 指定某列进行插值
SQL> insert into t (empno,ename) values(1111,'ywb');1 row created.SQL> commit ;Commit complete.SQL> select * from t;EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ----- ------ --------- ----- --------- ----- ----- ------7369 SMITH CLERK 7902 17-DEC-80 800 201111 ywb
- truncate表,删除表的数据,不删除结构,drop才是一锅端
---Truncate是DDL语言,和其他DDL语言一样,他将进行隐式提交。
SQL> truncate table t;Table truncated.SQL> select * from t;no rows selectedSQL> rollback;Rollback complete.SQL> select * from t;no rows selected
- 修改某列的默认值alter table t modify column default value;
SQL> alter table t modify sal default '100';Table altered.SQL> insert into t (empno,ename) values(1112,'ywb');1 row created.SQL> select * from t;EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ----- ------ --------- ----- --------- ----- ----- ------1111 ywb1112 ywb 100
- 插入特殊的值:例如日期---sysdate,自动获取日期
SQL> insert into t(empno,ename,hiredate) values (1113,'ywb',SYSDATE);1 row created.SQL> select * from t;EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ----- ------ --------- ----- --------- ----- ----- ------1111 ywb1112 ywb 1001113 ywb 20-AUG-14 100
- 日期对格式比较敏感:虽然插入是安装yyyy-mm-dd格式,但是显示又是另一种格式
SQL> insert into e values(7521,'WARD','SALESMAN',7698,to_date('2014-08-19','yyyy-mm-dd'),1250,500,30);已创建 1 行。SQL> commit;提交完成。SQL> select * from e;EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ----- ------ --------- ----- -------------- ----- ---------- ------7369 SMITH CLERK 7902 17-12月-80 800 207499 ALLEN SALESMAN 7698 19-8月 -14 1600 300 207521 WARD SALESMAN 7698 19-8月 -14 1250 500 30
- 从另一个表中拷贝行:
创建带有子查询的 INSERT语句
不要使用 VALUES 子句
SQL> insert into t select * from emp where empno=7369;1 row created.SQL> select * from t;EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ----- ------ --------- ----- --------- ----- ----- ------1111 ywb1112 ywb 1001113 ywb 20-AUG-14 1007369 SMITH CLERK 7902 17-DEC-80 800 20
- 子查询中的列要与INSERT子句中的列相匹配,不然会报错
SQL> insert into t (empno,ename,job,sal) select empno,ename,job,sal from emp where empno=7499;-------------------注意:这里没有加关键字:values---- 1 row created.SQL> select * from t;EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ----- ------ --------- ----- --------- ----- ----- ------1111 ywb1112 ywb 1001113 ywb 20-AUG-14 1007369 SMITH CLERK 7902 17-DEC-80 800 207499 ALLEN SALESMAN 1600---插入过多的值--- SQL> insert into t (empno,ename,job,sal) select * from emp where empno=7499; insert into t (empno,ename,job,sal) select * from emp where empno=7499* ERROR at line 1: ORA-00913: too many values
- 替代变量插入值:
[oracle@oracle~]$ cd /u01 vi 1.sql写入如下内容: insert into t values(&DEPTNO,'&DNAME','&LOC'); ---注意插入字符需要加引号 在sqlplus中执行如下操作: SQL>@/u01/1.sql;
SQL> @/u01/1.sql; Enter value for empno: 110 Enter value for ename: yeb2 Enter value for sal: 120 old 1: insert into t(empno,ename,sal) values(&EMPNO,'&ENAME','&SAL') new 1: insert into t(empno,ename,sal) values(110,'yeb2','120')1 row created.SQL> select * from t;EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ----- ------ --------- ----- --------- ----- ----- ------1111 ywb1112 ywb 1001113 ywb 20-AUG-14 1007369 SMITH CLERK 7902 17-DEC-80 800 207499 ALLEN SALESMAN 1600110 yeb2 1206 rows selected.
- UPDATE 语句
SQL> select * from t;EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ----- ------ --------- ----- --------- ----- ----- ------7369 SMITH CLERK 7902 17-DEC-80 800 20SQL> update t set ename='ywb' where empno=7369;1 row updated.SQL> select * from t;EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ----- ------ --------- ----- --------- ----- ----- ------7369 ywb CLERK 7902 17-DEC-80 800 20
- 同时更改多行多列:
SQL> select * from t;EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ----- ------ --------- ----- --------- ----- ----- ------7369 ywb SALESMAN 7902 17-DEC-80 1600 207488 ALLEN SALESMAN 7698 20-FEB-81 1600 300 30SQL> update t set (ename,job)=(select ename,job from emp where empno=7499) where empno=7369 or empno=7488;2 rows updated.SQL> select * from t;EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ----- ------ --------- ----- --------- ----- ----- ------7369 ALLEN SALESMAN 7902 17-DEC-80 1600 207488 ALLEN SALESMAN 7698 20-FEB-81 1600 300 30这里尤其要注意,set(xx,xx)=(xx,xx)后面如果跟的是值则会报错: SQL> update t set (job,sal)=('haha',120) where empno=7369 or empno=7499; update t set (job,sal)=('haha',120) where empno=7369 or empno=7499* ERROR at line 1: ORA-01767: UPDATE ... SET expression must be a subquery 后面跟的必须是子查询。
- DELETE语句:从表中删去现存的行
SQL> delete from t where empno=7488;1 row deleted.SQL> select * from t;EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ----- ------ --------- ----- --------- ----- ----- ------7369 ALLEN SALESMAN 7902 17-DEC-80 1600 20
- 参照另一个表来删除行:
(注:‘SCOTT’要大写)
SQL> delete t where empno in(select empno from emp where ename='SCOTT');1 row deleted.SQL> select * from t;EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ----- ------ --------- ----- --------- ----- ----- ------7369 ALLEN SALESMAN 7902 17-DEC-80 1600 20
- TRUNCATE语句:
TRUNCATE语句:1. 删除表中的所有数据,保留表结构,不能使用where子句2. 是DDL语句,不是DML语句,一旦删除,不能回退SQL> truncate table e ;表被截断。SQL> select * from e;未选定行SQL> roll 回退已完成。 SQL> select * from e;未选定行
转载于:https://www.cnblogs.com/yaoweber/p/3925538.html
使用DML语句【weber出品必属精品】相关推荐
- 全世界最详细的图形化VMware中linux环境下oracle安装(三)【weber出品必属精品】...
数据库软件和数据库都建好了,基本上可以说完成90%的工作,但是美中不足的就是企业管理器还没有安装好,现在我们就开始安装企业管理器吧. 安装之前我们先将补丁给补上.补丁我们也是采用禁默安装.补丁:p83 ...
- 解决linux下oracle进入sqlplus环境中后退键显示^H、上下键无效与ctrl+l无法清屏等问题【weber出品必属精品】...
习惯linux中上下键回退历史输入的人们肯定也希望sqlplus中也能实现相同的效果,可是不幸的是,sqlplus中不提供诸多方便的快捷键,这个时候我们就需要另外安装一个插件来实现这个想法. 这个插件 ...
- 控制用户的访问之权限、角色【weber出品必属精品】
权限的作用 限制用户对数据的访问 权限的分类 1. 系统权限:能够存取数据库的权限 2. 对象权限:操作数据库对象的内容 系统权限 1.1 如何创建用户: SQL> create user ...
- 【阿朱出品 必属精品】你也说医院,我也说医院
怎么说俺也是在卫生部官办国企做了4年啊,那就说道说道.由于中国医疗制度牵扯全民利益所以变革非常谨慎微小,中国医生圈子大多属于几个院系派系嫡系自我近支繁衍,体制内有事业单位编制问题,体制外有莆田系金钱交 ...
- ChatGPT团队出品,必属精品—Bito插件完全指北
Bito是一个IntelliJ IDEA插件,由ChatGPT团队开发,用于提高开发效率和生产力. 首先,安装Bito插件非常简单.在IntelliJ IDEA编辑器中打开"Plugins& ...
- 剪映,最简单的PC端视频处理工具,大厂出品必属精品~
相信在座的小伙伴都用过抖音app,看的多了难免也有想要发视频的冲动. 这时我们就会想到诸如Ae.Pr之类的视频制作工具,但他们都有一定的上手难度-- 好在抖音霸霸很早就推出了免费的官方全能剪辑工具,也 ...
- Python 编程笔记(本人出品,必属精品)
文章目录 Part.I 准备工作 Chap.I 下载安装 Chap.II 实现快捷键清屏 Chap.III 概念汇编 & 注意事项 Part.II 基础知识 Chap.I 快应用 Chap.I ...
- 吾爱出品,必属精品~
前言 吾爱破解论坛目前是一个非常老牌的软件解密与技术交流地,从名字可以看出论坛内有着非常丰富的PJ软件资源,但随着最近的几次整改,论坛实质也逐渐与破解无缘.这也是没有办法的事,作为一个日访问量10万+ ...
- 关于电信重组(华为中兴观察员出品,必属精品)
关于电信重组 论坛里很多人对国产设备商的未来在我看来过于乐观,电信重组最简单的结果就是运营商减少,这使得第四名第五名直接kill掉了,重组前这些运营商处于弱势,对技术的前沿性要求不高,从而在外国设备商 ...
最新文章
- 使用Python,OpenCV,K-Means聚类查找图像中最主要的颜色
- 【计算理论】图灵机 ( 非确定性图灵机 | 非确定性图灵机指令分析 | 计算过程 | 非确定性指令出现多个分支 | 非确定性图灵机转为计算树 | 计算树 )
- X-Frame-Options防止自己的网页放被在别人iframe中
- mod auth mysql_Apache使用mysql认证用户
- java多线程总结(二)
- 第4课 防卫导弹(第十章 动态规划--DP)
- 扩展图形输出 1111 java
- 求带权中位数的Select算法
- 怎么钢枪_和平精英有战术钢枪和无脑冲有何区别?你们怎么看待这个问题
- windows时间设置
- Python实战案例:金庸的功夫流派、人物关系的分析案例(下)
- AI出现的历史渊源,透过现象看实质
- pppd参数中文解释
- 【MySQL-设置定时任务】
- Python 绘制高斯曲面图
- 架构道术-时间的力量有多大
- 二维码教程之如何制作表白二维码
- 给定一个十进制数,将其转化为N进制数-----17年滴滴笔试题
- centos 7.2执行yum -y install报错Metadata file does not match checksum
- 微星小飞机没有osd显示怎么办?
热门文章
- jquery 使用jquery操作Dom
- EL表达式和JSTL
- android获取屏幕尺寸、密度
- TFS 2010 使用手册(二)项目集合与项目
- NHibernate: Session.Save 采用版本控制时无必要地自动Update版本字段的问题
- NameError: name 'go' is not defined
- 搜狗·疫情数据爬取(Python)
- java 空串占用内存吗_java空字符串“”和null区别
- nodejs redis 发布订阅_SpringBoot整合Redis,怎么实现发布/订阅?
- java编写十个评委_Java题 在歌星大奖赛中,有10个评委为参赛的选手打分,分数为1~100分。选手最后得分...