orcle mysql 查询_Oracle与Mysql的高级查询与难点sql

一、连接查询 1. 内连接 内连接用于返回满足连接条件的所有记录。默认情况下,在执行连接查询时如果没有指定任何连接操作符,那么这些连接查询都属于内连接。 Sql 代码 1. SELECT a.dname,b.ename from depta,empb where a.deptno=b.deptno and a.deptno=10;

一、连接查询1.内连接内连接用于返回满足连接条件的所有记录。默认情况下,在执行连接查询时如果没有指定任何连接操作符,那么这些连接查询都属于内连接。

Sql代码

1.

SELECTa.dname,b.enamefromdept a,emp bwherea.deptno=b.deptnoanda.deptno=10;

在FROM子句中指定INNER JOIN选项,也可以指定内连接。

Sql代码

1.

SELECTa.dname,b.enamefromdept aINNERJOINemp bwherea.deptno=b.deptnoanda.deptno=10;

从Oracle9i开始,如果主表的主键列和从表的外部键列名称相同,那么可以使用NATURAL JOIN关键字自动执行内连接操作。

Sql代码

1.

SELECTdname,enameFROMdept NATURALJOINemp;

2.左外连接左外连接通过指定LEFT[OUTER]JOIN选项来实现。当使用左外连接时,不仅会返回满足连接条件的所有记录,而且还会返回不满足连接条件的连接操作符左边表的其他行。

Sql代码

1.

SELECTa.dname,b.enameFROMdept aLEFTJOINemp bONa.deptno=b.deptnoANDa.deptno=10;

3.右外连接右外连接通过指定RIGHT[OUTER]JOIN选项来实现的。当使用右外连接时,不仅会返回满足连接条件的所有行,而且还会返回不满足连接条件操作符右边表的其他行。

Sql代码

1.

SELECTa.dname,b.enameFROMdept aRIGHTJOINemp bONa.deptno=b.deptnoANDa.deptno=10;

4.完全外连接完全外连接是指定FULL[OUTER]JOIN选项来实现的。当使用完全外连接时,不仅会返回满足连接条件的所有行,而且还会返回不满足连接条件的所有其他行。

Sql代码

1.

SELECTa.dname,b.enameFROMdept aFULLJOINemp bONa.deptno=b.deptnoANDa.deptno=10;

相当于没连接去掉where条件

Sql代码

1.

SELECTa.dname,b.enamefromdept a,emp;

5.使用(+)操作符在Oracle9i之前,当执行外连接时,都是使用连接操作符(+)来完成的。尽管可以使用操作符(+)执行外连接操作。但Oralce9i开始Oracle建议使用OUTER

JOIN执行外连接。语法如下:SELECT table1.column, table2.column FROM table1, table2 WHERE table1.column1(+) = table2.column2;当使用(+)操作符执行外连接时,应该将该操作符放在显示较少行(完全满足连接条件行)的一端。一句话,左外连接时,(+)要放在右边表的一端。右外连接时,(+)放在左边表的一端。左外连接:

Sql代码

1.

SELECTa.dname,b.enameFROMdept a, emp bwherea.deptno=b.deptno(+)ANDb.deptno(+)=10;

右外连接

Sql代码

1.

SELECTa.dname,b.enameFROMdept a, emp bwherea.deptno(+)=b.deptnoANDa.deptno(+)=10;

二、递归查询1.语法

Sql代码

1.

Select*from….Where[结果过滤条件语句]

2.

Startwith[起始条件过滤语句]

3.

Connectbyprior[中间记录过滤条件语句]

2.例子

Sql代码

1.

Select*fromcompany tWheret.flag=1

2.

Startwitht.company_id=50500000

3.

Connectbypriort.company_id=t.parent_id

说明:

Sql代码

1.

select[level],column,exprfromtable[wherecondition]

2.

[startwith] //[起点]

3.

[connectbyprior+主键=外键或外键=主键]

a.自顶向下:左边放主键,右边放外键。b.自底向上:右边放主键,左边放外键。c.level(伪列)层次的级别,不固定值。三、更改数据库的时间格式1、临时更改alter session set nls_date_format='YYYY-MM-DD HH24:MI:SS'2.永久更改在注册表[HKEY_CODE_MACHINE\SOFTWARE\ORACLE]里面,加入NLS_DATE_FORMAT,值为YYYY-MM-DD

