MySQL中关联查询的简介及应用方法(mysql中关联查询)

MySQL中关联查询的简介及应用方法

MySQL是一种常用的关系型数据库管理系统,在数据处理的业务场景中具有广泛的应用,因此熟练掌握MySQL的查询语句对于提升应用程序的效率和数据处理的准确性都具有重要的价值。在MySQL的查询语句中,关联查询也叫做联结查询,是一种基于两张或以上的表格之间关系的查询方式,为实现表格之间的数据相互关联,可以使用关联查询技术。本文将为您介绍关于MySQL中关联查询的基础概念和相关应用方法。

基本语法

MySQL中关联查询的基本语法如下:通过SELECT关键字,可以实现关联查询:

SELECT [col1], [col2], … FROM [table1] JOIN [table2] ON [table1.col] = [table2.col] WHERE [condition]

其中,JOIN是关键字,[table1]表示需要查询的表格名称,[table2]是用来和[table1]进行关联的表格,[table1.col]表示表格[1]中需要连接的列名,[table2.col]类似表格[2]中需要连接的列名,WHERE是过滤查询结果的条件。

类型

MySQL中关联查询的类型按照连接条件的不同可以分为三种类型:

内连接(INNER)

内连接描述的是两个或多个表格中的数据交集,也就是说只查询两张或以上表格中都存在的数据。内连接语法如下:

SELECT [col1], [col2], … FROM [table1] INNER JOIN [table2] ON [table1.col] = [table2.col] WHERE [condition]

左连接(LEFT)

左连接描述的是左边表格的所有数据,以及符合连接条件的右边表格的数据。如果连接条件不成立,则返回NULL。左连接语法如下:

SELECT [col1], [col2], … FROM [table1] LEFT JOIN [table2] ON [table1.col] = [table2.col] WHERE [condition]

右连接(RIGHT)

右连接描述的是右边表格的所有数据,以及符合连接条件的左边表格的数据。如果连接条件不成立,则返回NULL。右连接语法如下:

SELECT [col1], [col2], … FROM [table1] RIGHT JOIN [table2] ON [table1.col] = [table2.col] WHERE [condition]

应用

MySQL中关联查询可以解决多关联表格查询的问题,比如查询到两张表格中有关联关系的数据、复合条件的查询等,这里为大家提供一个使用INNER JOIN进行多张表格查询的示例,假设我们有两张表格:表格A保存了客户订购产品的信息,表格B保存了与产品相关的生产信息,两张表格通过PRODUCT_ID进行了关联。

1.首先建立两张表格:

CREATE TABLE `product_order` (

`id` int(11) NOT NULL AUTO_INCREMENT,

`customer` varchar(50) DEFAULT NULL,

`product_id` int(11) DEFAULT NULL,

`order_date` date DEFAULT NULL,

PRIMARY KEY (`id`)

) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8;

CREATE TABLE `product_info` (

`id` int(11) NOT NULL AUTO_INCREMENT,

`name` varchar(50) DEFAULT NULL,

`price` double DEFAULT NULL,

`product_code` varchar(20) DEFAULT NULL,

`produced_date` date DEFAULT NULL,

PRIMARY KEY (`id`)

) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;

2.表格插入测试数据:

— 插入顾客订单数据

INSERT INTO `product_order` (`id`, `customer`, `product_id`, `order_date`) VALUES (1, ‘jack’, 1, ‘2018-06-01’);

INSERT INTO `product_order` (`id`, `customer`, `product_id`, `order_date`) VALUES (2, ‘mary’, 1, ‘2018-06-05’);

INSERT INTO `product_order` (`id`, `customer`, `product_id`, `order_date`) VALUES (3, ‘tom’, 2, ‘2018-06-02’);

INSERT INTO `product_order` (`id`, `customer`, `product_id`, `order_date`) VALUES (4, ‘nick’, 2, ‘2018-06-06’);

INSERT INTO `product_order` (`id`, `customer`, `product_id`, `order_date`) VALUES (5, ‘bob’, 3, ‘2018-06-03’);

INSERT INTO `product_order` (`id`, `customer`, `product_id`, `order_date`) VALUES (6, ‘cindy’, 3, ‘2018-06-06’);

INSERT INTO `product_order` (`id`, `customer`, `product_id`, `order_date`) VALUES (7, ‘lily’, 4, ‘2018-06-01’);

INSERT INTO `product_order` (`id`, `customer`, `product_id`, `order_date`) VALUES (8, ‘andy’, 4, ‘2018-06-07’);

— 插入产品信息数据

INSERT INTO `product_info` (`id`, `name`, `price`, `product_code`, `produced_date`) VALUES (1, ‘apple’, 3.00, ‘001’, ‘2018-05-30’);

INSERT INTO `product_info` (`id`, `name`, `price`, `product_code`, `produced_date`) VALUES (2, ‘orange’, 2.50, ‘002’, ‘2018-06-01’);

INSERT INTO `product_info` (`id`, `name`, `price`, `product_code`, `produced_date`) VALUES (3, ‘banana’, 1.50, ‘003’, ‘2018-06-10’);

INSERT INTO `product_info` (`id`, `name`, `price`, `product_code`, `produced_date`) VALUES (4, ‘pear’, 3.20, ‘004’, ‘2018-06-01’);

3.查询两张表格之间产生的关联数据:

SELECT po.customer, pi.name, pi.price, po.order_date FROM product_order po INNER JOIN product_info pi ON po.product_id = pi.id;

运行以上SQL脚本,即可得到如下结果:

+———-+——–+——-+————+

| customer | name | price | order_date |

+———-+——–+——-+————+

| jack | apple | 3.00 | 2018-06-01 |

| mary | apple | 3.00 | 2018-06-05 |

| tom | orange | 2.50 | 2018-06-02 |

| nick | orange | 2.50 | 2018-06-06 |

| bob | banana | 1.50 | 2018-06-03 |

| cindy | banana | 1.50 | 2018-06-06 |

| lily | pear | 3.20 | 2018-06-01 |

| andy | pear | 3.20 | 2018-06-07 |

+———-+——–+——-+————+

以上的SQL语句表明了INNER JOIN的用法,如果换用其他类型的关联查询语句,则得到的结果亦不相同,还有需要注意的是如果关联的列较多则会影响程序的性能,因此需要确保关联查询语句的执行效率。关联查询是MySQL查询语言中相对较为复杂的部分,需要深入了解和实践,通过贴近生活的实践应用,加深对关联查询的理解和掌握能提高我们的开发效率和数据处理能力。


数据运维技术 » MySQL中关联查询的简介及应用方法(mysql中关联查询)