编写正确的SQL查询时遇到问题

时间:2014-04-22 09:14:00

标签: sql database derby

我有一个包含以下数据的表数据

No  Data
1   access author basic chapter data database information
2   author basic black data chapter creating overview project scope using code 
3   basic data edition author special any assumed been book contained corporation damages 

我正在尝试编写一个在LIKE子句的帮助下进行模式匹配的查询 这是我的查询

rs=s.executeQuery("SELECT No from datatable where Data LIKE '%author basic data%');

应该检索所有No 1,2和3的记录,但它不返回任何内容

如果我执行此查询

rs=s.executeQuery("SELECT No from datatable where Data LIKE '%author basic%');

,输出为1号和2号,但不是3号 那么我怎么能写出这样一个给我理想输出的查询

提前致谢

2 个答案:

答案 0 :(得分:3)

您查询是否存在类似%author basic data%的完整子字符串。试试这个:

SELECT 
   No 
FROM 
   datatable 
WHERE 
   Data LIKE '%author%' AND 
   Data LIKE '%basic%' AND 
   Data LIKE '%data%'

答案 1 :(得分:1)

看起来你有像

这样的东西
CREATE TABLE datatable('No' INT, 'Data' VARCHAR(...))

通过将大量属性分组到一个列中(VARCHARCLOBBLOB ...),您无法利用SQL的强大功能。

如果您喜欢做类似

的事情
CREATE TABLE <meaningful name>('No' INT, AUTHOR VARCHAR(...), TITLE VARCHAR, ...)

您避免使用LIKE进行所有查询,正如评论者所说,您可以在最常用于访问数据的列上创建索引,以加快访问速度。

其他好处包括在数字数据上使用聚合函数以及与其他表连接。