HH24:MI:SS。3、Unix下,在用户的.profile文件中增加以下内容:NLS_DATE_FORMAT=YYYY-MM-DD HH24:MI:SSexport NLS_DATE_FORMAT附:在SQLPLUS下,实现中-英字符集转换

Sql代码

1.

altersessionsetnls_language='AMERICAN';

2.

altersessionsetnls_language='SIMPLIFIED CHINESE';

四、复制表和数据1)建表

Sql代码

1.

createtabletestasselect*fromdept;--从已知表复制数据和结构

2.

createtabletestasselect*fromdeptwhere1=2;--从已知表复制结构但不包括数据

建立视图:

Sql代码

1.

CREATEORREPLACEVIEWdept_10ASSELECTempno,ename,job,sal,deptnoFROMempWHEREdeptno=10ORDERBYempno;

建立实体化视图:

Sql代码

1.

CREATEMATERIALLIZEDVIEWsummary_empASSELECTdeptno,job,avg(sal) avgsal,sum(sal) sumsalFROMempGROUPBYcube(deptno,job);

实体化视图管理是用于汇总,预计算,复制或分发数据的对象,在大型的数据库中使用它可以提高涉及到的SUM,COUNT,AVG,MIN,MAX等的表的查询的速度,只要在实体化视图管理上创建了统计,查询优化器将自动的使用实体化视图管理,这特性被称为QUERY

REWRITE(查询重写).与普通的视图不同的是实体化视图管理存储数据,占据数据库的物理空间的.2)不使用列的列表插入数据:

Sql代码

1.

insertintotestselect*fromdept;

3)使用DEFAULT插入数据:如果列存在默认值,则会使用其默认值;如果列不存在默认值,则自动使用NULL.

Sql代码

1.

insertintodeptvalues(10,'市场部',default);

4)使用子查询插入数据

将查出来的内容全部插入

Sql代码

1.

insertintoemployee(empno,ename,sql,deptno)

2.

selectempno,ename,sal,deptnofromemp

3.

wheredeptno = 10;

将查出来的内容部分插入

Sql代码

1.

insertintoemployee(empno,ename,sql,deptno)

2.

selectempno,’杨凯’,sal,deptnofromemp

3.

wheredeptno = 10;

当要装载大批量数据时,用直接装载方式:

Sql代码

1.

insert/*+APPEND */intoemployee(empno,ename,sql,deptno)

2.

selectempno,ename,sal,deptnofromemp

3.

wheredeptno = 10;

5)使用多表插入数据。从Oracle9i开始,使用INSERT语句可以将某张表的数据同时插入到多张表中。使用ALL操作符,在每个条件子句上都要执行INTO子句后的子查询。

Sql代码

1.

insertallwhendeptno=10thenintot_dept10

2.

whendeptno=20thenintot_dept20

3.

whendeptno=30thenintot_dept30

4.

whenjob='clerk'thenintot_clerk

5.

elseintot_other

6.

select*fromemp;

使用FIRST操作符执行多表插入,如果数据已经满足了先前条件,并且已经被插入到某表,那么该行数据在后续插入中将不会被再次使用。

Sql代码

1.

insertfirstwhendeptno=10thenintot_dept10

2.

whendeptno=20thenintot_dept20

3.

whendeptno=30thenintot_dept30

4.

whenjob='clerk'thenintot_clerk

5.

elseintot_other

6.

select*fromemp;

五、多列子查询多列子查询是指返回多列数据的子查询语句。当多列子查询返回单行数据时,在WHERE子句中可以使用单行比较符;当多列子查询返回多行数据时,在WHERE子句中必须使用多行比较符(IN,ANY,ALL)。如显示与Id为10000的人员部门和岗位完全相同的所有雇员:

Sql代码

1.

SELECTename,job,sal,deptnoFROMempWHERE(deptno,job)=(SELECTdeptno,jobFROMempWHEREid=10000);

当执行成对比较是时,因为要求多个列的数据必须同时匹配,所以必须要使用多列子查询实现。如显示工资和补助与部门30雇员的工资和补助完全匹配的所有雇员:

Sql代码

1.

SELECTename,sal,comm,dptnoFROMempWHERE(sal, nvl(comm,-1))IN(SELECTsal, nvl(comm,-1)FROMempWHEREdeptno=30);

