MySQL中的连接简介

149 阅读6分钟

这篇文章是作为数据科学博客马拉松的一部分发表的

在甲骨文公司的支持下,MySQL是GNU许可证下的开源软件。它是一个依赖于结构化查询语言的关系型数据库管理系统,它是小型和大型应用的理想选择。这个免费工具是目前市场上最好的RDBMS之一。它是可扩展的、直观的、迅速的,用于开发可扩展的基于网络的软件应用程序。它支持客户-服务器架构,位于MySQL服务器内部。MySQL服务器负责处理所有的数据库指令、SQL命令和语句。

什么是MySQL连接?

MySQL数据库只不过是一个持有大量数据的多个表的集合。数据库管理员(DBA)和数据分析师的工作是有效地分析数据而不造成任何损失。为了根据特定条件从存储在数据库中的两个或多个表中检索记录,他们使用MySQL连接的概念。在MySQL连接的帮助下,我们可以在一次查询中从多个表中提取数据。为了执行SQL连接,这些表必须用一个共同的关键字段相互关联。最常见的模式是利用一个表的主键连接到它的外键。主键是一个表的唯一标识符,确保特定列中的数据是唯一的。主键列的现实世界的例子可以是Adhar号码、PAN号码、UAN、护照ID等。外键是一个列或一组列,用于将关系数据库中的相关表联系在一起。在一个表中充当主键的列只能成为另一个表中的外键。主键和外键的概念被用来将多个表相互联系起来。一般来说,JOIN子句用于MySQL的UPDATE、SELECT和DELETE语句。

为什么是SQL连接?

MySQL连接的名气背后的原因是它提供了从两个或多个表中提取和整理数据的便利。每当我们要从数据库中绘制大量的数据时,我们不能将所有的数据存储在一个表中,因为加载数据需要太多的时间,而且数据可能不一致。这就是为什么我们需要从不同的表中获取数据。DBMS的最终目标是实现规范化,确保数据集的高质量。规范化将数据分成多个表,而连接子句允许从多个表中获取数据而不影响数据质量和安全性。

连接的类型

MySQL支持5种类型的连接,包括自连接、内连接、外连接(左外和右外)和交叉连接。在理解它们中的每一种之前,让我们创建两个表。

  CREATE TABLE supplier(
  SNO varchar(4) PRIMARY KEY,
  SNAME varchar(15),
  STATUS int(5),
  CITY varchar(20)
  );
CREATE TABLE parts(
PNO varchar(4) PRIMARY KEY,
SNO varchar(4) REFERENCES supplier(SNO),
PNAME varchar(15),
COLOR varchar(10),
WEIGH int(5),
CITY varchar(20),
cost int(5)
);

在供应商和零件表中插入数据。

SUPPLIER:

	INSERT INTO supplier VALUES('S1','Smith',20,'London');
	INSERT INTO supplier VALUES('S2','Jones',10,'Paris');
	INSERT INTO supplier VALUES('S3','Blake',30,'Paris');
	INSERT INTO supplier VALUES('S4','Clark',20,'London');
	INSERT INTO supplier VALUES('S5','Adams',30,'Athens');
	INSERT INTO supplier VALUES('S6','Pavan',24,'Hyderabad');

OUTPUT

PARTS:

	INSERT INTO parts VALUES('P1','S1','Nut','Red',12,'London',50);
	INSERT INTO parts VALUES('P2','S1','Bolt','Green',17,'Paris',70);
	INSERT INTO parts VALUES('P3','S2','Screw','Blue',17,'Rome',80);
	INSERT INTO parts VALUES('P4','S3','Screw','Red',14,'London',80);
	INSERT INTO parts VALUES('P5','S2','Cam','Blue',12,'Paris',90);
	INSERT INTO parts VALUES('P6','S3','Cog','Red',19,'London',68);

OUTPUT

