关于oracle查询语句的格式(基本查询、连接查询、子查询、集合运算查询、分析函数查询、伪列、视图)

SQL语句执行顺序:

from 表→where条件→group by →having →select→order by

故,列的别名也不能在group by 和 having 中使用的

1.基本查询

  1. select  * from  user_tables;  --查询用户的所有表
  2. select * from user_constraints where  constraint_name='约束名'       --查看约束
  3. select * from user_triggers;   --查看触发器
  4. desc 表名;  --查看表结构
  5. select sysdate,systimestamp(取一) from dual;--查询日期

dual 表在系统中只有一行一列,该表在输出单行函数时为了 select...from 的语法完整性而使用。(伪表为了保证查询语句的完整性)

  1. select distinct 字段 from 表名    --查询去掉重复的记录
  2. select 字段 from 表名 order by 字段 asc/desc  --排序
  3. select 字段 from 表名 group by 分组字段 having 条件(聚合函数条件) --分组

注:having在数据分组之后进行过滤,必须使用聚合函数进行筛选。where是对记录进行筛选的,不能使用函数进行筛选。

  1. limit n 表示从0行开始取n条数据
  2. limit m,n 表示从m+1条开始,取n条

例如:select * from emp where group by order by limit 2,4;

--表示的是从第三条开始,取4条数据即取出三至第六条信息

where条件关键字

条件

说明

between  x  and y

判断出从x到y之间的记录

not between x and y

判断出不在从x到y之间的记录

in(值,值)

检索出满足in中任何值

not in(值,值)

检索不在条件范围内的值记录

字段 like ''

模糊查询,%匹配任意长度字符,_占位符

like ‘%30\%%’escape`\`

转义百分号

字段 is null

显示此字段为空的记录

字段 is not null

显示此字段不为空的记录

2.连接查询

连接查询

连接

语句

注解

内连接

select * from 表1,表2 where 表1.字段=表2.字段;

显示满足条件并且两个表中字段相等的数据

select * from 表1inner join表2 on 表1.字段 = 表2.字段

左连接

select * from  表1 left join 表2 on 表1.字段=表2.字段

以左边的表做为主表,显示全部主表,如主表在右表中没有匹配行,则右表中列以空补全

select * from  表1,表2 where 表1.字段= 表2.字段(+)

右连接

right join

右连接则与左连接相反

全连接

select * from 表1 full join 表2 on 表1.字段=表2.字段

返回左表和右表中的所有行。当某行在另一表中没有匹配行,则另一表中的列返回空值

交叉连接
/迪卡尔积

select * from 表1 cross join 表2

不带where子句,返回结果行数等于两个表行数的乘积,一般用于测试,避免迪卡尔积的出现

select * from 表1,表2

全局注

内连接只显示等值匹配到的数据,全连接中未匹配到以null补全,(+)在的侧为从表,对侧为主表,主表信息全部显示,从表的信息未匹配到以null补全,主表无论匹配到匹配不到都全部显示。

3.子查询

子查询

语句

注解

select * from 表名 where 字段=(子查询)

返回单个子查询

select * from 表1 where 表1.字段 in(子查询)

多行子查询等值匹配,外部查询多,内部查询少时,效率高

select * from 表名 where 字段1>any(子查询)

显示全部大于子查询结果中最小的值还大的值

select * from 表名 where 字段1<any(子查询)

显示全部比子查询结果中最大的值还小的值。出现任意一个的时候用any

select * from 表名 where 字段1>all(子查询)

显示全部比子查询结果中最大值还大的值

select * from 表名 where 字段1<all(子查询)

显示全部比子查询结果中最小值还小的值

select * from 表 where  exists(子查询)

查询是否存在,外部查询少,内部查询多时,效率高

not exists(子查询)

显示不满足子查询的数据。not exists 走索引,not in 不走索引

4.集合运算查询

集合运算查询

集合运算

语句

注解

并集

查询语句1 union 查询语句2

显示表1+表2 的全部内容,删除重复行,相同的行在结果中只显示一次

多并集

查询语句1 union all 查询语句2

显示两个表的全部结果集,显示表1+表2 的全部内容,不删除重复,结果为多集,相同的数据会出现多次

交集

查询语句1 intersect 查询语句2

查询表1和表2共有的内容,并且共有内容只显示一次

差集

查询语句1  minus 查询语句2

表1查询m行,表2查询n行,表1和表2都有h行数据
数据显示m-h行,查询出表1剔除跟表2共有的数据之后表1查询内容,差集的显示跟查询的前后顺序有关

全局注

两个查询必须包含相同的列数,集合运算结果中列名由输入的查询1决定。两个表进行匹配,是对各自表的查询结果进行匹配,取值为空的列是相同的列

5.分析函数查询

  1. select 函数() over(partition by 字段 排序 )别名 from 表名

注:如果使用聚合函数则不能使用排序。

  1. row_number()        --按特定标准排序的行号不并列
  2. update .....where exists( ); 

--符合exists 条件进行操作,如果不符合则不操作

6.伪列

  1. rowid:返回物理地址,可显示行是如何存储的,可快速定位表中某一行的位置
  2. rownum表示查询某条记录在整个结果集中的位置
  3. select rownum,字段 from(子查询排序) 表别名 where rownum<=行数;                                             --查询显示表中的从第1行到第某行的数据

例如:select * from

(select rownum rn,别名1.* from

(select * from 表 order by 排序字段 desc) 别名1)

where rn=第某行        --查询单独的某一行

语句顺序:排序查询→rownum 别名 查询 →行数查询

:针对查询结果集的行号进行赋值  ,先进行排序,在取行数

  1. 伪列只能查询不能进行增删改操作

7.视图

  1. 视图就是有名字的查询语句通常用于复杂查询语句的保存以及方便调用
  2. create or replace  force/noforce view 视图名 as 查询语句 属性;           

--创建视图

  1. froce:基表不存在,也可以创建视图,但是只有当基表创建成功,视图才能正常使用。
  2. nofroce:如果基表不存在,无法创建视图,默认选项
  3. with read only:说明视图是只读视图,不能通过视图进行增删改操作。如果是默认则可以通过视图对基表执行增删改操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值