oracle和mysql查询_ORACLE 数据库 查询语句与DML语句

本文详细介绍了Oracle数据库的查询语句,包括基础查询、子查询、多表关联查询(等值、左、右、内、全连接)以及使用`exists`和`not exists`的查询。此外,还讲解了DML语句,如`insert`、`update`和`delete`的基本用法及高级应用,帮助读者理解如何在Oracle数据库中操作数据。
摘要由CSDN通过智能技术生成

一、查询语句

ORACLE 数据库中获得数据表中的结果,称为查询语句,其关键词是 select(下面其所有的示例均为scott模式下的对象)

1.1 查询语句基础

1.1.1 获得表中全部字段与结果

语法如下

select *  from table_name;

示例

查询 雇员表的全部信息

0f64cdf70b7d72996f107956612ba98c.png

1.1.2 获得表中需要的字段结果

说明

通过显示指定表中的字段名可以只显示需要字段

语法如下

select col1[,col2,col3....]  from table_name;

示例

查询雇员表的雇员编号和雇员名

0bb17ad6375c5ec61e37bf728cbc2f29.png

1.1.3 按照过条件过滤结果

说明

可以通过where关键字卡条件来过滤结果, 条件字段等于或者大于或者小于某个值等等,与可以多个条件连用

语法如下

select *  from table_name where col1 ='XXXX';

示例1

查询雇员表的雇员编号为7934的结果

5ba67f11c4499cb3fb588e585e231e66.png

示例2

查询雇员表的部门编号为30,并且奖金大于300的结果

2460846107bed344165d26358fa6e9e8.png

1.1.4  按照某个值排序查询的结果

默认的查询结果是随机显示的,但是可以通过关键词 order by 来使结果按照一定的规则排序显示,可以通过 ASC或者desc来指定升序还是降序排列,缺省为asc

语法

select * from table_name order by col1 [asc|desc];

示例

通过部门编号降序显示结果

d457552358bbd751ac5707a01f26f444.png

1.2 高级查询语句

1.2.1 子查询

说明

子查询,主表的条件字段结果引用另一个表中的结果,其中子表的查询字段只能查询一个,可以引用子集的多行结果关键字为 in或者 not in,也可以只返回一行结果,关键字是=

语法

select *  from table_name1 where col1 in | not in|= (select col1 from table_name2);

示例1

返回多个子结果

(注意子查询的条件,子查询的条件筛选是多个)

b59848188025eabe52e540c5d1d9f552.png

示例二

返回单个子结果

(注意子查询的条件,子查询的条件筛选是单个)

9aeab9e968b22388ca346df718d881e1.png

1.2.2多表等值关联查询

说明

1. 当查询结果需要引用其他表中结果,需要进行关联查询

2. 在from 后面接两个或两个以上的表

3. 确保关联表中的关联字段值是唯一的,否则会产生笛卡尔积

4. 如果在查询字段中有,两个表的字段都包含了该字段,则需要显示的指定字段来自于哪个表

5. 可以在表名后面跟别名

语法

select col1[,col2,col3....]  from table_name1,table_name2 where tba1.col1=tab2.col1;

示例

将雇员表和部门表进行链接查询

(注意看,deptno字段,因为两个表都有该字段,所以需要显示的指定一个表,如果给表起了别名,则字段前指定表名也需要写表别名)

6f0761df0e1a8653dec10fb979c6fbab.png

1.2.3 左关联查询

说明

1.哪个表名在前,哪个表就是左边,在后面的为右表

2. 左表的全部信息都会查询出来,右表的信息只有关联上的信息才会查询到,右表没有关联上的信息,则会显示为空,关键词 left join,也可以用(+)来关联

语法

select col1[,col2,col3....]  from table_name1,table_name2 where tba1.col1=tab2.col1(+);

select col1[,col2,col3....]  from table_name1 left join table_name2 on tba1.col1=tab2.col1;

示例1

使用(+)写法,(+)在右表上

fe2bc19c0085b856257a9071f73c3a1b.png

示例二

使用 left join on 关键词

4b7f300a7a7186338df0a4d5d6a65f1f.png

1.2.4 右关联查询

说明

1.哪个表名在前,哪个表就是左边,在后面的为右表

2. 右表的全部信息都会查询出来,左表的信息只有关联上的信息才会查询到,左表没有关联上的信息,则会显示为空,关键词 right join,

也可以用(+)来关联

语法

select col1[,col2,col3....]  from table_name1,table_name2 where tba1.col1(+)=tab2.col1;

select col1[,col2,col3....]  from table_name1 right join table_name2 on tba1.col1=tab2.col1;

示例1

使用(+)写法,(+)在左表上

413ce12df00657d3b626232e431fc68e.png

示例二

使用 right join on 关键词

fe70b237aeab5573cc4c9de72f1cbdfd.png

1.2.5 内连接

说明

内连接实际不分左右表

内连接只会显示两个表能关联上的结果,没有关联上的数据不会显示

内连接使用inner join关键词

语法

select col1[,col2,col3....]  from table_name1 [inner] join table_name2 on tba1.col1=tab2.col1;

示例

55475ace2b1d058c011a9a87f6458697.png

1.2.6 全连接

说明

全连接不分左右表

全连接会显示两个表的所有结果,没有关联上的数据则会显示为空

全连接使用full join关键词

语法

select col1[,col2,col3....]  from table_name1 full join table_name2 on tba1.col1=tab2.col1;

b48e1f806b26a05def830b69dd09a970.png

