-- Start
我估计,只要是知道SQL 语句的人都会用UPDATE 语句,可是大部分人不知道UPDATE 语句有两种写法,首先,考虑下面的情况:
CREATE TABLE STUDENT ( ID NUMBER(10), ---学号 NAME VARCHAR2(20) NOT NULL,---姓名 BIRTHDAY DATE ---生日 ); INSERT INTO STUDENT (ID,NAME,BIRTHDAY) VALUES (1,'张三',DATE '1991-01-01'); INSERT INTO STUDENT (ID,NAME,BIRTHDAY) VALUES (2,'李四',DATE '1991-01-01'); INSERT INTO STUDENT (ID,NAME,BIRTHDAY) VALUES (3,'王五',DATE '1990-01-01');
假设让你更新一下张三的生日,很简单,我们可以这么写:
UPDATE STUDENT SET BIRTHDAY=DATE '1991-1-5' WHERE NAME='张三';
UPDATE ( SELECT * FROM STUDENT WHERE NAME='张三' ) SET BIRTHDAY=DATE '1991-1-5';
CREATE TABLE TRANSACTION ( CUSTOMERID VARCHAR2(10),---顾客号 SEQ NUMBER(9,0) NOT NULL,---流水号(每个顾客从1 开始) PROCESSDATE TIMESTAMP,---处理日 AMOUNT NUMBER(10,2)---金额 );
UPDATE ( SELECT TT.*, ROW_NUMBER() OVER() AS RN FROM TRANSACTION AS TT WHERE CUSTOMERID=... ) SET SEQ=RN;
怎么样,是不是很简单。如果你对上面语句的 ROW_NUMBER() OVER()还不熟悉,请参见:Oracle 分析函数
此外,如果是多表联合更新,用第一种方法会写出非常恶心的 SQL,用第二种方法确非常直观,下面是一个简单的例子。
-- 第一种写法 UPDATE JOBS J SET J.MIN_SALARY = (SELECT SALARY FROM EMPLOYEES E WHERE E.JOB_ID = J.JOB_ID) WHERE J.JOB_ID IN (SELECT JOB_ID FROM EMPLOYEES WHERE EMPLOYEE_ID = 100); --第二种写法 UPDATE ( SELECT * FROM EMPLOYEES E, JOBS J WHERE E.JOB_ID = J.JOB_ID AND E.EMPLOYEE_ID = 100 ) SET MIN_SALARY = SALARY;
--更多参见:Oracle SQL 精萃
-- 声明:转载请注明出处
-- Last edited on 2015-08-11
-- Created by ShangBo on 2015-06-18
-- End