48.Oracle数据库SQL开发之 子查询——编写单行子查询
来源:互联网 发布:网络嗅探器用哪个好 编辑:程序博客网 时间:2024/05/19 11:49
48.Oracle数据库SQL开发之 子查询——编写单行子查询
欢迎转载,转载请标明出处:http://blog.csdn.net/notbaron/article/details/49805691
单行子查询不向外部的SQL语句返回结果,或者只返回一行。
1. 在WHERE子句中使用子查询
子查询可以放在另一个查询的WHERE子句中,执行如下:
store@PDB1> select first_name,last_name fromcustomers where customer_id=(select customer_id from customers wherelast_name='Brown');
FIRST_NAME LAST_NAME
---------- ----------
John Brown
2. 使用其他单行操作符
在单行子查询中个,可以使用其他比较操作符,例如<>,<,>,<=,>= 。
store@PDB1>select product_id,name,price from products where price > (select avg(price)from products);
PRODUCT_ID NAME PRICE
---------- ----------------------------------------
1 Modern Science 19.95
2 Chemistry 30
3 Supernova 25.99
5 Z Files 49.99
3. 在HAVING子句中使用子查询
HAVING子句的作用是对行组进行过滤。外部查询的HAVING子句也可以使用子查询。
执行如下,检索那些平均价格低于同类产品组平均价格最大值的产品的PRODUCT_TYPE_ID和平均价格:
store@PDB1> select product_type_id,avg(price) fromproducts group by product_type_id having avg(price)<(select max(avg(price))from products group by product_type_id) order by product_type_id;
PRODUCT_TYPE_ID AVG(PRICE)
--------------- ----------
1 24.975
3 13.24
4 13.99
13.49
4. 在FROM子句中使用查询(内联视图)
在外部查询的FROM子句中也可以使用子查询,这种子查询称为内联视图(inline view)
store@PDB1>select product_id from (select product_id from products where product_id <3);
PRODUCT_ID
----------
1
2
如下,在外部查询中从products表中检索product_id和price列,在子查询中检索一种产品已经被购买的次数:
store@PDB1> selectprds.product_id,price,purchases_data.product_count from products prds,(selectproduct_id,count(product_id) product_count from purchases group by product_id)purchases_data where prds.product_id = purchases_data.product_id;
PRODUCT_ID PRICEPRODUCT_COUNT
---------- ---------- -------------
1 19.95 4
2 30 4
3 25.99 1
子查询从purchases表中检索出product_id和COUNT(product_id),并将其返回给外部的查询。
5. 可能碰到的错误
5.1 单行子查询最多返回一行
如果子查询返回多行,就会出现错误。
store@PDB1> select product_id,name from productswhere product_id = (select product_id from products where name like '%e%');
select product_id,name from products whereproduct_id = (select product_id from products where name like '%e%')
*
ERROR at line 1:
ORA-01427: single-row subquery returns morethan one row
5.2 子查询不能包含ORDER BY 子句
子查询不能包含ORDER BY 子句。相反,任何排序都必须在外部查询中完成。例如:
store@PDB1>select product_id,name,price from products where price >(select avg(price)from products) order by product_id desc;
PRODUCT_ID NAME PRICE
---------------------------------------- ----------
5 Z Files 49.99
3 Supernova 25.99
2 Chemistry 30
1 Modern Science 19.95
- 48.Oracle数据库SQL开发之 子查询——编写单行子查询
- 51.Oracle数据库SQL开发之 子查询——编写关联子查询
- 52.Oracle数据库SQL开发之 子查询——编写嵌套子查询
- 49.Oracle数据库SQL开发之 子查询——编写多行子查询
- 50.Oracle数据库SQL开发之 子查询——编写多列子查询
- 53.Oracle数据库SQL开发之 子查询——编写包含子查询的UPDATE和DELETE
- 47.Oracle数据库SQL开发之 子查询——子查询的类型
- oracle 单行子查询
- Oracle数据库之SQL子查询详解
- Oracle数据库之SQL语句子查询
- Oracle数据库之SQL子查询详解
- oracle 之 sql 子查询
- Oracle之SQL子查询
- Oracle之SQL子查询
- Oracle-27-集合操作(交集、并集、差集)&子查询之单行子查询
- Oracle SQL子查询
- 精通数据库SQL——子查询
- ORACLE数据库---子查询
- 提交中的骂声:哪种编程语言最遭骂?
- 《动态规划》hdoj acm 3.2.4 最长有序子序列
- java中对类之间的继承和可调用性的摸索
- define后面的\表示什么?
- kiz挖矿赚钱是真的吗?kiz挖矿赚钱注册地址是多少?
- 48.Oracle数据库SQL开发之 子查询——编写单行子查询
- Swift 类的初始化和反初始化
- poj 2250 Compromise(LCS)
- 49.Oracle数据库SQL开发之 子查询——编写多行子查询
- 50.Oracle数据库SQL开发之 子查询——编写多列子查询
- AndroidStudio使用gradle打包并实现多渠道打包
- Codeforces 595B Pasha and Phone 【数学计数】
- Reverse Nodes in k-Group
- 51.Oracle数据库SQL开发之 子查询——编写关联子查询