码迷,mamicode.com
首页 > 数据库 > 详细

数据库(二):高级检索

时间:2016-04-22 20:19:58      阅读:298      评论:0      收藏:0      [点我收藏+]

标签:

1.使用数据库中的函数

数据库中存在很多数据处理函数可以使用,使用数据库中自带的函数可以简化操作,但是也可能带来兼容性问题,因为不同的数据库管理系统有不同的数据处理函数,需要注意。

1.1 常见的文本处理函数:

函数 说明
LEFT() 返回字符串左边的字符
LENGTH() 返回字符串的长度
LOWER() 将字符串转换为小写
RIGHT() 返回字符串右边的字符
UPPER() 将字符串转换为大写

技术分享

1.2 常见数值处理函数:

函数 说明
ABS() 返回一个数的绝对值
COS() 余弦
EXP() 一个数的指数值
SIN() 正弦
SQRT() 平方根

1.3 常见的聚集函数

函数 说明
AVG() 返回某列的平均值
COUNT() 返回某列的行数
MAX() 返回某列的最大值
MIN() 返回某列的最小值
SUM() 返回某列之和

技术分享

在使用AVG()时,同样可以结合where语句进行过滤处理。


2. 分组数据

2.1 数据分组

在使用一些聚合函数时,例如AVG一般只能计算整个列的平均值或者满足某种条件(where子句)下的平均值,如果我们现在想得到不同条件下(上个例子中不同的vend_id下的平均值)同时统计处理,就需要用到数据分组。

分组SELECT语句的GROUP BY子句建立的

使用分组的一个例子:

技术分享

这个例子中,通过不同的vend_id进行聚合处理(求平均值)

关于使用GROUP BY的一些规定:

  • GROUP BY 子句必须出现在WHERE子句之后,ORDER BY子句之前
  • 如果分组列中有NULL的列,这一列也会被作为一个分组返回

2.2 分组数据的过滤

提到过滤,首先想到的是使用WHERE子句,但是在分组数据中使用WHERE达不到想要的结果,WHERE没有分组的概念。分组过滤使用新的子句HAVING对分组进行过滤。

  • HAVINGWHERE语法是相同的,唯一不同的是关键字的不同。WHERE针对的是过滤行,HAVING 针对的是分组。
  • WHERE在数据分组之前进行过滤,HAVING是在数据分组后进行过滤

技术分享

在这个例子中,在进行分组前,先利用WHERE子句进行过滤,然后根据要求分组,最后在分组后的结果中进行HAVING过滤。

2.3 select子句顺序

SELECT > FROM > WHERE > GROUP BY > HAVING > ORDER BY

3. 联结表

3.1 关系表

在数据库系统中,相同的数据在数据库中出现多次不是一件让人满意的事情,这是关系数据库的基础, 关系表的设计就是要把信息分解成多个表,一类数据一个表,各表通过某些共同的值相互关联。

表与表之间的关联是通过外键联系在一起的,例如A表中有一列是B表中的主键,这样一列可以作为A表的外键,通过此外键A表和B表进行连接。

主键与外键:

技术分享

3.2 联结

SQL中有多种联结方式:内联结、外联结、交叉联结

3.2.1 内联结

内连接
内连接查询操作列出与连接条件匹配的数据行,它使用比较运算符比较被连接列的列值。

直接通过例子来说明:

技术分享

技术分享

VendorsProducts是数据库中的两个表,这两个表通过vend_id这一列联结起来,vend_id为Vendors中的主键,同时是Products中的一个外键,最终得到的检索结果分别存在两个表中。

3.2.2 外联结

外联结分为:左外联结、右外联结、全联结

左外联结

  • 以左表为基准,将Vendors.vend_id = Products.vend_id的数据进行连接,然后将左表没有的对应项显示,右表的列为NULL

右外联结

  • 以右表为基准,将Vendors.vend_id = Products.vend_id的数据进行连接,然以将右表没有的对应项显示,左表的列为NULL

全联结

  • 完整外部联接返回左表和右表中的所有行。当某行在另一个表中没有匹配行时,则另一个表的选择列表列包含空值。如果表之间有匹配行,则整个结果集行包含基表的数据值。

3.2.3 交叉联结

技术分享

这里返回的数据是相应的笛卡尔积,左表中的每一行与右表中的所有行组合

数据库(二):高级检索

标签:

原文地址:http://blog.csdn.net/sweetgum2012/article/details/51201645

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!