SELECT * FROM wfcs_disposal_account_day_report d ,wfcs_transfer_sheet_disposal_day_summary t, wfcs_transfer_sheet_produce_day_summary p 这样写跟left join 有什么区别
时间: 2023-08-21 07:03:19 浏览: 134
这种写法是使用了 SQL 的隐式连接方式,即使用逗号分隔多个表名,将它们放在 FROM 子句中。这种写法会返回所有表中的行,但并不一定是按照你期望的方式进行关联。
具体来说,这种写法会返回所有表的笛卡尔积,即每个表中的所有行都会与其他表中的所有行进行组合。这意味着,如果你的表中有很多行,那么这种写法将会返回非常大的结果集。而且,由于没有指定任何连接条件,这种写法还可能会导致结果集中包含许多无用的行,这些行并不符合你的需求。
相比之下,LEFT JOIN 语句提供了更加灵活和准确的连接方式,它允许你指定连接条件,只返回符合条件的行,而且还可以使用其他关键字,如 WHERE 子句和 GROUP BY 子句,来进一步筛选和聚合数据。因此,建议在进行多表连接时,优先考虑使用 LEFT JOIN 语句。
相关问题
SELECT d.areaCode, d.areaName, d.bciStreetName, d.wasteTypeCode, d.wasteTypeName, d.wasteTrashCode, d.wasteTrashName, d.wasteName, sum( p.produceNumTotal ) AS produceNumTotal, sum( IFNULL(t.disposalNumTotal, 0 ),decimal(10,2) ) AS disposalNumTotal, sum( p.cityTransferNum ) AS cityTransferNum, sum( p.transferCityOutNum ) AS transferCityOutNum, sum( p.transferProvinceOutNum ) AS transferProvinceOutNum, sum( IFNULL( p.transferCityOutNum, 0 ) + IFNULL( p.transferProvinceOutNum, 0 ) ) AS transferCityAndProInNum, sum( t.transferCityInNum ) AS transferCityInNum, sum( t.transferProvinceInNum ) AS transferProvinceInNum, sum( IFNULL( t.transferCityInNum, 0 ) + IFNULL( t.transferProvinceInNum, 0 ) ) AS transferCityAndProInNum, sum( d.disposalAmount ) AS disposalAmount, sum( d.zhlyAmount ) AS zhlyAmount, sum( d.czAmount ) AS czAmount, sum( d.zcAmount ) AS zcAmount, sum( d.tmAmount ) AS tmAmount, sum( d.fsAmount ) AS fsAmount, sum( d.qtAmount ) AS qtAmount, CONVERT ( sum( zhlyAmount ) / sum( d.disposalAmount ) * 100, DECIMAL ( 10, 2 ) ) AS zhlyProportion, CONVERT ( sum( tmAmount ) / sum( d.disposalAmount ) * 100, DECIMAL ( 10, 2 ) ) AS tmProportion, CONVERT ( sum( fsAmount ) / sum( d.disposalAmount ) * 100, DECIMAL ( 10, 2 ) ) AS fsProportion, CONVERT ( sum( qtAmount ) / sum( d.disposalAmount ) * 100, DECIMAL ( 10, 2 ) ) AS qtProportion FROM wfcs_disposal_account_day_report d LEFT OUTER JOIN wfcs_transfer_sheet_disposal_day_summary t ON d.cityCode = t.disposalCityCode AND t.tenantId = d.tenantId LEFT OUTER JOIN wfcs_transfer_sheet_produce_day_summary p ON d.cityCode = p.produceCityCode AND d.tenantId = p.tenantId WHERE d.solidWasteType ='ybgygf' AND d.tenantId = '779ca469251e4a639fd39a7ab57e6859' AND d.recordDate >= '2023-06-01 00:00:00.0' AND d.recordDate <= '2023-06-04 00:00:00.0' AND d.cityCode = 'dacef933e39740349e6fb89fac792aae' GROUP BY areaCode ORDER BY produceNumTotal DESC 怎么优化这个sql
这个SQL语句可以进行以下优化:
1. 在wfcs_disposal_account_day_report表中添加索引,包括solidWasteType、tenantId、recordDate和cityCode列,以加快查询速度。
2. 可以考虑使用INNER JOIN代替LEFT OUTER JOIN,因为INNER JOIN在连接两个表的时候比LEFT OUTER JOIN更快。
3. 避免在SELECT语句中使用函数,因为函数会使查询变慢。可以将计算逻辑移至应用程序代码中进行计算。
4. 考虑对查询结果进行缓存,以避免重复查询相同的数据。
5. 可以尝试将GROUP BY子句中的areaCode列替换为更简单的列,以避免在GROUP BY子句中使用太多列。
6. 如果数据量非常大,可以考虑分区表以提高查询性能。
总之,优化SQL查询的方法有很多,需要根据具体情况进行分析和优化。
阅读全文