执行非成对比较时,应该使用多个多行子查询来实现。如显示工资匹配于部门30工资列表、补助匹配于部门30补助列表的所有雇员:

Sql代码

1.

SELECTename,sal,comm,deptnoFROMempWHEREsalIN(SELECTsalFROMempWHEREdeptno=30)ANDnvl(comm,-1)IN(SELECTnvl(comm,-1)FROMempWHEREdeptno=30);

六、相关子查询与FROM子句中子查询相关子查询是指需要引用主查询表列的子查询语句,是通过EXISTS谓词来实现的。如显示工作在“NEW YORK”的所有雇员:

Sql代码

1.

SELECTename,job,sal,deptnoFROMempWHEREEXISTS (SELECT1FROMdeptWHEREdept.deptno=emp.deptnoANDdept.loc='NEW YORK');

在FROM子句中使用子查询时,该子查询会被作为视图对待。因此也被称为内嵌视图。如显示高于部门平均工资的雇员信息:

Sql代码

1.

SELECTename,job,salFROMemp, (SELECTdeptno,avg(sal) avgsalFROMempGROUPBYdeptno) deptWHEREemp.deptno=dept.deptnoANDsal>dept.avgsal;

七、合并查询集合操作符有UNION,UNION ALL,INTERSECT和MINUS。当使用集合操作符时,必须确保不同查询的列个数和数据类型都要匹配。有以下一些限制:1.对于LOB,VARRAY和嵌套表列来说,集合操作符是无效的。2.对于LONG列来说,UNION,INTERSECT,MINUS操作符是无效的。3.如果选择列表包含了表达式,则必须为为其指定列别名。(一)UNIONUNION操作符用于获取两个结果集的并集。当使用该操作符时,会自动去掉结果集中的重复行。并且会以第一列的结果进行排序。

Sql代码

1.

SELECTename,sal,jobFROMempWHEREsal>2500UNIONSELECTename,sal,jobFROMempWHEREjob='MANAGER';

(二)UNION ALLUNION ALL操作符获取两个结果集的并集,但不会取消重复值,而且也不会以任何列进行排序。

Sql代码

1.

SELECTename,sal,jobFROMempWHEREsal>2500UNIONALLSELECTename,sal,jobFROMempWHEREjob='MANAGER';

(三)INTERSECTINTERSECT操作符用于获取两个结果集的交集。当使用该操作符时,只会显示同时存在于两个结果集中的数据,并且会以第一列进行排序。

Sql代码

1.

SELECTename,sal,jobFROMempWHEREsal>2500INTERSECTSELECTename,sal,jobFROMempWHEREjob='MANAGER';

(四)MINUSMINUS用于获取两个结果集的差集。以第一列进行排序。

Sql代码

1.

SELECTename,sal,jobFROMempWHEREsal>2500 MINUSSELECTename,sal,jobFROMempWHEREjob='MANAGER';

八、CASE表达式和倒叙查询通过CASE表达式,可以避免调用过程来完成条件分支操作。

Sql代码

1.

SELECTename,sal,CASEWHENsal>3000THEN3WHENsal>2000THEN2ELSE1ENDgradeFROMempWHEREdeptno=10;

默认情况下,当执行查询操作时,只能看到最近提交的数据。从Oracle9i开始,通过使用倒叙查询(Flashback

Query)特征,可以查看到过去某个时间点所提交的数据。注意,如果使用倒叙查询,那么要示数据库必须彩UNDO管理方式,并且初始化参数undo_retention限制了UNDO数据的保留时间。

Sql代码

1.

SELECTename,salFROMempASOFTIMESTAMPto_timestamp('2009-01-01 12:12:00','YYYY-MM-DD HH24:MI:SS')WHEREename='CLARK';

九、使用WITH子句重用子查询从Oracle9i开始,通过WITH子句可以给子查询指定一个名称,并且使得在一条语句中可以完成所有任务,从而避免使用临时表。如显示部门工资总和高于雇员工资总和三分之一的部门名称及工资总和。

Sql代码

1.

WITHsummaryAS(SELECTdname,SUM(sal)ASdept_totalFROMemp,deptWHEREemp.deptno=dept.deptnoGROUPBYdname)

2.

SELECTdname, dept_totalFROMsummaryWHEREdept_total>(

3.

SELECTSUM(dept_total) * 1/3FROMsummary);

