热门标签 | HotTags
当前位置:  开发笔记 > 数据库 > 正文

高级查询

子查询,在一个SQL语句中嵌套另一个SQL语句称为子查询需求:查询商品类别为“图书”的所有商品的id、商品名称、商品价selectid,name,pricefromes_productwheresort_id(selectidfromes_sortwheresortname‘图书’)子查询的结果可能不是一行

子查询,在一个SQL语句中嵌套另一个SQL语句称为子查询 需求:查询商品类别为“图书”的所有商品的id、商品名称、商品价 select id,name,price from es_product where sort_id = (select idfrom es_sort where sortname = ‘图书’) 子查询的结果可能不是一行

子查询,在一个SQL语句中嵌套另一个SQL语句称为子查询

需求:查询商品类别为“图书”的所有商品的id、商品名称、商品价格

select id,name,price from es_product where sort_id = (select idfrom es_sort where sortname = ‘图书’)

子查询的结果可能不是一行,可能返回多行查询结果的子查询,这样情况就不能使用=、<、>、<=等那些运算符了。

ROWNUM是oracle数据库从数据文件或缓冲区中读取数据的顺序。简单的说,ROWNUM是对符合条件结果的序列号,即先查到结果集之后再加上去的一个列。他总是从1开始的。物理上并不真正存在。

示例:查询商品表中前五条商品记录的id、商品名称、以及上架日期

select id,name,saledate from es_product where rownum <=5;

示例:查询商品列表中最新上架的前五条商品的id、商品名称以及上架日期

select id, name, saledate  from (select * from es_product order by saledate DESC) where rownum <= 5

分页查询

需求:分页显示商品id、商品名称、上架时间、每页显示四条,请编写查询第二页商品信息的sql语句

--将rownum固化

select id,name,saledate,rownum rn from es_product

--通过限制rn的范围取记录

select id,name,saledate from(select id,name,saledate,rownum rn from es_product)
wherern>=5 and rn<=8

按日期降序,分页显示商品id、商品名称、上架时间、每页显示4条

请编写查询第二页商品信息的sql语句

select id,name,saledate from (select id,name,saledate,rownum rn from(select * fromes_product order by saledate DESC))
where rn>=5 and rn <=8

链接查询

需求:查询商品类别为“图书”的所有商品的id、商品名称、商品价&#26684;、商品所属分类名称

select es_product.id,name,price,sortname from es_product,es_sort
wherees_product.sort_id = es_sort.id and es_sort,sortname = ‘图书’;

查询字段中id前面添加了es_product.是因为:当被连接的多个表中存在同名字段时,则必须在该字段前面加上“表名.”做为前缀

子查询和链接查询区别:子查询并不要求两个表有相关字段,只要得到的子查询的结果集用于父查询。而连接查询。则必须要求两个表有相关字段。当查询的列来自多个表时,可以使用表连接查。

表连接语法:select要查询的字段 from表1,表2……where链接条件

非等&#20540;连接案例:查询所有单价介于20-35元之间的商品名称、价&#26684;、库存量以及商品类别名称。

需求:查询所有用户的用户姓名、电话(此处为订单表中的收货人电话)、订单号、订购日期以及订单状态

select a.realname,b.tel,b.id,b.createtime,b.status from es_user a,es_order b
whereb.user_id = a.id

当某些不满足条件的列也需要显示出来。也就是说,只限制其中一个表的行,而不限制另外一个表的行时需要使用外连接。Oracle中使用&#43;表示外连接,或者使用LEFT OUTER JOIN(左连接)RIGHT OUTER JOIN(右外连接) FULL OUTER JOIN(全外连接)

需求:查询所有用户的用户姓名、电话(此处为订单表中的收货人电话)、订单号、订购日期以及订单状态。可以进行如下修改 :

select a.realname,b.tel,b.id,createtime,status
fromes_user a,left out join es_order b
on a.id =b.user_id

左外连接的语法:

select 多表查询的列

from 左表 left [outer] join 右表

on 多表连接的条件

写法二:

select a.realname,b.tel,b.id,createtime,status
from es_user a,es_order b
where a.id = b.user_id(+)

将加号写在右边表示以左边为准,右边补齐。

集合查询:将多个查询组合到一个查询中去

对于Oracle,交集就是返回两个查询共有的记录,关键字是INTERSECT;并集是返回各个查询的所有记录,关键字是UNION或者UNION ALL;补集是返回第一个查询记录检索出的记录减去第二个查询检索出的记录之后剩余的记录,关键字是MINUS。

