欢迎来到HELLO素材网! 南京网站制作选择顺炫科技
丰富的DIV CSS模版、JS,jQuery特效免费提供下载
当前位置:主页 > 建站教程 > 服务器教程 >

如何七周成为数据剖析师11:SQL,从纯熟到掌握

发表于2019-04-21 13:00| 次阅读| 来源网络整理| 作者session

摘要:咱们在上一篇《如何七周成为数据剖析师:SQL,从入门到纯熟》文章已经掌握了除Join外的常用语法和函数,今天会通

咱们在上一篇《如何七周成为数据剖析师:SQL,从入门到纯熟》文章已经掌握了除Join外的常用语法和函数,今天会经过一系列的练习彻底掌握SQL。

如何七周成为数据分析师11:SQL,从熟练到掌握

咱们知道,数据库由多张表组成,表与表之间可能完成关联。

上图就是一个简略的关联模型:

Students.addressId = Address.id
Students.id = Scores.studentId
Scores.courseId = Courses.id

那么,如何在SQL查询语句中将两个表联接起来?咱们将使用最重要的语法Join。

select * fromStudents
joinAddress onStudents.addressId = Address.id

上面语句,join将Students和Address两表关联,关联需求一个或多个字段作为联接桥梁。例子中的桥梁就是addressid,咱们利用on语句,将Students表的addressId字段和Address的id字段婚配。

这里需求留意的是,由于字段能够重名,所以一旦利用了Join,字段前应该加上表名,如Students.addressId和Address.id ,这种用法是为了字段的惟一性,否则遇到重名,系统不知道利用哪个字段,就会报错。

select * fromStudents ass
joinAddress asa ons.addressId = a.id

上图是更优雅的写法,将表命名为一个缩略的别名,避免了语句过于冗余。不要利用拼音做别名,不是好习气。

Join语法有很多不同的变形,Left Join,Outer Join等,新人很容易混杂。这个咱们可能用数学中的交加和并集掌握。

上图很明晰地解释了各Join语法。

Inner Join最常见,叫做内联接,可能缩写成Join,找的是两张表共同领有的字段。

Left Join叫做左联接,以左表(join符号前的那张表)为主,前往一切的行。假设右表有共同字段,则一并前往,假设没有,则为空。

咱们以W3School上的数据为例:

select Persons.LastName, Persons.FirstName, Orders.OrderNo
fromPersons
left joinOrders onPersons.Id_P=Orders.Id_P
order byPersons.LastName

于是输出后果为:

后果集中,Bush那一行的OrderNo为空,就是由于Id_P无奈婚配上,前往了Null。假设改成Inner join,则不会前往整个Bush所内行。这是Inner Join和Left Join的区别,也是面试中常常会问到的标题。

Right Join和Left Join没有区别,A Left Join B 等价于 B Right Join A。

Full Join叫做全联接,也叫做Full Outer Join,意思是不管有的没的,只需存在,就前往。

还是以之前的例子演示,下面是Full Join:

最后两行就是所谓的「不管有的没的,只需存在字符串,就前往」的后果,它们Id_P并没有婚配上,但还是给出了前往,只是为空字段不同。

这三者的关系,咱们可能理解为:A Full Join B = A Left Join B + A Right Join B – A Inner Join B,这就是数学上的汇合运算,只管SQL的表并不能加减法。假设还只知其一;不知其二,看最上面的Join示例图,用面积的角度看也明确了。

经过上面的例子,咱们已经掌握了Join的支流语法,其余无非是变种。比如加解放条件 where XX is null,这里的XX可能是后果为空的字段。拿上文Left Join的例子演示:

select Persons.LastName, Persons.FirstName, Orders.OrderNo
fromPersons
left joinOrders
onPersons.Id_P=Orders.Id_P
whereOrders.Id_P is Null

最终前往的后果就是Bush这一行。

当咱们有多个字段要婚配时,on前面可能经过 and 停止多项关联。

select * fromA
joinB onA.name = B.nameandA.phone = B.phone

上图就是一个简略的实用场景,将用户姓名和手机号停止多项关联。它也可能退出其余的条件判别。

select * fromA
joinB onA.name = B.nameandA.phone = B.phone andB.sex = ‘男

咱们再加一个and,将B表的用户性别限定为男。这种用法等价于where B.sex = ‘男’。当数据量大到肯定水平,经过这种解放条件,能优化查询功能。

到这里,SQL的常用语法已经讲解的差不多了,咱们停止实战吧。leetcode.com网站是知名的算法竞赛题,去上面刷SQL吧。