項目23 条件と一致しないレコードや欠けているレコードを特定する
NOT INとサブクエリを使う方法は分かりやすいが、効率があまりよくない
select p.ProductNumber, p.ProductName from Products as p where p.ProductNumber not in (select ProductNumber from Order_Details);
Order_Detailsテーブル全体のすべてのレコードにアクセスし、重複している値を振るい落とした上で、ProductsテーブルのProductNumber列の各値をこのリストと照合しなければならない (Kindle版 p.202)
紹介される方法は2つ
EXISTS演算子(NOT EXISTSとして使う)
この演算子はサブクエリが少なくとも1行のデータを返すかどうかをチェックする。(Kindle版 p.202)
select p.ProductNumber, p.ProductName from Products as p where not exists (select * from Order_Details as od where od.ProductNumber = p.ProductNumber);
挫折結合(LEFT JOIN + JOINしたテーブルでnullのものだけselect)
select p.ProductNumber, p.ProductName from Products as p left join Order_Details od on p.ProductNumber = od.ProductNumber where od.ProductNumber is null;