首先有这样三张表:books表、authors表和authorbook
book表:
| BookID | Book | Copyright |
| 12786 | Java | 1934 |
| 13331 | MySQL | 1919 |
| 14356 | PHP | 1966 |
| 15729 | PERL | 1932 |
| 16284 | Oracle | 1996 |
| 17695 | Pl/SQL | 1980 |
| 19264 | 1992 | |
| 19354 | www.java2s.com | 1993 |
authors表
| AuthID | AuthFN | AuthMN | AuthLN |
| 1006 | H | S. | T |
| 1007 | J | C | O |
| 1008 | B | E | |
| 1009 | R | M | R |
| 1010 | J | K | T |
| 1011 | J | G. | N |
| 1012 | A | P | |
| 1013 | A | W | |
| 1014 | N | A |
authorbook表
| AuthID | BookID |
| 1009 | 12786 |
| 1006 | 14356 |
| 1008 | 15729 |
| 1011 | 15729 |
| 1014 | 16284 |
| 1010 | 17695 |
| 1012 | 19264 |
| 1012 | 19354 |
现在我们开始in和not in子查询实例
1.获取book表中bookid为12786或14356或17695或19354的数据:
select *from book where bookid in(12786,14356,17695,19354)
结果为:
| BookID | Book | Copyright |
| 12786 | Java | 1934 |
| 14356 | PHP | 1966 |
| 17695 | Pl/SQL | 1980 |
| 19354 | www.java2s.com | 1993 |
这是一个非常简单的mysql in实例,上面的SQL语句其实也可以用or代替:
select *from book where bookid=12786 or bookid=14356 or bookid=17695 or bookid=19354
2.获取book表中bookid字段的值在authorbook表中存在的书本信息:
select *from book where bookid in(select distinct BookID from authorbook)
结果为:
| BookID | Book | Copyright |
| 12786 | Java | 1934 |
| 14356 | PHP | 1966 |
| 15729 | PERL | 1932 |
| 16284 | Oracle | 1996 |
| 17695 | Pl/SQL | 1980 |
| 19264 | 1992 | |
| 19354 | www.java2s.com | 1993 |
因为bookid为13331的书本不在authorbook表中,所以该书本信息不在查询结果集中。
3.获取book表中bookid字段的值不在authorbook表中的书本信息:
select *from book where bookid not in(select distinct BookID from authorbook)
结果为:
| BookID | Book | Copyright |
| 13331 | MySQL | 1919 |
4.再来一个复杂一点的:
SELECT Book , Copyright
FROM Books
WHERE Copyright NOT IN
(
SELECT b.copyright
FROM Books AS b JOIN AuthorBook AS ab USING (BookID)
JOIN Authors AS a USING (AuthID)
WHERE AuthLN=\'MySQL\'
)
ORDER BY Book
/* http://www.manongjc.com/article/1404.html */
运行结果:
| BookID | Book | Copyright |
| 12786 | Java | 1934 |
| 19264 | 1992 | |
| 13331 | MySQL | 1919 |
| 16284 | Oracle | 1996 |
| 15729 | PERL | 1932 |
| 14356 | PHP | 1966 |
| 17695 | Pl/SQL | 1980 |
| 19354 | www.java2s.com | 1993 |
5. not in 其实相当于<> ALL, 因此在第三个实例中,SQL代码也可以这样写:
select *from book where bookid <> all(select distinct BookID from authorbook) 继续阅读与本文标签相同的文章
上一篇 :
VC的心理什么样?
下一篇 :
从韩国的大数据之殇,看技术的产业价值与功能价值
-
华为高管彭博:正与美国公司就授权5G平台展开初期谈判
2026-05-14栏目: 教程
-
微信曝光新功能,超好用,再也不用担心被刷屏
2026-05-14栏目: 教程
-
Verizon为美国多座大型体育场馆提供了5G网络覆盖
2026-05-14栏目: 教程
-
别人加薪你加班,偷偷告诉你 6 个Word小技巧,比加薪都管用!
2026-05-14栏目: 教程
-
华为轮值董事长郭平:虚拟技术创造现实价值
2026-05-14栏目: 教程