十、oracle对记录进行去重sql

Sql代码

1.

DELETEFROM[TABLE_NAME]

2.

WHEREROWIDNOTIN(

3.

SELECTMIN(ROWID)FROM[TABLE_NAME]

4.

GROUPBY[COL1,COL2,COL3...]

5.

);

统计酒店名不重复的总数

Sql代码

1.

SELECT COUNT(DISTINCT(hotel_id)) FROMt_app_travel_hotel_comment;

十一、SQL排序后的NULL位置可以把那些NULL值假想为所有内容中值是最大的,因此,升序排序后NULL值在最后,倒序排序后NULL值在最前!当指定"NULLSFIRST"时,无论是升序排序还是倒序排序,NULL值都会排列在最前面;当指定“NULLSLAST”时,无论是升序排序还是倒序排序,NULL值都会排列在最后面。

Sql代码

1.

SELECT*FROMtORDERBYxDESCNULLSLAST;

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/532871.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[2020-AAAI] Revisiting Image Aesthetic Assessment via Self-Supervised Feature Learning 论文简析

[2020-AAAI] Revisiting Image Aesthetic Assessment via Self-Supervised Feature Learning 论文简析 论文链接:https://arxiv.org/abs/1911.11419 本文探索从自监督的角度进行美学评估。基于一个基本的动机:一个好的美学特征表示应该能够辨别出不同的…

java9 堆外内存_java堆外内存泄漏排查

当考虑Java中的内存泄漏时,我们通常会考虑Java堆泄漏,即在堆中分配的对象没有被垃圾收集。这是我在处理一台服务器内存泄漏时的想法,但我即将经历的远超出我的想象。症状:运行Vertx应用程序(没有交换分区)的生产服务器被Linux内存…

[2020-CVPR] Dynamic Region-Aware Convolution 论文简析

[2020-CVPR] Dynamic Region-Aware Convolution 论文简析 论文地址:https://arxiv.org/abs/2003.12243 参考代码地址(非官方):https://github.com/shallowtoil/DRConv-PyTorch 代码笔者自己试了一下,应该是可以的&…

java activity模式_Activity的启动模式

Android系统采用任务栈的方式来管理Activity实例。栈是后进先出的数据结构。通常一个应用程序对应一个任务栈,默认情况下,每启动一个Activity都会入栈,处于栈顶位置。用户操作的永远都是栈顶的Activity。Activity可以层叠摆放,每启…

Python 中的可执行对象 eval,exec 和 compile与其在深度学习训练中的应用实例

