SELECT BookName,Price,pDate FROM bookinfo WHERE BookName LIKE '%PHP%' OR BookName LIKE '%Oracle%' OR BookName LIKE '%Android%';
这段 SQL 语句的作用是:从 bookinfo 表中查询出书名包含 “PHP”、“Oracle” 或 “Android” 中任意一个关键词的所有图书,并返回书名、价格和出版日期。
下面拆解讲解每个部分:
1. SELECT BookName, Price, pDate
表示查询结果只返回这 3 个字段:
BookName:书名Price:价格pDate:出版日期(推测是publish date)
2. FROM bookinfo
数据来源是
bookinfo表(通常用于存储图书信息)
3. WHERE BookName LIKE '%PHP%' OR BookName LIKE '%Oracle%' OR BookName LIKE '%Android%'
LIKE:模糊匹配%:通配符,代表 任意多个字符(包括0个)'%PHP%'表示:只要书名中某处包含PHP即可,比如"PHP入门"、"深入PHP"、"PHP高级编程"都能匹配。OR:只要满足 其中任意一个 条件即可,不要求同时包含多个关键词。
实际查询效果举例
假设 bookinfo 表中有这些数据:
| BookName | Price | pDate |
|---|---|---|
| PHP从入门到放弃 | 59 | 2023-01-01 |
| Oracle性能优化 | 89 | 2022-05-10 |
| Android开发艺术探索 | 79 | 2021-12-01 |
| 零基础学Python | 49 | 2024-03-01 |
| 深入PHP + Oracle | 99 | 2023-08-15 |
查询结果会返回:第1、2、3、5行(第4行没有关键词,不返回)
注意事项(常见问题)
大小写敏感:取决于数据库的排序规则(collation)。
MySQL 默认不区分大小写(LIKE '%php%'也能匹配PHP),SQL Server 或 Oracle 默认可能区分。性能问题:
LIKE '%keyword%'以%开头 无法使用索引,数据量大时会全表扫描,速度较慢。多个关键词:目前是
OR关系,如果希望书名同时包含 PHP 和 Oracle,应改为AND。
如果想更简洁(部分数据库支持)
某些数据库(如 PostgreSQL、MySQL 8+、SQL Server)可用正则表达式或 IN 不适用(IN 不支持 %),但可用 REGEXP:
sql
SELECT BookName, Price, pDateFROM bookinfoWHERE BookName REGEXP 'PHP|Oracle|Android';
效果相同,更短。