语法
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子句:
- 用来从分组的结果中筛选行
常用的多表连接查询
-
内连接(INNER JOIN) 结果为两个连接表中的匹配行的连接
-
左外连接(LEFT JOIN) 结果包括左表(出现在JOIN子句左边)中的所有行,不包括右表中的不 匹配行。
-
右外连接(RIGHT JOIN) 结果包括右表(出现在JOIN子句右边)中的所有行,不包括有左表中的 不匹配的行。
语法:
SELECT 表1.列名,表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的数字: 当前页 * 页大小