UNION和UNION ALL区别:UNION和UNION ALL都可以用在结果查询的“并集”操作,不过UNION ALL比UNION效率高,因为UNION查询出的内容剔除重复行,同时默认按第一个查询的第一列升序排序。而UNION ALL不做这些。

注意:分组以后筛选使用HAVING关键字,而不能使用WHERE。

示例1:获取一次订单满200元或者累计满500元的用户

select user_id from es_order where totalamount>200 UNION select user_id fromes_order group by user_id HAVING sum(totalamount) >500

示例2:获取一次订单满200并且订单累计满500元的用户

select user_id from es_order where totalamount>200 INTERSECT select user_id fromes_order group by user_id HAVING sum(totalamount) >500

示例3:获取没有订购过商品ID

select id from es_product MINUS selectprod_id from es_ordertail


推荐阅读
  • 本文将深入探讨如何使用 SQLAlchemy 在数据库模型中定义和操作不同类型的表间关系,包括一对一、一对多及多对多的关系。 ... [详细]
  • 探讨HTML中的DIV样式难题
    本文深入分析了HTML中常见的DIV样式问题,并提供了有效的解决策略。适合所有对Web前端开发感兴趣的读者。 ... [详细]
  • iTOP4412开发板QtE5.7源码编译指南
    本文详细介绍了如何在iTOP4412开发板上编译QtE5.7源码,包括所需文件的位置、编译器设置、触摸库编译以及QtE5.7的完整编译流程。 ... [详细]
  • 本文介绍了Java语言开发的远程教学系统,包括源代码、MySQL数据库配置以及相关文档,适用于计算机专业的毕业设计。系统支持远程调试,采用B/S架构,适合现代教育需求。 ... [详细]
  • MySQL学习指南:从基础到高级
    本文档提供了MySQL的全面学习指南,涵盖从数据库的基本概念到高级特性的详细解析,包括SQL基础命令、数据完整性约束、查询技术、内置函数、存储过程、视图管理、事务处理和索引优化等内容。 ... [详细]
  • 深入理解SQL Server中的聚集与非聚集索引
    本文探讨了SQL Server数据库中两种主要的索引类型——聚集索引和非聚集索引,通过对比分析它们的特点及应用场景,旨在帮助读者更好地理解和利用这两种索引以优化查询性能。 ... [详细]
  • 虽然SQL因其直观易学的语法受到广泛欢迎,但转向Pandas进行数据处理时,初学者可能会感到不适应。本文旨在通过一系列实例,展示如何在Pandas中实现类似SQL的数据查询功能。 ... [详细]
  • 本文探讨了如何利用 Hibernate 进行高效的批量更新和删除操作,包括直接使用 Hibernate API 的方法及其局限性,以及如何通过 JDBC 或存储过程实现更优的性能。 ... [详细]
  • 本文总结了MySQL的一些实用技巧,包括查询版本、修改字段属性、添加自动增长字段、备份与恢复数据库等操作,并提供了一些常见的SQL语句示例。 ... [详细]
  • 作为一名Java Web开发新手,我在尝试将项目部署至Tomcat服务器并连接MySQL数据库时遇到了驱动加载失败的问题。经过一番排查和努力,最终找到了解决方案。 ... [详细]
  • sqlserver动态分区方案例子
    sqlserver动态分区方案例子当我们存储的数据量比较大时,比如超过千万,上亿级别时单纯的使用索引可能效果不明显了,此时我们可以考虑采 ... [详细]
  • 本文探讨了随着并发需求的增长,MySQL数据库架构如何从简单的单一实例发展到复杂的分布式系统,以及每一步演进背后的原理和技术解决方案。 ... [详细]
  • 深入理解Java MySQL数据库连接池实现
    尽管利用Apache Commons DBCP等工具可以轻松构建数据库连接池,但本文详细解析了数据库连接池的工作机制,提供了详尽的注释,帮助开发者深入理解其内部运作。这不仅有助于提高数据库操作的效率,还能增强应用程序的稳定性和性能。 ... [详细]
  • 本文探讨了在H2内存数据库中使用to_char函数遇到的问题,包括别名创建失败和堆栈内存溢出的情况,并提供了解决方案。 ... [详细]
  • 本文深入探讨网页游戏的开发流程,涵盖从程序框架设计到具体实现的技术细节,旨在为开发者提供全面的指导。 ... [详细]
author-avatar
渐我素小黑陈琼敏
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有