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 into T_CLASSA values('张叒?', '男','C20160002');

insert into T_CLASSA values('王森林', '男', 'C20160003');

insert into T_CLASSA values('杜歘欻', '男', 'C20160004');

insert into T_CLASSA values('刘歮歧', '男', 'C20160005');

insert into T_CLASSA values('秦?爻', '男', 'C20160007');

insert into T_CLASSA values('冯?厽', '男', 'C20160009');

insert into T_CLASSA values('聂巜巛', '男', 'C20160011');

insert into T_CLASSA values('金椽?', '男', 'C20160013');

insert into T_CLASSA values('胡昍晶', '男', 'C20160014');

insert into T_CLASSA values('李蕾', '女', 'C20160015');

分析思路:

插入一张临时表,并将源表中的Gender筛选出来等于'女'

INSERT INTO T_CLASSB SELECT * FROM T_CLASSA WHERE GENDER ='女';

4.将以下格式转化为右图D_Day所示:

Select To_Date(c_Day,'yyyy/mm/dd') As d_Day From Tmonth;

5.注意匹配不到的数据,则转换为为未知。

创建两张表:

CREATE TABLE T_COURSE

(

SID VARCHAR(4),

CourseID NUMBER(2)

);

CREATE TABLE T_NAME

(

COURSEID NUMBER(4),

CNAME VARCHAR2(4)

);

INSERT INTO T_COURSE VALUES('1001',1);

INSERT INTO T_COURSE VALUES('1001',2);

INSERT INTO T_COURSE VALUES('1001',3);

INSERT INTO T_COURSE VALUES('1001',4);

INSERT INTO T_COURSE VALUES('1002',1);

INSERT INTO T_COURSE VALUES('1002',2);

INSERT INTO T_COURSE VALUES('1002',3);

INSERT INTO T_NAME VALUES(1,'物理');

INSERT INTO T_NAME VALUES(2,'生物');

INSERT INTO T_NAME VALUES(3,'化学');

SELECT * FROM T_COURSE;

SELECT * FROM T_NAME;

分析思路:

1.SID和COURSE分别出自两张不同的表,而且以SID所在的表为主表全面返回,因此用左连接。

2.如果左连接后,因为没有对应的CourseID = 4的值出现在课表上,则会出现空值,用空值转换行数Nvl,替换成未知。

3.空值属性,不参与聚合逻辑运算,而且排序最大。最后不要忘记添加Order by,对SID课程号进行升序排序。

SELECT T1.SID,NVL(T2.CNAME,'未知') FROM T_COURSE T1

LEFT JOIN T_NAME T2

ON T1.COURSEID = T2.COURSEID

ORDER BY T1.SID;

6.查询最近一次的通话记录

创建表格:

CREATE TABLE T_CONTACT

(

日期 VARCHAR2(10),

姓名 VARCHAR2(4),

通话记录 NUMBER(10)

);

INSERT INTO T_CONTACT VALUES('2015/07/23','张三',11111111);

INSERT INTO T_CONTACT VALUES('2015/07/24','张三',22222222);

INSERT INTO T_CONTACT VALUES('2015/07/25','张三',33333333);

INSERT INTO T_CONTACT VALUES('2015/07/23','李四',11111111);

INSERT INTO T_CONTACT VALUES('2015/07/24','李四',22222222);

INSERT INTO T_CONTACT VALUES('2015/07/25','李四',33333333);

INSERT INTO T_CONTACT VALUES('2015/07/24','王五',22222222);

INSERT INTO T_CONTACT VALUES('2015/07/25','王五',11111111);

分析思路:

看目标表只有一个日期字段,细分到每日。

则有两种方法,一用分析函数排序,取每个日期第一名。

二对日期进行最大值Max判断。

--- 方法一: 用分析函数

SELECT * FROM

(

SELECT T.*,

ROW_NUMBER()OVER(PARTITION BY 姓名 ORDER BY 日期) AS RK

FROM T_CONTACT T

) WHERE RK =1;

--- 方法二: 套用子查询,取最大值

SELECT * FROM T_CONTACT WHERE 日期 IN

(

SELECT MAX(日期) FROM T_CONTACT GROUP BY 姓名

);

7.找出重复的Name

分析思路:

按名字分组,分组后的数值如果大于1的,则代表重复;

Select name from emp group by name having count(1)>1;

8.查找不带J的员工姓名

分析思路:

1.用INSTR进行模糊查询,然后进行判断

2.不要忘记还有NULL的判断,

-- 模糊查询Like

Select name from emp\_test where name

not like '%J%' or name is null;

-- Instr查询字符串,字符是否存在?

Select name from emp\_test WHERE

INSTR(NAME,'J',1,1)=0 or name is null;

9.查询这个班里面的人数。

每组的最高分,最低,平均分。并按照平均分降序。

分析思路:

1.统计每个班的人数,首要进行Group By班级

2.最高,最低,平均分都是聚合函数,通常都要结合Group by 使用

3.按平均分排序,Order by Desc

4.每个新的指标创建新的一列