1.2.7

使用

exists

not  exists

查询

说明

使用 exist

可以查询主表数据存在附表中的结果

使用 not exist

可以查询主表数据不在附表中的结果

语法

select * from tab1 where [not] exists(select 1 from tab2 where tab1.col=tab2.col);

示例1

查询部门表部门标号在雇员表中的数据

997bf02e09888dfd2846305e17f02da2.png

示例2

查询部门表部门标号不在雇员表中的数据

99a3c3195698faac48aa49f8f9b79f7d.png

、DML语句

Oracle

数据库的

DML

表数据的操作有三种:

1 insert

(插入)

2 update

(更新)

3 delete

(删除)

(为了避免更改掉原始的数据,所以我把emp复制了一份出来,表名为emp_new,表空没有数据。以下的用例都使用这张emp_new)

2.1 insert 语句使用

2.1.1 insert 基本用法

说明

1. 如果想要给表中添加数据的话,则需要使用insert into和values关键字来添加我们想要的数据

2. 可以选择要填充的字段名与值来插入数据

3. 也可以全表所有字段来插入数据

4. 在给定值的时候一定要注意值要符合表规定(比如字段类型,是否为空,是否唯一等等)

5.需要注意的是,在插入之后需要commit(提交)后才能永久的生效我们的操作。

语法

按照选定字段插入,values后面值的位置,对应前面字段的顺序,不指定的字段缺省都为空

insert into tab_name(col1[,col2,col3....]) values('value1'[,'value2','value3'....]);

插入表中全部值,这种写法需要注意的是,不能跳过字段,否则会串列

insert into tab_name values('value1','value2','value3'....);

示例1

按照指定字段插入值

008c7ad01f448cb2d99894e34f6baf8d.png

示例2

插入所有字段

9ca3cdfae8f9e56b817151607ba3259e.png

2.1.2 引用另一个表的结果插入

说明

可以将另一个表中的查询结果插入目标表,可以是选择字段插入,也可以是全字段列的插入,但是需要注意的是无论哪种方式,都要注意表限制和字段顺序,以及两个表值的个数数量要一致。

语法

insert into tab1(col1[,col2,col3....]) select col1[,col2,col3....]  from tab2;

insert into tab1  select  * from tab2;

示例1

按字段插入另一个的结果

(该插入是引用了emp表的雇员编号为7902的查询结果)

49435ff9e42d0086eed4fa1d83bf4fef.png

示例2

引用另一个表中的全部字段插入

d159f268e0568186a6cfab605e8999c5.png

2.2 update语句使用

2.2.1 update 基本用法

说明

1. 如果想要在表中修改已存在数据的话,则需要使用

update  set关键字来修改我们想要的数据

2. 更新是针对列修改的

3. 如果想修改某行或者某几行的某一列,则必须加条件否则会把整个表得该列都更新成一样的

4. 在给定更新值也必须符合到表限制(比如字段类型,是否为空,是否唯一等等)

5.需要注意的是,在更新之后需要commit(提交)后才能永久的生效我们的操作。

语法

update tab

set col1='xxx'

[where col1='xxx'......];;

示例1

无条件更新整个列

(将所有人的奖金都加100。需要注意的是,由于奖金字段(comm)的类型是数字的,而且值为null,所以数字类型为null值默认不会更新,但是字符格式的不存在这种情况)

7184c9aa06df02ab66f5a1f139d87503.png

示例2

按照条件更新值

(将所有人奖金为空的人的奖金更新成为200。需要注意的是:更新数字格式字段值为null的情况,必须指定要更新字段值为null)

1cbc2049888fa1ad3148fc8d943c4ca8.png

2.2.2 update

高级用法

说明

1.更新还可以同时更新多个值,通过逗号隔开

2.还可以引用另一个表的查询结果来更新

多值更新

语法

update tab

set col1='xxx',col2='xxxx'

[where col1='xxx'......];

示例

同时更新mgr和sal值

e6fc19a707f2f9fe7739eaa1dd075e9b.png

引用查询结果

语法

update tab1

set col1=(select col1 from tab2 where tab1.col=tab2.col)

[where col1='xxx'......];

示例

根据emp表中查询得到dept字段和mgr字段结果更新emp_new表中的deptno字段和mgr字段

c8a8db651095b5b8fc1076d5c7d3b9b4.png

2.2 delete语句使用

2.2.1

delete基本用法

说明

1. 如果想要在表中删除已存在数据的话,则需要使用

delete关键字来删除我们不想要的数据

2. 删除数据可以不卡条件直接删除表中所有的数据

3. 也可以卡条件字段来删除特定的数据

4.需要注意的是,在删除之后需要commit(提交)后才能永久的生效我们的操作。

5.特别要强调的是,要在删除前把delete改成select 执行下,确保查询到的结果就是要删除的正确数据,防止误删除事件发生

语法

delete from tab [where col1='xxx'......];

示例

按条件删除

删除部门编号为null的数据

829eb59c9026b12661eb358731752a66.png

删除表中全部数据

ee3a6eb004806c61ceaf95a5ed36bde6.png

今天想表达的关于技术的东西都写完了,说些题外话,这是我写的第一遍博客,就挑选了入门的基础知识来帮助入门oracle的朋友们供一个思路算是抛砖引玉吧。我个人能力有限,写的东西水平业有限,不足之处还望大家提出来,在日后的博客中改进,然后希望日后能跟大家多多交流共同学习进步。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值