内联接(INNER JOIN

内连接子句是MySQL连接中使用最广泛的类型。它用于只检索共同匹配的记录或满足连接条件的不同表中的记录。

维恩图。

Joins Table in MySQL

图:-https://www.educba.com/joins-in-mysql/

语法。

SELECT column_names   
FROM tableA   
INNER JOIN tableB  
ON tableA.col = tableB.col;

**例子。**在我们的例子中,我们想获取供应商的数据,并附上供应商销售的零件名称。

select A.SNAME, B.PNAME from supplier A INNER JOIN parts B ON A.SNO=B.SNO;

输出。

OUTER JOIN

在内联接的帮助下,你只能检索到匹配的行,但是使用外联接可以同时检索到匹配和不匹配的行。它将为连接表中的非匹配行显示NULL值。

在MySQL中OUTER JOIN的类型。

左外连接

LEFT JOIN子句允许从左表(表A)检索所有记录,同时从右表(表B)检索那些满足连接条件的记录。只要左表的任何记录与右表不匹配,右边的列就显示为空。

维恩图。

A Guide to MySQL JOINS

图:-arctype.com/blog/mysql-…

语法。

SELECT column_names 
FROM tableA
LEFT [OUTER] JOIN tableB
ON tableA.col = tableB.col;

**例子。**在我们的例子中,我们想获取所有供应商的数据,无论他们是否售出任何部件。

select a.SNAME, a.CITY, b.PNAME, b.COLOR from supplier a LEFT JOIN parts b ON a.SNO=b.SNO;

输出。

右外联接

RIGHT OUTER JOIN遵循与LEFT OUTER JOIN相同的原则。它从右表(表B)检索所有数据,并将这些数据与左表(表A)的记录相匹配。如果右表中的记录在左表中没有任何匹配的记录,那么结果集中的左表列就会有空值。

维恩图。

PostgreSQL - Joins - GeeksforGeeks

图:-www.geeksforgeeks.org/postgresql-…

语法。

SELECT column_names
FROM TableA
RIGHT [OUTER] JOIN TableB
ON tableA.col = tableB.col;

**例子。**在我们的例子中,我们想获取零件的数据,无论它们是否被任何供应商售出。

select a.SNAME, a.CITY, b.PNAME, b.COLOR from supplier a RIGHT JOIN parts b ON a.SNO=b.SNO;

输出。

自接(SELF JOIN

自连接意味着将一个表连接到它自己。它指出,一个表的每一条记录都与它自己和同一表的其他每一条记录相连接。当你想提取分层数据或比较同一表中的行时,自连接是最佳选择。

维恩图。

Different Types of SQL JOINs: Tutorial with Examples

图:-codingsight.com/sql-joins-t…

语法。

SELECT column_name
FROM TableA TA, TableA TB
WHERE condition;

**例子。**在我们的例子中,我们想比较每个供应商的数据。

select a.SNAME,b.CITY from supplier a, supplier b where b.SNO=a.SNO;

输出。

CROSS JOIN

MySQL的CROSS JOIN或cartesian join有助于检索每个表中的所有行的组合。如果没有提供额外的条件,它将返回表A的每一行与表B的所有行的乘积。如果表A的大小是m,表B是n,那么结果集的大小将是m*n。

维恩图。

SQL Joins

图:-www.c-sharpcorner.com/article/sql…

语法。

SELECT column_names
FROM TableA
CROSS JOIN TableB;

**例子。**在我们的例子中,我们希望从供应商和零件表中获得每一行的详细信息。

select a.SNAME, a.CITY, b.PNAME, b.COLOR from supplier a CROSS JOIN parts b;

输出。

MySQL中连接的局限性是什么?

使用MySQL连接的一个最常见的限制是,与子查询相比,它们相当难以阅读。此外,选择一种特定的连接类型以产生正确的预期结果可能会令人困惑。在从规范化的数据库中检索数据时,我们无法避免连接,但正确执行连接是至关重要的,因为不正确的连接操作会导致不准确的查询结果和性能下降。另一个缺点是,查询中更多的连接会增加检索数据的处理时间。

结论

为了进行有洞察力的分析,从庞大的数据库中检索复杂的数据并不容易。JOIN是SQL中最强大的概念之一,可以做到这一点。这篇博客已经看到了MySQL连接子句的突出方面,以及它们如何与查询一起工作的合适例子。

  • 我们讨论了连接的必要性和它们的类型。

  • 在MySQL查询的帮助下,了解了不同类型的连接的实现。

  • 还学习了连接的一些限制。

本文所展示的媒体不属于Analytics Vidhya所有,由作者自行决定使用。