MySQL的子查询与连接查询

本文详细介绍了MySQL中的子查询和连接查询。内容包括子查询的使用,如在SELECT、INSERT、UPDATE和DO语句中的嵌套,以及AVG、ROUND等聚合函数的应用。还讲解了IN、EXISTS子查询以及CREATE ... SELECT语句。接着,讨论了不同类型的连接查询,如INNER JOIN、LEFT JOIN、RIGHT JOIN,并通过例子展示了如何进行表的自身连接来获取分类的父类和子类信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在数据库操作中,我们使用最多的SQL语句那无疑是SELECT 查询语句,当然也是最复杂的一个,接下来就学习一下这条语句:

子查询:是指嵌套在查询内部,且必须始终出现在圆括号内。子查询的外层查询可以是:SELECT , INSERT , UPDATE , SET 或DO 。

常见的聚集函数:

AVG:求平局值。例如:  SELECT AVG(price) from db;

ROUND:保留小数位数(四舍五入)。 例如:SELECT ROUND(AVG(price),2) from db;



在查询中使用ANY,SOME,ALL关键字:



使用[ NOT ] IN 的子查询:

operand comparision_operator [ NOT ] IN (subquery);


使用[ NOT ] EXISTS 的子查询:

如果子查询返回任何行,EXISTS 将返回TRUE,否者返回FALSE;


创建写入(CREATE ... SELECT) :

创建数据表的同时将查询结果写入到数据表:

CREATE TABLE [ IF NOT EXISTS ] tb_name [( create_definition, ... )]  select_statement;


连接:

MySQL在SELECT 语句、多表更新、多表删除语句中都支持 join  操作。

table1 {[INNER | CROSS ] JOIN | {LEFT | RIGHT } [OUTER] JOIN}  table2  ON  expr;


连接类型:

INNER JOIN(内连接):在mysql中JOIN, CROSS JOIN 和 INNER JOIN 是等价的。

LEFT [OUTER] JOIN : 左外连接。

RIGHT [OUTER] JOIN: 右外连接。

区别:


说明:A LEFT JOIN B  join_condition(RIGHT JOIN 与此相反)

  1. 数据表B的结果集依赖数据表A 。
  2. 数据表A的结果集根据左外连接条件依赖所有数据表(但B表除外)。

数据表的自身连接:

例如:创建一个数据表unlimited_classification(无限级分类):

CREATE TABLE unlimited_classification(
     type_id   SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
     type_name VARCHAR(20) NOT NULL,
     parent_id SMALLINT UNSIGNED NOT NULL DEFAULT 0
  ); 
(其中parent_id 依赖于 type_id)

先插入记录:


为了得到每一个分类的父类名称,即实现如下结果:


就需要做表的自身连接:

SELECT c.type_id,c.type_name,p.type_name AS parent_name FROM unlimited_classification AS c LEFT JOIN unlimited_classification AS p ON c.parent_id = p.type_id;

为了得到每一个分类的子类名称,即实现如下结果:


任然需要做自身连接:

SELECT p.type_id,p.type_name,c.type_name FROM unlimited_classification AS p LEFT JOIN unlimited_classification AS c ON c.parent_id = p.type_id;




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值