SQLiteリファレンス
当サイトはSQLiteに関するSQL文やコマンドのリファレンスサイトです。
HOME > Eから始まるSQL文・コマンド

except句

片方のテーブルに無いレコードを抽出するSQL文

片方のテーブルに無いレコードを抽出する方法

片方のテーブルに無いレコードを抽出するには、except句を使用します。

except句の書き方

select カラム名 from テーブル名 except select・・・。

左側のテーブルを基準にして、右側のテーブルに無いレコードが抽出されます。重複するデータがあった場合は削除されます。

except句の使い方

PHPのPDOを使用した例

SQL
<?php
$pdo = new PDO("sqlite:./test.sqlite3");
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE,PDO::FETCH_ASSOC);
$pdo->setAttribute(PDO::ATTR_TIMEOUT,5);

$pdo->exec("create table a ( id integer , name text )");
$pdo->exec("create table b ( id integer , name text )");
$pdo->exec("insert into a values ( 1 , 'suzuki' ) , ( 2, 'satou' ) , ( 2,'satou' )");
$pdo->exec("insert into b values ( 3 , 'sakuma'  ) , ( 1, 'suzuki') , ( 2,'satou')");

$stmt = $pdo->query("select * from b except select * from a");
$result = $stmt->fetchAll();

echo "<pre>";
print_r($result);
echo "</pre>";
?>

SQLiteのGUIツールを使用した例

SQL
C:sq>sqlite3 test.sqlite3
sqlite> create table a ( id integer , name text );
sqlite> create table b ( id integer , name text );
sqlite> insert into a values ( 1 , 'suzuki' ) , ( 2, 'satou' ) , ( 2,'satou' );
sqlite> insert into b values ( 3 , 'sakuma'  ) , ( 1, 'suzuki') , ( 2,'satou');
sqlite> select * from b except select * from a;
id|name
3|sakuma