本篇文章继续围绕SQL的语法重点为大家介绍 连接 和 高级连接 的使用,以及 使用连接的注意事项 。
SQL最强大的功能之一就是能在数据查询的执行中 连接(join)表 。连接是利用SQL的SELECT语句能执行的最重要的 *** 作,很好地理解连接及其语法是学习SQL的极为重要的一点。在能够有效地使用连接前,我们必须了解 关系表 以及 关系数据库 设计的一些基础知识。下面的介绍并不能涵盖这一主题的所有内容,但作为入门已经够了。
连接
理解关系表,最好是来看个例子。
有一个包含产品目录的数据库表,其中每类物品占一行。
对于每一种物品,要存储的信息包括产品描述、价格,以及生产该产品的供应商。
现在有同一供应商生产的多种物品,那么在何处存储供应商名、地址、联系方法等供应商信息呢?将这些数据与产品信息分开存储的理由是:
① 同一供应商生产的每个产品,其供应商信息都是相同的,对每个产品重复此信息既浪费时间又浪费存储空间;
② 如果供应商信息发生变化,例如供应商迁址或电话号码变动,只需修改一次即可;
③ 如果有重复数据(即每种产品都存储供应商信息),则很难保证每次输入该数据的方式都相同。不一致的数据在报表中就很难利用。
关键是, 相同的数据出现多次不是一件好事 ,这是关系数据库设计的基础。
关系表的设计就是要 把信息分解成多个表 , 一类数据一个表 。各表通过某些共同的值互相关联(所以才叫关系数据库)。在这个例子中可建立两个表:一个存储供应商信息,另一个存储产品信息。Vendors表包含所有供应商信息,每个供应商占一行,具有唯一的标识。此标识称为 主键 (primary key),可以是供应商ID或任何其他唯一值。Products表只存储产品信息,除了存储供应商ID(Vendors表的主键)外,它不存储其他有关供应商的信息。Vendors表的主键将Vendors表与Products表关联,利用供应商ID能从Vendors表中找出相应供应商的详细信息。
这样做的 好处 是:
① 供应商信息不重复,不会浪费时间和空间;
② 如果供应商信息变动,可以只更新Vendors表中的单个记录,相关表中的数据不用改动;
③ 由于数据不重复,使得处理数据和生成报表更简单。
总之,关系数据可以有效地存储,方便地处理。因此,关系数据库的可伸缩性远比非关系数据库要好。
为什么使用连接
连接将数据分解为多个表实现 更有效 地存储、 更方便 地处理,且 可伸缩性更好 。
可伸缩性:能够适应不断增加的工作量而不失败。
连接作为一种机制,能在一条SELECT语句中用来关联表。使用特定的语法,可连接多个表返回一组输出。
创建连接
分析 :上述SELECT语句中与之前的语句相同,都是指定检索的列, 区别 在于该语句指定的两列(prod_name,prod_price)在一个表中,而第一列(vend_name)在另一个表中。
FROM子句也有所区别。该FROM子句列出了两个表:Vendors,Products。这两个表由SELECT语句的WHERE子句连接。WHERE子句指示DBMS将Vendors表中的vend_id与Products表中的vend_id匹配起来。
这里使用了 完全限定列名 将Vendorsvend_id和Productsvend_id两列匹配。最终输出了两个不同表中的数据。
高级连接部分将介绍 如何使用表别名,另外的一些连接 ,以及 如何对被连接的表使用聚集函数 。
使用表别名
之前的文章已经给大家介绍了如何使用别名引用被检索的表列。
SQL还可以 给表名起别名 ,目的是:
① 缩短SQL语句。
② 允许在一条SELECT语句中多次使用相同的表。
分析 :上述语句中的FROM子句的三个表都有别名。如此 省略了许多字符 。表别名还可以用于SELECT的列表、ORDER BY子句以及其他语句部分。
需要注意的是: 表别名只在查询执行中使用 。与列别名不同,表别名不返回到客户端。
使用不同类型的连接
接下来将给大家介绍四种其他类型的连接: 自连接 、 自然连接 、 内连接 和 外连接 。
①自连接
分析: 这是使用了 子查询 的方案。对内部的SELECT语句做了一个简单的检索,返回Jim Jones工作公司的cust_name。该数据用于外部查询的WHERE子句中,以检索出为该公司工作的所有雇员。
下面看看使用了 连接 的方案。
分析:上述语句需要的两个表实际上是相同的表,所以Customers表在FROM子句中出现了两次。但这对于Customers的引用具有歧义,因为没有指示DBMS引用的是哪个Customers表。
于是需要使用表别名解决该问题。Customers表 第一次出现为别名c1 , 第二次为c2 ,然后再将这些别名用作表名。如SELECT语句使用c1前缀明确给出所需列的全名。如果不这么做,DBMS将返回错误,因为名为cust_id、cust_name、cust_contact的列各有两个。DBMS不知需要哪一列,即使它们都是同一列。
WHERE首先连接两个表,再按第二个表中的cust_contact过滤数据,返回所需的数据。
②自然连接
内连接 返回所有的数据,其中 相同的列可多次出现 。而 自然连接排除多次出现 ,使每一列只返回一次。
一般通过对一个表使用通配符(SELECT ),而对其他的列使用明确的子集来实现自然连接。
分析: 上述语句中,通配符只对第一个表使用,而所有其他列都明确列出来,所以没有出现重复的列被检索出来。
③内连接
目前为止使用的连接称为等值连接,是基于两个表之间的相等测试。该连接也称为内连接。
对该种连接还可以使用不同的语法,明确指定连接的类型。
分析 :该语句中的SELECT与之前的区别在于FROM 子句。此处两个表之间的关系是以 INNER JOIN 指定的部分FROM子句,因此需要使用特定的 ON子句 而不是WHERE子句。但传递给ON的实际条件与WHERE相同。
④外连接
许多连接将一个表中的行与另一个表中的行相关联,但有时候 需要包含没有关联的行 。例如,可能需要使用连接完成以下工作:
对每个顾客下的订单进行计数,包括那些至今尚未下订单的顾客;
列出所有产品以及订购数量,包括没有人订购的产品;
计算平均销售规模,包括那些至今尚未下订单的顾客。
在上述例子中,连接包含了那些在相关表中没有关联行的行。这种连接称为外连接,外连接分为 左外连接 和 右外连接 。
左外连接:取左边的表的全部,而右边的表按照条件显示,不符合条件的显示NULL。
右外连接:取右边的表的全部,而左边的表按照条件显示,不符合条件的显示NULL。
下面先给出一个简单的 内连接 ,再给出 左外连接 ,大家对比着理解。
分析 :两个语句都使用了 JOIN 关键字来指定连接类型,与内连接不同的是,左外连接包括没有关联行的行。因此在使用JOIN语法时,还需使用RIGHT或LEFT关键字来指定包括其所有行的表(RIGHT指出的是OUTER JOIN右边的表,而LEFT指出的是OUTER JOIN左边的表)。
上述左外连接语句使用了LEFT OUTER JOIN 从FROM子句左边的表(Customers)中选择所有行。
若要从右边的表选择所有行,即使用 右外连接 ,则语句如下:
注意 :两种基本的外连接形式,左外连接和右外连接。两者的唯一差别是所关联的表的顺序。
此外,还有一种外连接,即 全外连接 。该连接检索两个表中的所有行并关联可关联的行。与左外连接或右外连接包含一个表的不关联的行不同,全外连接包含两个表的不关联的行。
自连接、自然连接、内连接和外连接的区别
①自连接: 通常用于 两张结构和数据内容完全一样的表 ,在做数据处理时,对它们分别 重命名 来加以区分,然后再进行关联。
②自然连接 :特点是要求两个关系表中进行连接的必须是 相同属性列 (名字相同),无需添加连接条件,且 在结果中消除了重复的属性列 。
③内连接 :与自然连接相似,区别在于内连接 不要求两属性列同名 ,可以用 using或on 来指定某两列字段相同的连接条件。
④外连接 :可以解决自然连接时某些属性不同导致这些元组被舍弃的问题,起到了 保留要舍弃的结果 的作用。
使用带聚集函数的连接
之前给大家介绍过使用 聚集函数 来汇总数据,殊不知这些函数也可以与连接一起使用。
分析: 上述语句使用了 COUNT函数 。该语句使用INNER JOIN将Customers和Orders表相互关联。GROUP BY子句按顾客分组,因此,函数调用COUNT(Ordersorder_num)对每个顾客的订单计数,将其作为num_ord返回。
分析: 上述语句使用 左外连接 包含所有顾客,包括了那些没有任何订单的顾客。
WHERE子句的重要性
需记住的是,在一条SELECT语句中连接几个表时,相应的关系是在运行中构造的,因为在数据库表中的定义没有指示DBMS如何对表进行连接的内容。
要连接多个表,需要将它们并列于from之后, 关键 是要设置WHERE子句,确保它们之间的 关联关系 必须给出,否则,查询结果会成为笛卡尔积。
笛卡尔积:由没有连接条件的表关系返回的结果为笛卡儿积。
分析 :上述语句输出的结果便是 笛卡尔积 。返回的数据用每个供应商匹配了每个产品,包括了供应商不正确的产品(即使该供应商没有产品)。
连接及其使用的要点
① 注意所使用的连接类型。一般我们使用内连接,但使用外连接也有效。
② 关于确切的连接语法,应该查看具体的文档,看相应的DBMS支持何种语法(大多数DBMS使用这两课中描述的某种语法)。
③ 保证使用正确的连接条件(不管采用哪种语法),否则会返回不正确的数据。
④ 应该总是提供连接条件,否则会得出笛卡儿积。
⑤ 在一个连接中可以包含多个表,甚至可以对每个连接采用不同的连接类型。虽然这样做是合法的,一般也很有用,但应该在测试它们前分别测试每个连接。这会使故障排除更为简单。
以上就是本次介绍的连接和高级连接啦~
下一期将给大家介绍 组合查询 、 插入数据 及 更新和删除数据。
我们下期见!
1、数据处理工具:Excel
数据分析师,在有些公司也会有数据产品经理、数据挖掘工程师等等。他们最初级最主要的工具就是Excel。有些公司也会涉及到像Visio,Xmind、PPT等设计图标数据分析方面的高级技巧。数据分析师是一个需要拥有较强综合能力的岗位,因此,在有些互联网公司仍然需要数据透视表演练、Vision跨职能流程图演练、Xmind项目计划导图演练、PPT高级动画技巧等。
在Excel,需要重点了解数据处理的重要技巧及函数的应用,特别是数据清理技术的应用。这项运用能对数据去伪存真,掌握数据主动权,全面掌控数据;Excel数据透视表的应用重在挖掘隐藏的数据价值,轻松整合海量数据:各种图表类型的制作技巧及Power Query、Power Pivot的应用可展现数据可视化效果,让数据说话。因此想从事数据分析岗位的,需要快速掌握快各种Excel数据处理与分析技巧。
2、数据库:MySQL
Excel如果能够玩的很转,能胜任一部分数据量不是很大的公司。但是基于Excel处理数据能力有限,如果想胜任中型的互联网公司中数据分析岗位还是比较困难。因此需要学会数据库技术,一般Mysql。你需要了解MySQL管理工具的使用以及数据库的基本 *** 作;数据表的基本 *** 作、MySQL的数据类型和运算符、MySQL函数、查询语句、存储过程与函数、触发程序以及视图等。比较高阶的需要学习MySQL的备份和恢复;熟悉完整的MySQL数据系统开发流程。
3、数据可视化:Tableau & Echarts
如果说前面2条是数据处理的技术,那么在如今“颜值为王”的现在,如何将数据展现得更好看,让别人更愿意看,这也是一个技术活。好比公司领导让你对某一个项目得研究成果做汇报,那么你不可能给他看单纯的数据一样,你需要让数据更直观,甚至更美观
如何理解数据可视化?像我们以前上学的时候学过的柱状图,饼状图,也是数据可视化的一种。只是在现在,简单的柱状图已经不能满足工作所需。目前比较流行的商业数据可视化工具是Tableau & Echarts。
Echarts是开源的,代码可以自己改,种类也非常丰富,这里不多做介绍,可以去创建一个工作区了解下。
4、大数据分析:SPSS & Python& HiveSQL 等
如果说Excel是“轻数据处理工具”,Mysql是“中型数据处理工具”那么,大数据分析,涉及的面就非常广泛,技术点涉及的也比较多。这也就是为什么目前互联网公司年薪百万重金难求大数据分析师的原因
大数据分析需要处理海量的数据,这对于数据分析师的工作能力要求就比较高,一般来说,大数据分析师需要会
(1)会使用Hive的SQL方法HiveQL来汇总、查询和分析存储在Hadoop分布式文件系统上的大数据集合。知道Hive如何在Hadoop生态系统进行数据分析工作。
(2)会一些SPSS modeler基础应用,这部分技能对应数据建模分析师
(3)何使用R语言进行数据集的创建和数据的管理等工作;会使用R语言数据可视化 *** 作,让学员学会如何用R语言作图,如条形图、折线图和组合图等等;是R语言数据挖掘,本部分数据挖掘工程师
(4)用Python来编写网络爬虫程序,从页面中抓取数据的多种方法,提取缓存中的数据,使用多个线程和进程来进行并发抓取等
总结一下
大数据的分析与处理方法解读
越来越多的应用涉及到大数据,这些大数据的属性,包括数量,速度,多样性等等都是呈现了大数据不断增长的复杂性,所以,大数据的分析方法在大数据领域就显得尤为重要,可以说是决定最终信息是否有价值的决定性因素。基于此,大数据分析的方法理论有哪些呢?
大数据分析的五个基本方面
PredictiveAnalyticCapabilities(预测性分析能力)
数据挖掘可以让分析员更好的理解数据,而预测性分析可以让分析员根据可视化分析和数据挖掘的结果做出一些预测性的判断。
DataQualityandMasterDataManagement(数据质量和数据管理)
数据质量和数据管理是一些管理方面的最佳实践。通过标准化的流程和工具对数据进行处理可以保证一个预先定义好的高质量的分析结果。
AnalyticVisualizations(可视化分析)
不管是对数据分析专家还是普通用户,数据可视化是数据分析工具最基本的要求。可视化可以直观的展示数据,让数据自己说话,让观众听到结果。
SemanticEngines(语义引擎)
我们知道由于非结构化数据的多样性带来了数据分析的新的挑战,我们需要一系列的工具去解析,提取,分析数据。语义引擎需要被设计成能够从“文档”中智能提取信息。
DataMiningAlgorithms(数据挖掘算法)
可视化是给人看的,数据挖掘就是给机器看的。集群、分割、孤立点分析还有其他的算法让我们深入数据内部,挖掘价值。这些算法不仅要处理大数据的量,也要处理大数据的速度。
假如大数据真的是下一个重要的技术革新的话,我们最好把精力关注在大数据能给我们带来的好处,而不仅仅是挑战。
大数据处理
大数据处理数据时代理念的三大转变:要全体不要抽样,要效率不要绝对精确,要相关不要因果。具体的大数据处理方法其实有很多,但是根据长时间的实践,笔者总结了一个基本的大数据处理流程,并且这个流程应该能够对大家理顺大数据的处理有所帮助。整个处理流程可以概括为四步,分别是采集、导入和预处理、统计和分析,以及挖掘。
采集
大数据的采集是指利用多个数据库来接收发自客户端的数据,并且用户可以通过这些数据库来进行简单的查询和处理工作。比如,电商会使用传统的关系型数据库MySQL和Oracle等来存储每一笔事务数据,除此之外,Redis和MongoDB这样的NoSQL数据库也常用于数据的采集。
在大数据的采集过程中,其主要特点和挑战是并发数高,因为同时有可能会有成千上万的用户来进行访问和 *** 作,比如火车票售票网站和淘宝,它们并发的访问量在峰值时达到上百万,所以需要在采集端部署大量数据库才能支撑。并且如何在这些数据库之间进行负载均衡和分片的确是需要深入的思考和设计。
统计/分析
统计与分析主要利用分布式数据库,或者分布式计算集群来对存储于其内的海量数据进行普通的分析和分类汇总等,以满足大多数常见的分析需求,在这方面,一些实时性需求会用到EMC的GreenPlum、Oracle的Exadata,以及基于MySQL的列式存储Infobright等,而一些批处理,或者基于半结构化数据的需求可以使用Hadoop。统计与分析这部分的主要特点和挑战是分析涉及的数据量大,其对系统资源,特别是I/O会有极大的占用。
导入/预处理
虽然采集端本身会有很多数据库,但是如果要对这些海量数据进行有效的分析,还是应该将这些来自前端的数据导入到一个集中的大型分布式数据库,或者分布式存储集群,并且可以在导入基础上做一些简单的清洗和预处理工作。也有一些用户会在导入时使用来自Twitter的Storm来对数据进行流式计算,来满足部分业务的实时计算需求。导入与预处理过程的特点和挑战主要是导入的数据量大,每秒钟的导入量经常会达到百兆,甚至千兆级别。
挖掘
与前面统计和分析过程不同的是,数据挖掘一般没有什么预先设定好的主题,主要是在现有数据上面进行基于各种算法的计算,从而起到预测的效果,从而实现一些高级别数据分析的需求。比较典型算法有用于聚类的K-Means、用于统计学习的SVM和用于分类的NaiveBayes,主要使用的工具有Hadoop的Mahout等。该过程的特点和挑战主要是用于挖掘的算法很复杂,并且计算涉及的数据量和计算量都很大,还有,常用数据挖掘算法都以单线程为主。
以上就是关于数据分析人必掌握的数据库语言-SQL指南第六期全部的内容,包括:数据分析人必掌握的数据库语言-SQL指南第六期、数据分析工具常见的有哪些、大数据的分析与处理方法解读等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)