select not in 句の動作ではまるなど

select ... not in (a, b...)の結果から値がNULLのものも省かれることを知らなくてはまった。

CREATE DATABASE sqltestdb;

use sqltestdb;

CREATE TABLE team
(
uid BIGINT NOT NULL,
name VARCHAR(1000) NOT NULL,
number VARCHAR(100) NOT NULL,
PRIMARY KEY (uid)
)
;

CREATE TABLE member
(
uid BIGINT NOT NULL,
team_uid BIGINT NOT NULL,
name VARCHAR(1000) NOT NULL,
number VARCHAR(100) NOT NULL,
PRIMARY KEY (uid),
KEY (team_uid)
)
;

ALTER TABLE member ADD CONSTRAINT FK_TEAM_UID
FOREIGN KEY (team_uid) REFERENCES team (uid)
;

insert into team (uid,name,number) values (1,'A','0101');
insert into team (uid,name,number) values (2,'B','0102');
insert into team (uid,name,number) values (3,'C','0201');
insert into team (uid,name,number) values (4,'D','0202');
insert into team (uid,name,number) values (5,'E','0203');

insert into member (uid,team_uid,name,number) values (11,1,'ANN','00101');
insert into member (uid,team_uid,name,number) values (12,2,'BOB','00102');
insert into member (uid,team_uid,name,number) values (13,1,'COO','00103');
insert into member (uid,team_uid,name,number) values (14,3,'DIO','00104');
insert into member (uid,team_uid,name,number) values (15,4,'EDO','00105');

select
*
from team
left outer join member on team.uid = member.team_uid
;

                                                                                                                • +
uid name number uid team_uid name number
                                                                                                                • +
1 A 0101 11 1 ANN 00101
1 A 0101 13 1 COO 00103
2 B 0102 12 2 BOB 00102
3 C 0201 14 3 DIO 00104
4 D 0202 15 4 EDO 00105
5 E 0203 NULL NULL NULL NULL
                                                                                                                • +

6 rows in set (0.00 sec)

select
*
from team
left outer join member on team.uid = member.team_uid
where member.uid in (11,13,15)
;

                                                                                                                • +
uid name number uid team_uid name number
                                                                                                                • +
1 A 0101 11 1 ANN 00101
1 A 0101 13 1 COO 00103
4 D 0202 15 4 EDO 00105
                                                                                                                • +

3 rows in set (0.00 sec)

select
*
from team
left outer join member on team.uid = member.team_uid
where member.uid not in (12,14)
;

                                                                                                                • +
uid name number uid team_uid name number
                                                                                                                • +
1 A 0101 11 1 ANN 00101
1 A 0101 13 1 COO 00103
4 D 0202 15 4 EDO 00105
                                                                                                                • +

3 rows in set (0.00 sec)

参考:
http://www.geocities.jp/mickindex/database/db_3vl.html