标签:
数据库中存在很多数据处理函数可以使用,使用数据库中自带的函数可以简化操作,但是也可能带来兼容性问题,因为不同的数据库管理系统有不同的数据处理函数,需要注意。
函数 | 说明 |
---|---|
LEFT() | 返回字符串左边的字符 |
LENGTH() | 返回字符串的长度 |
LOWER() | 将字符串转换为小写 |
RIGHT() | 返回字符串右边的字符 |
UPPER() | 将字符串转换为大写 |
函数 | 说明 |
---|---|
ABS() | 返回一个数的绝对值 |
COS() | 余弦 |
EXP() | 一个数的指数值 |
SIN() | 正弦 |
SQRT() | 平方根 |
函数 | 说明 |
---|---|
AVG() | 返回某列的平均值 |
COUNT() | 返回某列的行数 |
MAX() | 返回某列的最大值 |
MIN() | 返回某列的最小值 |
SUM() | 返回某列之和 |
在使用AVG()时,同样可以结合where语句进行过滤处理。
在使用一些聚合函数时,例如AVG一般只能计算整个列的平均值或者满足某种条件(where子句)下的平均值,如果我们现在想得到不同条件下(上个例子中不同的vend_id下的平均值)同时统计处理,就需要用到数据分组。
分组是SELECT语句的GROUP BY子句建立的
使用分组的一个例子:
这个例子中,通过不同的vend_id进行聚合处理(求平均值)
关于使用GROUP BY的一些规定:
- GROUP BY 子句必须出现在WHERE子句之后,ORDER BY子句之前
- 如果分组列中有NULL的列,这一列也会被作为一个分组返回
提到过滤,首先想到的是使用WHERE子句,但是在分组数据中使用WHERE达不到想要的结果,WHERE没有分组的概念。分组过滤使用新的子句HAVING对分组进行过滤。
- HAVING 和 WHERE语法是相同的,唯一不同的是关键字的不同。WHERE针对的是过滤行,HAVING 针对的是分组。
- WHERE在数据分组之前进行过滤,HAVING是在数据分组后进行过滤
在这个例子中,在进行分组前,先利用WHERE子句进行过滤,然后根据要求分组,最后在分组后的结果中进行HAVING过滤。
SELECT > FROM > WHERE > GROUP BY > HAVING > ORDER BY
在数据库系统中,相同的数据在数据库中出现多次不是一件让人满意的事情,这是关系数据库的基础, 关系表的设计就是要把信息分解成多个表,一类数据一个表,各表通过某些共同的值相互关联。
表与表之间的关联是通过外键联系在一起的,例如A表中有一列是B表中的主键,这样一列可以作为A表的外键,通过此外键A表和B表进行连接。
主键与外键:
SQL中有多种联结方式:内联结、外联结、交叉联结
内连接
内连接查询操作列出与连接条件匹配的数据行,它使用比较运算符比较被连接列的列值。
直接通过例子来说明:
Vendors 和 Products是数据库中的两个表,这两个表通过vend_id这一列联结起来,vend_id为Vendors中的主键,同时是Products中的一个外键,最终得到的检索结果分别存在两个表中。
外联结分为:左外联结、右外联结、全联结
左外联结
- 以左表为基准,将Vendors.vend_id = Products.vend_id的数据进行连接,然后将左表没有的对应项显示,右表的列为NULL
右外联结
- 以右表为基准,将Vendors.vend_id = Products.vend_id的数据进行连接,然以将右表没有的对应项显示,左表的列为NULL
全联结
- 完整外部联接返回左表和右表中的所有行。当某行在另一个表中没有匹配行时,则另一个表的选择列表列包含空值。如果表之间有匹配行,则整个结果集行包含基表的数据值。
这里返回的数据是相应的笛卡尔积,左表中的每一行与右表中的所有行组合
标签:
原文地址:http://blog.csdn.net/sweetgum2012/article/details/51201645