1.如果匹配上,将DictB的Desc更新成DictA中对应的字段Desc
首先创建两张表格:
CREATE TABLE DictA(id1 number, desc1 varchar2(10));
CREATE TABLE DictB(id1 number, desc1 varchar2(10));
INSERT INTO DictA VALUES (1001, '基金');
INSERT INTO DictA VALUES (2001, '保险');
INSERT INTO DictA VALUES (3001, '证券');
INSERT INTO DictA VALUES (3002, '信托');
INSERT INTO DictB VALUES (1002, '证券');
INSERT INTO DictB VALUES (3001, '银行');
COMMIT;
解题思路:
如果ID匹配得到,则修改(如果ID匹配不到,则插入),类似于增量同步;
又可以用ID和Desc合并判断。
MERGE INTO DICTB B
USING (SELECT * FROM DICTA) A
ON (B.ID1 = A.ID1)
WHEN MATCHED THEN
UPDATE SET B.DESC1 = A.DESC1;
注意事项:
--ORA.00903 表名无效 ,源表要加() 括号
--ORA.00969 缺失ON关键字,ON条件也要加上()括号
2.显示如右图所示,及格分数为60;
首先创建表格:
CREATE TABLE COURSE(COURSEID NUMBER,COUSERNAME VARCHAR2(10),SCORE NUMBER);
INSERT INTO COURSE VALUES (1, 'java',70);
INSERT INTO COURSE VALUES (2, 'Servlet',60);
INSERT INTO COURSE VALUES (3, 'Oracle',90);
INSERT INTO COURSE VALUES (4, 'xml',40);
INSERT INTO COURSE VALUES (5, 'jsp',50);
INSERT INTO COURSE VALUES (6, 'Chinese',80);
COMMIT;
解题思路:
Case When 对Score多条件判断,并添加多新一列重命名Mark。
SELECT C.*,
CASE WHEN SCORE < 60 THEN 'FAIL'
ELSE 'PASS' END AS MARK
FROM COURSE;
注意事项:
ORA.00923 未找到要求的From关键字 - 不能直接用*返回所有子段
数据库在插入新列Mark后,无法辨认。
因此对表起别名,然后用别名.*
3.将表格中的女生全部迁移到表B上。
首先创建表格:
CREATE TABLE T_CLASSA(NAME VARCHAR2(10),GENDER VARCHAR2(2),STUNUM VARCHAR2(10));
insert into T_CLASSA values('李犇牪', '男','C20160001');
insert in