嗨,我正在为我的软件工程课做一个关于psql数据库的家庭作业,我必须做的一个问题是"找到所有包含Python的书"所以我尝试使用WHERE语法,但它会给我0行没有标题中有Python单词的书,但books表中显然有,有人能帮我吗?
booktown=# SELECT books.title FROM books WHERE title NOT IN ('Python');
title
-----------------------------
The Shining
Dune
2001: A Space Odyssey
The Cat in the Hat
Bartholomew and the Oobleck
Franklin in the Dark
Goodnight Moon
Little Women
The Velveteen Rabbit
Dynamic Anatomy
The Tell-Tale Heart
Programming Python
Learning Python
Perl Cookbook
Practical PostgreSQL
(15 rows)
booktown=# SELECT books.title FROM books WHERE title IN ('Python');
title
-------
(0 rows)
booktown=# SELECT books.title FROM books WHERE title LIKE 'Python';
title
-------
(0 rows)
booktown=# SELECT books.title FROM books WHERE title LIKE 'Python';
您应该使用Postgresql的LIKE
运算符进行模式匹配。您查询的方式将进行精确匹配。请参阅上的示例https://www.postgresqltutorial.com/postgresql-like/
title IN ('Python')
查找其标题在列表中的所有书籍。该列表仅包含一个条目"Python"。没有一本书的标题是"Python"。
title LIKE 'Python'
查找所有标题与"Python"模式匹配的书籍。由于模式中没有通配符(即%
、_
(,因此会查找完全匹配的字符。再说一遍,没有一本书叫"Python"。
您希望所有标题都与模式"相匹配;零个或多个我们不关心的字符,然后是Python这个词,然后是零个或更多我们不感兴趣的字符"。
那就是title LIKE '%Python%'
。