SELECT C_CLASS, COUNT(1) AS 人数, MAX(SCORE) AS 最高分, MIN(SCORE) AS 最低分, AVG(SCORE) AS 平均分 FROM TSCORE

GROUP BY C_CLASS

ORDER BY 平均分 DESC;

10.创建视图,计算环比,同比

分析思路:

1.创建视图,固定句式:Create or Replace view view_name AS ();

2.同比环比,用位移分析函数

CREATE OR REPLACE VIEW v_sale AS

SELECT MONTHS,sell,

LAG(sell,12) Over (Order By Months) AS lastyear, --同比

LAG(sell,1) Over (Order By Months) AS lastmonth --环比

FROM Sale;

11.左图作为源表,生成右图

分析思路:

1.Sell销售额根据Seson字段分类汇总Group By

2.Seson字段由几个字符串组成,Concat或者||连接

3.To_char函数范围季度

创建表格:

CREATE TABLE T_SEASON

(

MONTH VARCHAR2(10),

SELL NUMBER(4)

);

INSERT INTO T_SEASON VALUES('201501',1000);

INSERT INTO T_SEASON VALUES('201502',1100);

INSERT INTO T_SEASON VALUES('201503',1300);

INSERT INTO T_SEASON VALUES('201504',1000);

INSERT INTO T_SEASON VALUES('201505',1000);

INSERT INTO T_SEASON VALUES('201506',1000);

INSERT INTO T_SEASON VALUES('201507',1000);

INSERT INTO T_SEASON VALUES('201508',4000);

INSERT INTO T_SEASON VALUES('201509',1000);

INSERT INTO T_SEASON VALUES('201510',3000);

INSERT INTO T_SEASON VALUES('201511',1000);

INSERT INTO T_SEASON VALUES('201512',2200);

INSERT INTO T_SEASON VALUES('201601',1700);

SELECT * FROM T_SEASON

解题答案如下:

SELECT SUBSTR(T.MONTH,1,4)||'Q'||TO_CHAR(TO_DATE(T.MONTH,'yyyy/mm'),'Q') AS SEASON,SUM(SELL) FROM

T_SEASON T

GROUP BY SUBSTR(T.MONTH,1,4)||'Q'||TO_CHAR(TO_DATE(T.MONTH,'yyyy/mm'),'Q')

注意事项:

1.Substr函数(字符,从第几位起,截取长度)

2.有共同的字符连接,可考虑用||连接;

3.字符首先转为日期模式,才能用To_char的第二个参数Q,返回当前季度。

4.Group by 不能添加组函数(聚合)

12.更新成如右图所示

分析思路:

1.表名一致,同在一张表操作,只对Name字段更新。用Update Set语句。

2.Name 等于FirstName 加 空格 加 LastName。

Update ClassaA Set Name=Firstname||' '||lastname;

13.如下图所示,新增一列得出右图结果

分析思路:

1.用Case When对Age多条件判断

2.逻辑结构如同第2题

Select Id,Name,Age,

(Case When Age<=20 Then '20-'

When Age<= 30 Then '21 to 30'

When Age<= 40 Then '31 to 40'

When Age<= 50 Then '41 to 50'

Else '50+' End) AS AgePara

From Age;

14.类似于数据清洗环节,直接将Name里面的空格替换移除。

分析思路:

1.用Replace替代函数,将空格替换为''。

Select Id,Replace(Name,' ','') As Name From Name;

15,Using the SQL statement, you are going to create a function F_MAX(PI_VAR1 IN NUMBER, PI_VAR2 IN NUMBER), with 2 input parameter which are PI_VAR1 and PI_VAR2. If the value of PI_VAR1 is larger than PI_VAR2, the value of PI_VAR1 is returned, otherwise the value of PI_VAR2 is returned

写一个自定义函数,实现输入两个数,并进行判断。

首先我们要写一个自定义函数模型。

CREATE OR REPLACE FUNCTION FUNCTION_NAME(PI_VAR1 IN NUMBER,

PI_VAR2 IN NUMBER)

RETURN NUMBER -- 函数的返回类型

IS

BEGIN

-- 判断两个值谁打谁小

END;

解题答案:

CREATE OR REPLACE FUNCTION F_MAX(PI_VAR1 IN NUMBER,

PI_VAR2 IN NUMBER)

RETURN NUMBER -- 函数的返回类型

IS

BEGIN

IF PI_VAR1>PI_VAR2 THEN

RETURN PI_VAR1;

ELSE

RETURN PI_VAR2;

END IF;

END;

