我有两个包含以下字段的数据库。
表1(客户)
customer_id
age
name
salary
zip
表2(zip)
zip
state
city
我需要从两个年龄都在25岁左右的表中获取数据。为此,我需要编写最佳优化查询。因为我写了以下查询。
SELECT a.name,a.salary,b.city,b.state From customer as a , zip as b
LEFT INNER JOIN ON a.zip = b.zip
WHERE age >25
我的问题是我可以在没有连接操作的情况下为此目的编写此查询。
SELECT a.name,a.salary,b.city,b.state From customer as a , zip as b
WHERE age >25 and a.zip = b.zip
为此目的最好的查询是什么。如果我在另一个select语句里面写select语句,这样好吗?
答案 0 :(得分:0)
回答原始问题下面的评论中提出的问题。从MySQL的优化器的角度来看,以下查询完全相同......
SELECT a.name
, a.salary
, b.city
, b.state
FROM customer a, zip b
WHERE a.zip = b.zip
AND age > 25;
SELECT a.name
, a.salary
, b.city
, b.state
FROM customer a
JOIN zip b
ON a.zip = b.zip
WHERE age > 25;
第二个查询更容易阅读,更灵活(在某种意义上我们可以更容易地以各种方式改变它) - 当然,没有人会如此愚蠢到存储age
!
答案 1 :(得分:-1)
联接更整洁/更容易阅读。对于您的示例中的mysql(可能还有其他平台??),您可以使用USING(zip),但是我没有在from部分中使用多个表,然后也使用连接。我可能已经写了你的查询:
SELECT a.name,a.salary,b.city,b.state
FROM customer a
LEFT INNER JOIN zip b USING(zip)
WHERE age >25