MySql left join 多表连接查询优化语句

先过滤条件然后再根据表连接 同时在表中建立相关查询字段的索引这样在大数据多表联合查询的情况下速度相当快

SELECT M.*,SS.SensorCode,SS.SensorStatus,SS.ManufacturerId,SS.Electricity,
SS.Voltage,SS.MinElectricity,SS.MinVoltage,SS.Temperature,SS.StatusUpdteDate,SS.UpdateStatus ,tp.PricingStrategyid,tps.FreeDuration,bat.BerthTypeId 
FROM
(SELECT T.* , BS.ParkStatus,BS.ChangeTime ,CA.CantonName, SE.SectionName
 FROM
(SELECT A.* ,B.BerthId,B.BerthCode,B.BerthAddress,B.BerthStatus,B.LineDirection,B.CantonId,B.SectionId 
FROM 
(SELECT AR.AreaId,AR.AreaCode,AR.AreaName FROM   SYS_Area  AS AR  WHERE 1=1   AND AR.AreaCode='110' ) A 
LEFT JOIN  SYS_Berth AS B ON B.AreaId=A.AreaId ) T
JOIN SYS_BerthStatus AS BS ON T.BerthCode=BS.BerthCode  
JOIN SYS_Canton AS CA ON T.CantonId=CA.CantonId  
JOIN SYS_Section AS SE ON T.SectionId=SE.SectionId )M

LEFT JOIN SYS_Sensor SS ON M.BerthCode=SS.BerthCode 
LEFT JOIN TRA_PricingBerth AS tp ON tp.BerthCode=M.BerthCode 
  
LEFT JOIN TRA_PricingStrategy  AS tps ON tps.PricingStrategyId=tp.PricingStrategyId 
LEFT  JOIN SYS_BerthAndType AS bat ON bat.BerthCode=M.BerthCode 
ORDER BY BerthCode ASC

 

### 使用 LEFT JOIN 进行连接查询MySQL 中,`LEFT JOIN` 子句用于从两个或数据库查询数据。当使用 `LEFT JOIN` 时,在 FROM 子句之后指定了主(左侧),即使右侧没有匹配的记录,左侧的所有记录也会显示出来,而右侧不匹配的部分则会填充 NULL 值[^1]。 #### 示例语法 假设存在两张:`employees` 和 `departments`,其中 `employees.department_id` 是外键,关联到 `departments.id` 字段。为了获取所有员工的信息以及他们所属部门的名字,可以使用如下 SQL 查询: ```sql SELECT employees.name, departments.name AS department_name FROM employees LEFT JOIN departments ON employees.department_id = departments.id; ``` 这段代码实现了以下逻辑: - **选择字段**:选择了来自 `employees` 的 `name` 列和来自 `departments` 重命名后的 `department_name`。 - **指定主**:设定了 `employees` 作为主(即左)。 - **定义连接条件**:通过 `ON` 关键字明确了两之间基于 `employees.department_id` 和 `departments.id` 的关系来进行连接。 如果想进一步扩展此例子至三张甚至更格,则可以在上述基础上继续添加额外的 `LEFT JOIN` 来引入新的格并设置相应的连接条件。 例如,如果有第三张叫做 `locations` 并且希望得到每个部门所在城市的位置信息,那么完整的查询可能看起来像这样: ```sql SELECT employees.name, departments.name AS department_name, locations.city FROM employees LEFT JOIN departments ON employees.department_id = departments.id LEFT JOIN locations ON departments.location_id = locations.id; ``` 这里再次应用了相同的模式——每次加入一个新的 `LEFT JOIN` 都是为了确保左边的能够保留全部原始记录的同时尝试找到右边的相关条目;如果没有找到的话就用 NULL 替代那些缺失值。 #### 解释 - 当执行带有 `LEFT JOIN` 的查询时,系统首先创建由所涉及各组成的笛卡尔积(Cartesian product)。接着依据给定的联接条件筛选出符合条件的数据组合成临时结果集。 - 对于每一对满足联接条件的记录来说,它们会被合并在一起形成一条新纪录放入最终输出里。 - 如果对于某一行而言找不到任何相配对的对象,则会在相应位置填入 NULL 值示不存在这样的映射关系。 综上所述,`LEFT JOIN` 提供了一种有效的方法来处理不同间的关系,并能够在保持原完整性的情况下展示跨的数据联系[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值