mysql和oracle面试题_【SQL 面试题2】Mysql 和Oracle数据库相关推荐

  1. mysql和linux的题目_最强Linux和Mysql面试题套餐,让你的面试无懈可击!

    引言: 大家好,我是一菲,在软件测试当中linux 操作系统和Mysql数据库的内容是十分的知识同时也是十分重要的.所以一菲这两天通过查阅资料等其他方式为大家梳理了liunx和Mysql面试题大礼包, ...

  2. mysql注入实例获取答案_本文实例讲述了MySQL解决SQL注入的另类方法。分享给大家供大家参考,具体如下:问题解读我觉得,这个问题每年带来的成本可以高达数十亿美元了。本文就来谈谈,...

    本文实例讲述了MySQL解决SQL注入的另类方法.分享给大家供大家参考,具体如下: 问题解读 我觉得,这个问题每年带来的成本可以高达数十亿美元了.本文就来谈谈,假定我们有如下 SQL 模板语句: se ...

  3. linux mysql复制一个表结构图_详解Windows和Linux下从数据库导出表结构,以及Linux下如何导入.sql文件到MySQL数据库...

    本文首先讲解window下如何使用Navicat for MySQL导出表. 1.如下图所示,目标数据库是mydatabase,数据库中有四张表. 2.选中该数据库,右键--数据传输. 3.左边可以选 ...

  4. 13.4 mysql用户管理 13.5 常用sql语句 13.6 mysql数据库备份恢复

    mysql用户管理 1.创建一个普通用户并授权 [root@gary-tao ~]# mysql -uroot -p'szyino-123' Warning: Using a password on ...

  5. mysql删除分表键_一文看懂 MySQL 分区和分表,提高表增删改查效率

    原标题:一文看懂 MySQL 分区和分表,提高表增删改查效率 作者:冯帅,精通Oracle. MySQL. 擅长异构数据库数据同步及迁移.数据库的设计和调优,对高可用方案有深入研究. MySQL分区和 ...

  6. mysql什么隔离级别最好_面试必问的 Mysql 四种隔离级别,看完吊打面试官

    什么是事务 事务是应用程序中一系列严密的操做,全部操做必须成功完成,不然在每一个操做中所做的全部更改都会被撤消.也就是事务具备原子性,一个事务中的一系列的操做要么所有成功,要么一个都不作.sql 事务 ...

  7. mysql查询死锁的次数_一次神奇的MySQL死锁排查记录

    一次神奇的MySQL死锁排查记录 发布时间:2020-08-29 00:50:26 来源:脚本之家 阅读:135 作者:咖啡拿铁 背景 说起Mysql死锁,之前写过一次有关Mysql加锁的基本介绍,对 ...

  8. mysql 5.5.安装包_完美!阿里内部MySQL笔记爆火,肝完不再删库到跑路!(文档+视频贼全!)...

    MySQL凭借着它还不错的性能.还不错的稳定性常年稳居老二宝座,当然最大的优势就是它不要钱,还开源,这让它成为大部分中小型公司,尤其是互联网公司首选的数据库(近年来越来越多的大公司也在尝试将业务转移到 ...

  9. MySQL常见的主从复制架构_如何搭建经典的MySQL 主从复制架构

    什么是MySQL主从架构 首先,大家来看一张图 master-slave 从上图中,可以看出,MySQL主从架构利用的是MySQL的主从复制原理,它主要分三个过程 1.master 主机将操作记录到二 ...

  10. mysql 8.0 集群_集群架构03·MySQL初识,mysql8.0环境安装,mysql多实例

    官方网址 https://dev.mysql.com/downloads/mysql/ 社区版本分析 MySQL5.5:默认存储引擎改为InnoDB,提高性能和可扩展性,增加半同步复制 MySQL5. ...

最新文章

  1. 《R语言实战》第6章
  2. 只需3步,随时随地玩转数据分析
  3. VC++获取屏幕大小第一篇 像素大小GetSystemMetrics
  4. python内置json模块的作用_python详解json模块
  5. c++如何对结构体作为形参设置默认值
  6. SSL 证书变革之时已至,这些变化你都清楚吗?
  7. [Java基础]Lambda表达式练习
  8. 二叉排序树查找的c语言程序,C语言二叉排序(搜索)树实例
  9. 隐私泄漏在线检测源码
  10. 聚合,组合,继承的区别
  11. endnote如何导入txt文件_python如何处理txt及excel文件
  12. 一款开源Office软件---Lotus Symphony在Linux系统下的应用
  13. Ubuntun系统查看系统版本和Python版本的方法
  14. 二叉树遍历的一些非递归算法
  15. Oracle 存储过程简单实例
  16. 黑马程序员JAVAWEB教程P141课后练习
  17. meanshift跟踪算法
  18. Ubuntu下deb文件安装方法图文详解
  19. element-ui的基本使用(一)
  20. 陆奇加入拼多多,担任技术委员会主席!

热门文章

  1. 测试几个免费在线音乐识别器
  2. 9-17每日一题:Leetcode36. 有效的数独
  3. 文本语音阅读器——Python简单实现
  4. three.js入门到实战
  5. 刷题 BFS 广度优先算法 : 大胖子走迷宫 (python, java)
  6. 多因子策略-APT模型
  7. 买阿里云服务器多少钱,不同预算可购买的配置及价格汇总
  8. Windows10搭建EDK2环境
  9. 开题报告:基于java多用户商城平台系统 毕业设计论文开题报告模板
  10. 【数字信号调制】基于 AM+FM+DSB+SSB实现信号调制解调含Matlab源码