Oracle高级查询

语法

SELECT [] 分组函数(列名),... 
FROM table 
[WHERE 条件] 
[GROUP BY 分组字段] 
[HAVING 多行函数筛选]
[ORDER BY 排序字段]; 

实例:
SELECT
STUCLASSID AS 年级,
COUNT( 1 ) AS 人数 
FROM 
STUS
GROUP BY 
STUCLASSID
ORDER BY
STUCLASSID;

在oracle中在select列中还能包含被分组的列和聚合函数

WHERE与HAVING对比
■WHERE子句:

  • 用来筛选FROM子句中指定的操作所产生的行

■GROUP BY子句:

  • 用来分组WHERE子句的输出

■HAVING子句:

  • 用来从分组的结果中筛选行

常用的多表连接查询

  1. 内连接(INNER JOIN) 结果为两个连接表中的匹配行的连接

  2. 左外连接(LEFT JOIN) 结果包括左表(出现在JOIN子句左边)中的所有行,不包括右表中的不 匹配行。

  3. 右外连接(RIGHT JOIN) 结果包括右表(出现在JOIN子句右边)中的所有行,不包括有左表中的 不匹配的行。

语法: 
SELECT1.列名,2.列名
FROM 表名1 
INNER JOIN 表名2 ON 连接条件
INNER JOIN 表名3 ON 连接条件
WHERE 条件;

子查询(嵌套查询)
所谓子查询,即一个select语句中嵌套了另外的一个或者多个select语句, 在查询是基于未知的值时应使用子查询,子查询 在主查询执行之前执行。
子查询类型:单行子查询, 多行子查询

语法:
SELECT select_list
FROM 表名
WHERE 条件 (SELECT select_list FROM FROM 表名); 
示例:
SELECT * FROM cj WHERE
stuid = ( SELECT stuid FROM xs WHERE stuname = '姓名' );

注意事项

  • 子查询要包含在括号内。

  • 将子查询放在比较条件的右侧 。

  • 除非进行Top-N (获取某一数据集合中的前N条记录)分析,否则不 要在子查询 中使用ORDER BY 子句。

  • 单行操作符对应单行子查询,多行操作符对应多行子查询。

having 子查询、in子查询、any子查询、all子查询.
IN操作符:用于指定一个子查询的判断范围
ANY操作符:与每一个内容相匹配,有三种匹配形式
ALL操作符:与每一个内容相匹配,有两种匹配形式

select * from student where age in (10,15,20);
select * from student where age= any(10,15 20);--跟上一条SQL结果相同
select * from student where age>any (10,15,20);--比最小(10)要大的数据 == >10

select * from student where age <all(10,15,20);--比最小的(10)还要小的数据等同于 <10
select * from student where age >all(10,15,20);--比最大的(20)还要大的数据 等同于>20

exists存在子查询
–如果有数据(true)继续父语句查询
–如果没有数据(false)终止父查询

select * from d where exists(select * from d where stuname='张三');

关联修改:
使用子查询,依据A表中的数据,修改b的数据

update result set chengj=60 where subno=
(select subno from subject where subname='语文');

关联删除:
使用子查询,依据A表中的数据,删除b的数据

select subno from subject where subname='语文';
delete from result where subno=();

伪列

  • Oracle中伪列就像一个表列,但是它并没有存储在表中 ROWID是表中行的存储地址,该地址可以唯一 地标识数据库中的一 行
    可以使用ROWID伪列快速地定位表中的一行
  • ROWID格式
AAAR3s 	           AAE  	AAAACX 	  AAA
数据对象编号      文件编号	块编号	 行编号
select s.*,rownum from student s

Oracle分页查询

select * from (select rownum rn,s.* from student s)
where rn>=1 and rn<=5;--每页5条,第一页

第一个rownum的数字: (当前页-1)* 页大小+ 1
第二个rownum的数字:  当前页 * 页大小
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值