数据库与数据仓库的区别
数据仓库(DataWareHouse,DW或DWH):是一种面向主题,集成的,稳定的,反映历史变化的数据集合,用于支持管理决策.面向主题:数据仓库中的数据按照一定的主题域进行组织.集成:原有分散的数据库数据经过系统加工,消除源数据中的不一致性相对稳定:指一旦某个数据进入数据仓库后只需定期的加载和更新反映历史变化:指通过信息,对企业未来趋势定量做出分析预测.
数据仓库与数据库区别:1.数据库是面向事务的,而数据仓库是面向主题设计的2.数据库中存储的一般为实时数据,而数据仓库一般为历史数据3.数据库设计尽量避免冗余,而数据仓库是有意引入冗余4.数据库是为了存储数据设计的,而数据仓库是为了分析数据引入的.
检索单个列
select name from user
检索多个列
select id,name,age,sex from user
检索所有列
select * from user
使用通配符 一般除非你确实需要表中的每个列,否则最好别使用*通配符
检索不同的行 DISTINCT
select distinct classid from user
类似于group by 分组
例如: select distinct a,b,c from tableA;
等同于 select a,b,c from tableA group by a,b,c
限制结果 LIMIT
select * from user limit 3,4
LIMIT 3, 4的含义是从行3开始的4行.(跳过前3行,取4行)
使用完全限定的表名
select name from user
select user.name from user
select user.name from itxdl.user
排序数据 ORDER BY
select * from user order by age
默认升序asc,降序desc
按多个列排序
select * from user order by classid,age
在需要对多列数据进行排序时,使用逗号分隔列名,并会按照前后顺序依次对比排序
过 滤 数 据 WHERE
在SELECT语句中,数据根据WHERE子句中指定的搜索条件进行过滤。
select name from user where age = 22
在同时使用ORDER BY和WHERE子句时,应该让ORDER BY位于WHERE之后,否则将会产生错误
WHERE子句操作符
操作符 | 说明 |
---|---|
= | 等于 |
<> != | 不等于 |
< | 小于 |
<= | 小于等于 |
> | 大于 |
>= | 大于等于 |
BETWEEN | 指定两个值之间 |
IS NULL | 空值 |
AND与OR
SQL在处理OR操作符前,优先处理AND操作符。
select name from user where (classid=18 or classid =19) and sex='m'
因为圆括号具有较AND或OR操作符高的计算次序,数据库首先过滤圆括号内的OR条件。
IN与NOT
select name from user where classid in (18,19)
IN WHERE子句中用来指定要匹配值的清单的关键字,功能与OR相当
select user from user where classid not in (18,19)
在与IN操作符联合使用时,NOT使找出与条件列表不匹配的行非常简单。
LIKE与通配符
- 百分号(%)通配符 在搜索串中,%表示任何字符出现任意次数
select name from user where name like 'a%'
- 下划线(_)通配符 下划线的用途与%一样,但下划线只匹配单个字符而不是多个字符
了解下MySQL的正则 REGEXP
1 | > 所有种类的程序设计语言、文本编辑器、操作系统等都支持正则表达式 |
拼接 Concat
解决办法是把两个列拼接起来。在MySQL的SELECT语句中,可使用Concat()函数来拼接两个列
select concat(vend_name,'(',vend_country')') from vendors order by vend_name
起别名:
select concat(vend_name,'(',vend_country')') as vend_title from vendors order by vend_name
函数的使用
文本处理函数
1 | | 函数 | 说明 | |
日期和时间处理函数
1 | | 函数 | 说明 | |
数值处理函数
1 | | 函 数 | 说 明 | |
聚集函数的使用
函数 | 说明 |
---|---|
AVG() | 返回某列的平均值 |
COUNT() | 返回某列的行数 |
MAX() | 返回某列的最大值 |
MIN() | 返回某列的最小值 |
SUM() | 返回某列值之和 |
注意
在使用count时,如果指定列名,则指定列的值为空的行被忽略,但如果COUNT()函数中用的是星号(*),则不忽略
数据分组 GROUP BY与HAVING
- GROUP BY
select vend_id,count(*) as num_prods from products group by vend_id
- HAVING
select cust_id,count(*) as orders from orders group by cust_id having count(*) >= 2;
总结SELECT子句及其顺序
子句 | 说明 | 是否必须 |
---|---|---|
SELECT | 要返回的列或表达式 | 是 |
FROM | 从中检索数据的表 | 仅在从表选择数据时使用 |
WHERE | 行级过滤 | 否 |
GROUP BY | 分组说明 | 仅在按组计算聚集时使用 |
HAVING | 组级过滤 | 否 |
ORDER BY | 输出排序顺序 | 否 |
LIMIT | 要检索的行数 | 否 |