利用SELECT检索数据

利用SELECT检索数据

工作一年多,由于一直使用的MongoDB,把在学校学的关系型数据库相关只是已经忘的差不多了,最近换了工作,使用的是Oracle,因此,趁着闲暇时间把以前的知识捡起来。之前学过,因此这里作为个人复习过程中的点滴记录,方便自己记忆。

GROUP BY 子句

GROUP BY 是统计数据时经常用的语句,使用该子句时,有以下几点需要注意:

  • 当查询中存在GROUP BY子句时,SELECT 列表中只能存在分组函数,或出现GRIUP BY 子句中的字段。
  • GROUP BY子句中不允许出现在WHERE 条件中,但允许出现其后,也就是可以和WHERE条件并列使用。

HAVING 子句

HAVING子句通常和GROUP BY子句一起使用,限制搜索条件。它和WHERE子句不一样,HAVING子句与组有关,而不是与单个的值有关。在GROUP BY子句中,它会作用于GROUP BY创建的组。
HAVING 的使用方式如下:
eg: 计算出不同类型产品的平均价格,并列出平均价格高于2000的数据,脚本如下:

SELECT category , AVG(productprice) 平均价格 FROM productinfo GROUP BY categpry HAVING AVG (productprice) > 2000;

子查询

如果子查询返回的值是多行值,那么需要用到IN关键字,此时IN的用法和前面介绍的方法一致。除此之外,也可以使用量化比较关键字SOME,ANY,ALL,这些需要配合<、 <=、 =、 > 、>= 使用.它们的含义如下:

  • ANY: 表示满足子查询结果的任何一个.和< , <=搭配,表示小于等于列表中的最大值; 而和> , >= 配合时表示大于等于列表中的最小值.
  • SOME: 可以认为和ANY 含义相同
  • ALL: 表示满足子查询结果的所有结果.和 <, <= 搭配,表示小于等于列表中的最小值;而和 > , >= 配合时,表示大于等于列表中的最大值.

IN示例:
查询产品表中产品类型为"电视"和"MP3"的数据.脚本如下:
SELECT productname,productprice FROM productinfo WHERE CATEGORY IN (SELECT caregory FROM catrgoryinfo WHERE categoryname = '电视' OR categoryname = 'MP3');

ANY示例:
从产品表PRODUCTINFO中查询出价格低于指定价格列表中的最大值.指定的价格列表就是指产品类型为"0100030002"的所有产品价格.脚本如下:
SELECT productname,productprice FROM productinfo WHERE productprice < ANY (SELECT productprice FROM productinfo WHERE category = '0100030002') AND category <> '0100030002';

SOME 示例:
SELECT productname,productprice FROM productinfo WHERE productprice = SOME (SELECT productprice FROM productinfo WHERE category = '0100030002') AND category <> '0100030002';
SOME用法和ANY用法一样,只不过ANY多用在非"="环境中.SOME这里表示找出和子查询中任何价格相等的产品.

连接查询

连接分为内连接、外连接、和全连接,还有一种叫做自连接,其中最常用的是内连接和外连接。

内连接

内连接会把两个以上的表进行连接,只能查询出匹配的记录.内连接中最常用的就是等值连接和不等只连接.

分为两种写法如下所示:

SELECT p.productname,p.productprice,c.categoryname FROM productinfo p , categoryinfo c WHERE p.category = c.categoryid;
或者:
SELECT p.productname,p.productprice,c.categoryname FROM productinfo p INNER JOIN categoryinfo c ON p.category = c.categoryid;

内连接中的关键字"INNER JOIN" 可以直接写成"JOIN",系统会把"JOIN"识别成内连接.但是"ON"关键字不能省略。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值