Python 中的可执行对象 eval,exec 和 compile 与其在深度学习训练中的应用实例 eval 计算指定表达式的值。也就是说它要执行的python代码只能是单个表达式(注意eval不支持任何形式的赋值操作),而不能是复杂的代码逻辑。 eval(s…

php写简单接口_php写接口的日常

php写接口的日常/*评论列表*/public function commentListW(){$base new Base();$info $base->getUserByToken();$shop_id $info[shop_id];$page $this->data[page]?:1;$pagesize $this->data[pagesize]?:C(ROLLPAGE);$search $this->data[search];$and &…

mmdetection 使用笔记 01: 安装与简单的推理demo

mmdetection 使用笔记 01: 安装与简单的推理demo mmdetection是来自商汤和港中文联合实验室openmmlab推出的目标检测工具包,与其同系列的还有基础视觉包mmcv,图像分类mmclassification,还有mmaction,mmaction2等等。 今天第一次…

php无限评论回复_php实现无限级评论功能_后端开发

php去除数组的键名的方法_后端开发在php中可以使用“array_values()”函数去除数组的键名,该函数返回包含数组中所有的值的数组,其语法是“array_values(array)”,其参数“array”表示规定的数组,返回值是包含数组中所有的值的数组…

错误类型、混淆矩阵及目标检测常用评价指标

目标检测常用评价指标 本文主要参考陈恺大佬在B站商汤账号的介绍mmdetection的视频。 检测结果的正确/错误类型 真阳性(Ture Positive):算法检测到了某类物体(Positive),而实际图中也确实有这个物体&…

php显示json,PHP解决JSON中文显示问题

PHP如何解决JSON中文显示问题&#xff1f;本文主要介绍了PHP JSON格式的中文显示问题解决方法&#xff0c;本文总结了3种解决中文显示\u开头字符问题的方法。希望对大家有所帮助。返回json数据中文显示的问题解决方法一&#xff1a;<?php function Notice(){include ./incl…

使用yolov5训练自己的目标检测数据集

使用yolov5训练自己的目标检测数据集 yolov4出来后不久&#xff0c;又出现了yolov5&#xff0c;没有论文。虽然作者没有放上和yolov4的直接测试对比&#xff0c;但在COCO数据集的测试效果还是很可观的。很多人考虑到YOLOv5的创新性不足&#xff0c;对算法是否能够进化&#xf…

php的integer,PHP整型 integer

整数是一个没有小数的数字。整数规则:整数必须至少有一个数字 (0-9)整数不能包含逗号或空格整数是没有小数点的整数可以是正数或负数整型可以用三种格式来指定&#xff1a;十进制&#xff0c; 十六进制( 以 0x 为前缀)或八进制(前缀为 0)。在以下实例中我们将测试不同的数字。 …

einops和einsum:直接操作张量的利器

einops和einsum&#xff1a;直接操作张量的利器 einops和einsum是Vision Transformer的代码实现里出现的两个操作tensor维度和指定tensor计算的神器&#xff0c;在卷积神经网络里不多见&#xff0c;本文将介绍简单介绍一下这两样工具&#xff0c;方便大家更好地理解Vision Tra…

php的filter input,php中filter_input函数用法分析

本文实例分析了php中filter_input函数用法。分享给大家供大家参考。具体分析如下&#xff1a;在 php5.2 中,内置了filter 模块,用于变量的验证和过滤,过滤变量等操作&#xff0c;这里我们看下如何直接过滤用户输入的内容.fliter 模块对应的 filter_input 函数使用起来非常的简单…

COCO 数据集格式及mmdetection中的转换方法

COCO 数据集格式及mmdetection中的转换方法 COCO格式 CV中的目标检测任务不同于分类&#xff0c;其标签的形式稍为复杂&#xff0c;有几种常用检测数据集格式&#xff0c;本文将简要介绍最为常见的COCO数据集的格式。 完整的官方样例可自行查阅&#xff0c;以下是几项关键的…

php获取h1,jQuery获取h1-h6标题元素值方法实例

本文主要介绍了jQuery实现获取h1-h6标题元素值的方法,涉及$(":header")选择器操作h1-h6元素及事件响应相关技巧,需要的朋友可以参考下&#xff0c;希望能帮助到大家。1、问题背景&#xff1a;查找到h1-h6&#xff0c;并遍历它们&#xff0c;打印出内容2、实现代码&am…

在导入NVIDIA的apex库时报错 ImportError cannot import name ‘UnencryptedCookieSessionFactoryConfig‘ from

在导入NVIDIA的apex库时报错 ImportError: cannot import name ‘UnencryptedCookieSessionFactoryConfig’ from ‘pyramid.session’ (unknown location) 报错 在使用NVIDIA的apex库时报错 ImportError: cannot import name ‘UnencryptedCookieSessionFactoryConfig’ fro…

php怎么取request,PHP-如何在Guzzle中获取Request对象?

我需要使用Guzzle检查数据库中的很多项目.例如,项目数量为2000-5000.将其全部加载到单个数组中太多了,因此我想将其分成多个块&#xff1a;SELECT * FROM items LIMIT100.当最后一个项目发送到Guzzle时,则请求下一个100个项目.在“已满”处理程序中,我应该知道哪个项目得到了响…

[2021-CVPR] Jigsaw Clustering for Unsupervised Visual Representation Learning 论文简析及关键代码简析

[2021-CVPR] Jigsaw Clustering for Unsupervised Visual Representation Learning 论文简析及关键代码简析 论文&#xff1a;https://arxiv.org/abs/2104.00323 代码&#xff1a;https://github.com/dvlab-research/JigsawClustering 总结 本文提出了一种单批次&#xff0…

java jps都卡死,java长时间运行后,jps失效

在部署完应用后&#xff0c;原本jps使用的好好的&#xff0c;能正确的查询到自己正在运行的java程序。但&#xff0c;过了一段时间后&#xff0c;再使用jps来查看运行的应用时&#xff0c;自己运行的程序都看不到&#xff0c;但是自己也没有关闭这些程序啊&#xff01;然而使用…