Oracle:当前所用版本中,限制in中的参数不能超过 1000个。当超出时会被报错"ORA-01795异常(where in超过1000)的解决"。
MySQL:有人说有限制,有人说没限制。但尽量也是不要太多为好,容易造成全表扫描。
--查询在Orders存在的Persons,即有订购记录的用户
SELECT
P .LastName,
P .FirstName,
o.OrderNo
FROM
Persons P
INNER JOIN Orders o ON P .Id_P = o.Id_P
ORDER BY
P .LastName
INNER JOIN 关键字在表中存在至少一个匹配时返回行。如果 "Persons" 中的行在 "Orders" 中没有匹配,就不会列出这些行。
LEFT JOIN 关键字会从左表 (table_name1) 那里返回所有的行,即使在右表 (table_name2) 中没有匹配的行。
在某些数据库中, LEFT JOIN 称为 LEFT OUTER JOIN。
SELECT
P .LastName,
P .FirstName,
o.OrderNo
FROM
Persons P
LEFT JOIN Orders o ON P .Id_P = o.Id_P
ORDER BY
P .LastName
SELECT
p2.LastName,
p2.FirstName,
o2.OrderNo
FROM
Persons p2
LEFT JOIN (
SELECT
P .LastName,
P .FirstName,
o.OrderNo
FROM
Persons P
INNER JOIN Orders o ON P .Id_P = o.Id_P
) o2
WHERE
o2.OrderNo IS NULL;