当前位置: 首页 > 科技观察

MySQL的三个JOIN子句指南_0

时间:2023-03-16 13:53:24 科技观察

【.com速译】众所周知,关系型数据库中的每个表都包含唯一或公共的数据,每个表之间存在逻辑关系。例如,相同的列名和数据类型通常保存在链接为公共值的表中。因此,我们在执行单条SQL查询时,往往会使用JOIN语句来连接多个共享字段的表并获取数据。特别是在MySQL中,JOIN用于聚合来自多个表的数据并将它们组合成单个输出结果。此外,我们可以在SELECT、UPDATE和DELETE命令中使用JOIN。JOIN入门MySQL的JOIN类型指定了两个表在查询中的链接方式。其中INNERJOIN、OUTERJOIN和CROSSJOIN是MySQL支持的三种JOIN子句。LEFTJOIN和RIGHTJOIN是OUTERJOIN的两种不同类型。为了更直观地展示如何使用JOIN,我们首先需要按照以下方式创建一个新的结构模式(schema),为后续操作提供数据示例。MySQLCREATETABLEUsers(UserIDINT,UserNameVARCHAR(255),PasswordVARCHAR(255),isActiveBOOLEAN);CREATETABLEUserprofile(ProfileIDINT,LastNameVARCHAR(255),FirstNameVARCHAR(255),EmailVARCHAR(255),PhoneVARCHAR(255));接下来,我们要做的就是向其中插入一些数据。如下面的语句所示,您可以根据需要向表中插入任意数量的用户。MySQLINSERTITOUsers(UserID,UserName,Password,isActive)VALUES(1,'krofax','krofax1234',TRUE);INSERTIINTOuserprofile(profileid,lastname,firstname,email,phone)VALUES(1,'Ada','George','adageorge@gmail.com','1290003456');MySQLINNERJOIN子句我们可以使用INNERJOIN来检索各种常见的匹配记录。例如,INNERJOIN子句可以通过从表A和表B中检索记录来过滤某些连接要求的记录。这也是最常用的JOIN类型。下面的文氏图可以帮助您更好地理解INNERJOIN。下面是一个基于MySQL语法的INNERJOIN:SELECTCOLUMNSFROMtableAINNERJOINtableBONtableA.column=tableB.column;与INNERJOIN相比,MySQL外部连接会产生非匹配记录和匹配数据行。即如果连接表中的数据行不匹配,就会显示NULL值。前面提到,MySQL有两种不同形式的OUTERJOIN,它们是:MySQLLEFTJOIN和MySQLRIGHTJOIN。下面,让我们详细了解一下它们之间的区别。MySQLLEFTJOIN子句LEFTJOIN允许您从表A和表B中获取所有满足连接条件的条目。而且,对于A表中不满足条件的记录,会显示为NULL值。下面的文氏图可以帮助您更好地理解LEFTJOIN。下面是基于MySQL语法的LEFTJOIN子句:MySQLCOLUMNStableAJOINtableBONtableA.column=tableB.column;如上图所示:LEFTJOIN关键字会返回那些匹配的Customers表,但是在Orders表中没有匹配到的所有记录。MySQLRIGHTJOIN子句和RIGHTJOIN允许用户获取表B中的所有条目,以及表A中满足连接条件的条目。即表B中不符合条件的记录将显示为NULL值。下面的维恩图可以帮助您更好地理解RIGHTJOIN。下面是基于MySQL语法的RIGHTJOIN子句:MySQLSELECTCOLUMNSFROMtableARIGHTJOINtableBONtableA.column=tableB.column;如上图所示:RIGHTJOIN关键字返回那些匹配的Employees表,而不是Orders表中的所有记录。MySQLCROSSJOIN子句MySQLCROSSJOIN通常称为笛卡尔连接(cartesianjoin)。它返回每个表中所有可能数据行的组合。即如果不提供附加条件,可以将表A的每一行乘以表B的所有行得到结果集。下面的维恩图可以帮助你更好地理解CROSSJOIN。那么我们什么时候需要使用这种JOIN呢?假设你接到一个任务:找到某种产品和颜色的所有可能组合。那么CROSSJOIN这个时候就可以派上用场了。但是,值得注意的是,CROSSJOIN可能会产生相当大的结果集!以下是基于MySQL语法的CROSSJOIN子句:MySQLSELECTCOLUMNSFROMtableACROSSJOINtableB;JOIN技巧一般来说,在MySQL中,JOIN可以方便您执行单个JOIN查询,并节省许多简单的查询。因此,它可以带来更快的速度,更低的服务器开销,以及更少的MySQL和应用程序之间的数据传输。与SQLServer不同的是,虽然MySQL对于FULLOUTERJOIN没有唯一的JOIN类型,但是可以结合使用LEFTOUTERJOIN和RIGHTOUTERJOIN(请参考下面的语句)来获得与FULLOUTERJOIN相同的输出效果.MySQLSELECT*FROMtableALEFTJOINtableBONtableA.id=tableB.idUNIONSELECT*FROMtableARIGHTJOINtableBONtableA.id=tableB.id另外,使用MySQLJOIN,也可以顺利join以上两张表。MySQLSELECT*FROMtableALEFTJOINtableBONtableA.id=tableB.idLEFTJOINtableCONtableC.id=tableA.id;JOINS的实用性更快。JOINS允许您在单个查询中从两个或多个链接的数据库表中获取数据。显然,这比一个一个地运行查询来获得相同的结果更省时。MySQL效率更高。由于连接是通过索引执行的,因此JOINS将为MySQL提供更好的性能。减少服务器负载。毕竟JOINS的单条查询执行可以让服务器输出结果的速度更快。为了在日常工作中能够灵活使用JOIN,很多分析师或数据库管理员(DBA)会选择ArctypeforMySQL等工具来生成复杂完整的JOIN子句,以避免记住那几百个列名或别名。此外,此类自动化工具还可以通过丰富的功能协助用户创建复杂的查询,并可以轻松管理JOIN的各种条件。原标题:AGuidetoMySQLJOINs,作者:BlessingKrofegha