`
fyd222
  • 浏览: 106556 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

SQL基础--> 数据处理(DML、RETURNING、MERGE INTO)

 
阅读更多

--=================================================

--SQL基础--> 数据处理(DMLRETURNINGMERGE INTO)

--=================================================

一、常用的DML语句及事物处理

向表中插入数据(INSERT)

更新表中数据(UPDATE)

从表中删除数据(DELETE)

将表中数据和并(MERGE)

控制事务(TRANSACTION)

二、DML 可以在下列条件下执行:

向表中插入数据

修改现存数据

删除现存数据

事务是由完成若干项工作的DML语句组成的。

三、插入数据

INSERT 语句语法:

INSERT INTO table [(column [, column...])]

VALUES (value [, value...]);

使用这种语法一次只能向表中插入一条数据。

为每一列添加一个新值。

按列的默认顺序列出各个列的值。

INSERT 子句中随意列出列名和他们的值。

字符和日期型数据应包含在单引号中。

--查看emp表的表结构

SQL> DESC emp;

Name Null? Type

----------------------------------------------------- -------- -----------------------

EMPNO NOT NULL NUMBER(4)

ENAME VARCHAR2(30)

JOB VARCHAR2(9)

MGR NUMBER(4)

HIREDATE DATE

SALARY NUMBER(8,2)

DEPTNO NUMBER(2)

1.向表中插入空值

隐式方式: 在列名表中省略该列的值。

SQL> INSERT INTO emp(empno,ename,job,salary) --列出部分列名

2 VALUES(1234,'Frank','saleman',8000);

1 row created.

SQL> SELECT * FROM emp WHERE ename='Frank';

EMPNO ENAME JOB MGR HIREDATE SALARY DEPTNO

---------- ------------------------------ --------- ---------- --------- ---------- ----------

1234 Frank saleman 8000

显示方式: VALUES 子句中指定空值NULL

注意此处省略了列列表,当列的列表被省略时,则values关键字中应当为所有的字段列提供列值

SQL> INSERT INTO emp VALUES(100,'Jack','manager',null,null,20000,10);

1 row created.

2.插入指定的值

SYSDATE 记录当前系统的日期和时间。

SQL> INSERT into EMP(empno,ename,job,hiredate,salary)

2 VALUES(1235,'Tony','boy',sysdate,7000);

1 row created.

SQL> ALTER SESSION SET nls_date_format= 'yyyy-mm-dd hh24:mi:ss';

Session altered.

SQL> SELECT * FROM emp WHERE ename = 'Tony';

EMPNO ENAME JOB MGR HIREDATE SALARY DEPTNO

---------- --------------- --------- ---------- ------------------- ---------- ----------

1235 Tony boy 2010-06-28 13:48:59 7000

插入特定的日期值

SQL> INSERT INTO emp

2 VALUES(1236,'Ben','IT',null,TO_DATE('JUN 28 2010','MON DD YYYY'),3000,20);

3.在列中使用单引号和双引号

--单引号的使用

SQL> INSERT INTO emp VALUES

2 (1238,'Dan','Malley''K','',sysdate,2900,20);

1 row created.

--双引号的使用

SQL> INSERT INTO emp VALUES

2 (1239,'Dane','A "Big" L','',sysdate,2900,20);

1 row created.

SQL> SELECT * FROM emp WHERE ename LIKE 'Dan%';

EMPNO ENAME JOB MGR HIREDATE SALARY DEPTNO

---------- ------------------ --------- ---------- ------------------- ---------- ----------

1238 Dan Malley'K 2010-06-28 14:04:35 2900 20

1239 Dane A "Big" L 2010-06-28 14:07:12 2900 20

4.从其它表中拷贝数据(利用子查询向表中插入数据)

INSERT 语句中加入子查询。

不必书写VALUES 子句。

子查询中的值列表应与INSERT 子句中的列名对应

--克隆表结构

SQL> CREATE TABLE test AS SELECT * FROM scott.emp WHERE 0 = 1;

Table created.

--使用select 子句插入新值

SQL> INSERT INTO test SELECT * FROM scott.emp;

21 rows created.

--使用select 子句插入部分列值

SQL> INSERT INTO test(empno,ename,job,salary)

2 SELECT empno,ename,job,salary

3 FROM scott.emp

4 WHERE ename LIKE 'Dan%';

2 rows created.

5.利用替代变量向表中插入数据

SQL> INSERT INTO test(empno,ename,job,salary)

2 VALUES(&empno,'&ename','&job',&salary);

Enter value for empno: 1240

Enter value for ename: Andy

Enter value for job: Singer

Enter value for salary: 3600

old 2: VALUES(&empno,'&ename','&job',&salary)

new 2: VALUES(1240,'Andy','Singer',3600)

1 row created.

四、更新数据(UPDATE)

语法:

UPDATE table

SET column = value [, column = value, ...]

[WHERE condition];

可以一次更新多条数据。

使用WHERE 子句指定需要更新的数据,如果省略WHERE子句,则表中的所有数据都将被更新。

1.直接更新

SQL> UPDATE emp SET salary = salary + 100 WHERE ename = 'SCOTT';

1 row updated.

2.UPDATE语句中使用子查询

SQL> UPDATE emp SET salary =

2 (SELECT salary FROM emp WHERE ename = 'SCOTT')

3 WHERE empno = 7839;

1 row updated.

3.使用多列子查询来修改记录:

SQL> UPDATE emp SET(job,salary)

2 = (SELECT job,salary FROM emp WHERE ename = 'SCOTT')

3 WHERE ename = 'Jack';

1 row updated.

五、删除数据

使用DELETE 语句从表中删除数据。

DELETE [FROM] table [WHERE condition];

1.使用WHERE 子句指定删除的记录,如果省略WHERE子句,则表中的全部数据将被删除。

SQL> DELETE FROM emp WHERE empno = 1234;

1 row deleted.

2.DELETE 中使用子查询

DELETE 中使用子查询,使删除基于另一个表中的数据。

SQL> DELETE FROM emp

2 WHERE deptno =

3 (SELECT deptno FROM scott.dept WHERE dname = 'ACCOUNTING');

4 rows deleted.

六、在DML语句中使用WITH CHECK OPTION

子查询可以用来指定DML语句的表和列

WITH CHECK OPTION 关键字可以防止更改不在子查询中的行

--deptno列不在select列表中,故不能被更新

SQL> INSERT INTO

2 (SELECT empno,ename,job,mgr,salary FROM emp

3 WHERE deptno = 20 WITH CHECK OPTION)

4 VALUES(1250,'Smith','Clerk',7902,3000);

(SELECT empno,ename,job,mgr,salary FROM emp

*

ERROR at line 2:

ORA-01402: view WITH CHECK OPTION where-clause violation

七、TRUNCATE TABLE 截断表

删除所有数据,保留表结构

TRUNCATE TABLE语句不能回滚

SQL> TURNCATE TABLE emp;

八、使用默认值

显式默认值

使用DEFAULT 关键字表示默认值

可以使用显示默认值,控制默认值的使用

显示默认值可以在INSERT UPDATE 语句中使用

SQL> CREATE TABLE tb

2 (

3 orderid INT PRIMARY KEY,

4 status VARCHAR2(20) DEFAULT 'Delivery' NOT NULL,

5 last_update DATE DEFAULT sysdate

6 );

Table created.

--自动使用默认值

SQL> INSERT INTO tb(orderid) SELECT 10 FROM DUAL;

1 row created.

--指定新值来覆盖默认值

SQL> INSERT INTO tb SELECT 20, 'No Delivery','28-MAY-10' FROM DUAL;

1 row created.

--使用default关键字来设置为默认值

SQL> SELECT * FROM tb;

ORDERID STATUS LAST_UPDA

---------- -------------------- ---------

10 Delivery 28-JUN-10

20 No Delivery 28-MAY-10

SQL> UPDATE tb SET status = DEFAULT WHERE orderid = 20;

1 row updated.

SQL> SELECT * FROM tb;

ORDERID STATUS LAST_UPDA

---------- -------------------- ---------

10 Delivery 28-JUN-10

20 Delivery 28-MAY-10

九、RETURNING 子句

使用RETURNING子句返回聚合函数的结果集

SQL> VARIABLE avg_salary NUMBER

SQL> UPDATE emp SET salary = salary + 100

2 RETURNING AVG(salary) INTO : avg_salary;

16 rows updated.

SQL> PRINT avg_salary;

AVG_SALARY

----------

2554.6875

十、MERGE INTO

将一个表中的行合并到另一个表中

MERGE INTO 语法:

MERGE INTO table_name table_alias

USING (table|view|sub_query) alias

ON (join condition)

WHEN MATCHED THEN

UPDATE SET

col1 = col_val1,

col2 = col2_val

WHEN NOT MATCHED THEN

INSERT (column_list)

VALUES (column_values);

--创建演示环境

SQL> CONN hr/hr;

Connected.

--hr.job_history提取唯一的数据并复制到新表job_hs

SQL> CREATE TABLE job_hs AS

2 SELECT employee_id,start_date,end_date,job_id,department_id FROM job_history jh

3 WHERE end_date =

4 (SELECT MAX(end_date) FROM job_history WHERE employee_id = jh.employee_id);

Table created.

SQL> SELECT * FROM job_hs ORDER BY employee_id;

EMPLOYEE_ID START_DAT END_DATE JOB_ID DEPARTMENT_ID

----------- --------- --------- ---------- -------------

101 28-OCT-93 15-MAR-97 AC_MGR 110

102 13-JAN-93 24-JUL-98 IT_PROG 60

114 24-MAR-98 31-DEC-99 ST_CLERK 50

122 01-JAN-99 31-DEC-99 ST_CLERK 50

176 01-JAN-99 31-DEC-99 SA_MAN 80

200 01-JUL-94 31-DEC-98 AC_ACCOUNT 90

201 17-FEB-96 19-DEC-99 MK_REP 20

--hr.employees中的记录当job_hs中存在时,则更新相关项,否则插入到job_hs表中

SQL> MERGE INTO job_hs h

2 USING employees e

3 ON (h.employee_id = e.employee_id)

4 WHEN MATCHED THEN

5 UPDATE

6 SET

7 start_date = sysdate,

8 end_date = sysdate + 100,

9 job_id = e.job_id,

10 department_id = e.department_id

11 WHEN NOT MATCHED THEN

12 INSERT (h.employee_id,h.start_date,h.end_date,h.job_id,h.department_id)

13 VALUES (e.employee_id,e.hire_date,sysdate,e.job_id,e.department_id);

SQL> SELECT COUNT(*) FROM job_hs;

COUNT(*)

----------

107

MERGE INTO 使用注意事项

MERGE INTO子句应指明需要合并的目的表

USING ... ON 子句用于表之间的连接

WHEN MATCHED THEN 子句指明当条件满足时则对目的表执行何种操作(此处是UPDATE操作)

WHEN NOT MATCHED THEN 子句指明当条件不满足时对目的表执行何种操作(此处是INSERT操作)

十一、更多

Oracle 用户、对象权限、系统权限

SQL 基础--> ROLLUPCUBE运算符实现数据汇总

SQL基础-->层次化查询(START BY ... CONNECT BY PRIOR)

SQL 基础--> 视图(CREATE VIEW)

Oracle 常用目录结构(10g)

分享到:
评论

相关推荐

    flink-sql-connector-kafka-2.12-1.13.1.jar

    当你需要在 Flink SQL 环境中从 Kafka 读取数据或向 Kafka 写入数据时,你可以使用这个 JAR 包。这个连接器支持 Flink SQL 的标准 DDL (Data Definition Language) 和 DML (Data Manipulation Language)

    SQL 基础--SELECT 查询

    在逻辑运算中,空值有特殊的处理方式,如`AND`运算优先级是:F -> NULL -> T,而`OR`运算优先级是:T -> NULL -> F。 处理空值的函数包括NVL、NVL2和NULLIF以及COALESCE。NVL函数用于当表达式1为空时返回表达式2的...

    oracle-function-执行动态sql(包括DML、DLL、DQL、DCL)

    oracle-function-执行动态sql(包括DML、DLL、DQL、DCL)

    Oracle数据库操作命令集合

    - 示例:`sql> insert into emp (eno, ename, dept) values (1, 'Java', 20);` - **更新记录:** - `sql> update emp set deptno = 80 where deptno = 81;` - **删除记录:** - `sql> delete from tablename ...

    SERVER SQL学习教程

    在IT行业中,SQL(Structured Query Language)是一种用于管理和处理关系数据库的强大语言,广泛应用于各种数据库管理系统,如MySQL、Oracle、SQL Server等。本教程聚焦于"SERVER SQL学习教程",这意味着我们将专注...

    Oracle11g SQL基础-实验手册

    在Oracle11g SQL基础-实验手册中,涵盖了使用Oracle SQL进行数据操作和管理的基础知识点。以下是对该手册中知识点的详细解释: 第1章 编写基本的SQL SELECT语句 这一章节介绍了如何编写基本的SQL查询语句。包括...

    SQL基础_-_MS-SQL_Server___基础类

    - **数据操纵语言(DML)**:用于添加、更新和删除数据,如INSERT INTO、UPDATE、DELETE等。 - **数据查询语言(DQL)**:主要用于检索数据,如SELECT语句。 - **数据控制语言(DCL)**:用于管理数据库用户的权限,如...

    实证代码-双重机器学习(含DML方法+数据+代码+案例)-最新出炉.zip

    实证代码-双重机器学习(含DML方法+数据+代码+案例)-最新出炉.zip

    sql plus 命令

    SQL*Plus不仅支持标准的SQL语句(如DML - 数据操纵语言,DDL - 数据定义语言,DCL - 数据控制语言),还提供了一系列内置的命令来增强用户体验和工作效率。 1. **执行SQL脚本文件**: - `SQL> start file_name` 或...

    SQL Server 2012 Tutorials - Transact SQL DML Reference

    在探讨《SQL Server 2012教程:Transact SQL DML参考》这一主题时,我们深入解析数据操作语言(Data Manipulation Language,简称DML)的诸多方面,该语言是用于检索、处理SQL Server 2012数据库中数据的关键工具。...

    SQL*PLUS命令的使用大全

    - **DML(Data Manipulation Language)**:如`INSERT`, `UPDATE`, `DELETE`等,用于处理数据库中的数据。 - **DDL(Data Definition Language)**:如`CREATE`, `ALTER`, `DROP`等,用于创建、修改和删除数据库...

    SQL数据处理工具 SQL数据处理工具

    在IT领域,SQL(Structured Query Language)是一种用于管理和处理关系数据库的强大语言,广泛应用于数据查询、更新、插入和删除等操作。SQL数据处理工具则是一类帮助用户更高效、便捷地执行这些操作的软件。本篇...

    sql---基本练习.rar

    这个压缩包"sql---基本练习.rar"显然包含了一些SQL基础练习,旨在帮助初学者掌握和巩固SQL的基本概念和操作。让我们详细探讨一下SQL的核心知识点: 1. 数据库与表: SQL主要用于操作数据库,其中数据库是由一张或...

    T-SQL语法书,dml ddl dcl

    根据给定的文件信息,我们将深入探讨T-SQL语言中涉及数据库管理的三大核心概念:DML(数据操作语言)、DDL(数据定义语言)和DCL(数据控制语言)。这三类语言是Microsoft SQL Server 2005及后续版本中进行数据库...

    仿照阿里blink使用sql开发flink的实时程序

    仿照阿里blink使用sql开发flink的实时程序 阿里工作的时候是使用Blink进行流数据处理和计算,通过编写sql实现... -> query/dml的insert into数据处理和计算 --> 封装为对应Flink的Job:env.sqlQuery/env.sqlUpdat

    oracle sqlplus 命令大全

    它允许用户编写和执行SQL语句,包括数据查询语言(DQL)、数据操纵语言(DML)、数据定义语言(DDL)和数据控制语言(DCL)。在SQL*Plus中,用户还可以使用一系列内置的命令来控制输出格式、管理会话和执行脚本。 ...

    Oracle命令大全

    - `SQL> start file_name` 或 `SQL> @ file_name`:这两个命令用于执行存储在文本文件中的SQL语句集合,这些语句可以是数据定义语言(DDL)、数据操纵语言(DML)或其他数据库操作。这种方式类似于DOS中的批处理,...

    ASP与SQL网页数据库程序设计

    第1章 架设网站……………………………….1<br>1-1 服务器的选用 2<br>1-2 安装或升级IE的版本 3<br>1-3 安装IIS 6<br>1-4 测试及设置 12<br>第2章 编辑器的选用………………………..17<br>2-1 编辑软件的需求 18<br...

    SQL------技术教程

    最后,`sql语句大全.txt`很可能是对各种SQL语句的汇总,包括DML(数据操作语言)如SELECT、INSERT、UPDATE、DELETE,DDL(数据定义语言)如CREATE、ALTER、DROP,以及DCL(数据控制语言)如GRANT、REVOKE等。...

Global site tag (gtag.js) - Google Analytics