在关系型数据库管理系统中,SQL(Structured Query Language)扮演着至关重要的角色,它适用于各种规模的应用程序。MySQL作为一种流行的RDBMS(关系型数据库管理系统),以其免费、可扩展、直观和快速的特点,被广泛用于开发可扩展的基于Web的软件应用。MySQL支持客户端-服务器架构,并内置于MySQL服务器中,该服务器负责处理所有数据库指令、SQL命令和语句。本文作为数据科学博客马拉松的一部分发布。
MySQL数据库通过表存储大量数据。数据库管理员(DBA)和数据分析师确保数据分析的准确性。MySQL连接允许从多个相关表中检索记录,使用共同的键将主键与外键连接起来,形成类似于Adhar、PAN或护照号码的关系。外键连接表。JOIN子句与SELECT、UPDATE和DELETE一起使用,提高了数据查询的效率。
MySQL连接之所以受欢迎,是因为它们提供了从两个或多个表中提取和整理数据的便利。当需要从数据库中提取大量数据时,不能将所有数据存储在一个表中,因为这会花费太多时间加载数据,并且数据可能会不一致。这就是为什么需要从不同的表中获取数据。DBMS的最终目标是实现规范化,确保数据集的高质量。规范化将数据分割到多个表中,而连接子句允许从多个表中获取数据,而不影响数据的质量和安全性。
在了解每种连接之前,先创建两个表:
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和parts表中插入数据:
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);
MySQL支持多种连接类型,用于从多个相关表中检索数据。MySQL连接的主要类型包括:
内连接子句是最常用的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;
借助内连接,只能检索匹配的行,但使用外连接可以检索匹配和不匹配的行。它将在连接表的非匹配行中显示NULL值。外连接的类型包括:
LEFT JOIN子句允许检索左表(表A)的所有行,以及右表(表B)中满足连接条件的行。如果左表的任何记录与右表不匹配,则在结果集中的右表列将显示NULL。
语法:
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)的记录匹配。如果右表中的记录在左表中没有任何匹配记录,则结果集中的左表列将有NULL值。
语法:
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;
自连接意味着将表连接到自身。它表明表中的每一行都与自身以及表中的其他每一行连接。当想要提取层次数据或比较同一表中的行时,自连接是最佳选择。
语法:
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;
MySQL CROSS JOIN或笛卡尔连接有助于检索每个表的所有行的组合。如果没有提供额外的条件,它将返回表A的每一行与表B的所有行的乘积。如果表A的大小是m,表B的大小是n,那么结果集的大小将是m*n。
SELECT column_names
FROM TableA
CROSS JOIN TableB;
select a.SNAME, a.CITY, b.PNAME, b.COLOR from supplier a CROSS JOIN parts b;