LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1542|回复: 4

这条检索语句不太懂,帮帮我!

[复制链接]
发表于 2007-7-11 10:09:33 | 显示全部楼层 |阅读模式

  1. testdb=# SELECT * from friend where firstname ~ '[^S]' order by firstname;
  2.     firstname    |       lastname       |      city       | state | age
  3. -----------------+----------------------+-----------------+-------+-----
  4. Cindy           | Anderson            | Denver          | CO    |  23
  5. Dean            | Yeager               | Plymouth        | MA    |  24
  6. Dick             | Gleason              | Ocean City     | NJ    |  19
  7. Mark            | Middleton            | Indianapolis    | IN    |  20
  8. Mike            | Nichols               | Tampa             | FL    |  25
  9. Ned             | Millstone             | Cedar Creek     | MD    |  27
  10. Sam             | Jackson              | Allentown       | PA    |  22
  11. Sandy          | Gleason              | Ocean City      | NJ    |  25
  12. Sandy          | Weber                 | Boston          | MA    |  33
  13. S'endS         | tom                     | DC              | NJ    |  80
  14. S'sS             | tgc                     | LA              | DC    |  30
  15. Victor           | Tabor                 | Williamsport    | PA    |  22

复制代码

~'[^S]'不是指不包含S的记录检索出来吗?, 为什么
S'endS         | tom                     | DC              | NJ    |  80
S'sS             | tgc                     | LA              | DC    |  30
能检索出来?
发表于 2007-7-18 09:23:57 | 显示全部楼层
试试这句话:
Select * FROM friend Where firstname not   REGEXP 'S';

说点题外的,楼主的这种思路不对,不应该使用这种方法来检索数据表,没有一个好的索引,MYSQL将会对全表进行扫描,对于一个庞大的数据表来说这会非常费时、费CPU时间。这也就不符合MYSQL推荐的索引技术了,呵呵,希望楼主讨论一下。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-7-18 17:58:20 | 显示全部楼层
谢谢楼上的,这里我只想知道~'[^S]'的具体意思,不是针对这条检索语句,因为看看书上是这么说的:
Some might think that it returns rows that do not contain an S. Actually, it returns all rows that have any character that is not an S. For example, Sandy contains characters that are not S, such as a, n, d, and y, so that row is returned.
The test would prevent rows containing only S's from being printed.
我理解这段话的意思是,这条语句不打印firstname中包含S的column
但从我测试后发现它把什么record都打印出来了,不管有没有S在firstname字段了
这是书上例子
test=> -- firstname contains a non-S character
test=> SELECT * FROM friend
test-> WHERE firstname ~ '[^S]'
test-> ORDER BY firstname;
firstname | lastname | city | state | age
-----------------+----------------------+-----------------+-------+-----
Dean | Yeager | Plymouth | MA | 24
Dick | Gleason | Ocean City | NJ | 19
Ned | Millstone | Cedar Creek | MD | 27
Sandy | Gleason | Ocean City | NJ | 25
Sandy | Weber | Boston | MA | 33
Victor | Tabor | Williamsport | PA | 22
回复 支持 反对

使用道具 举报

发表于 2007-7-18 18:59:27 | 显示全部楼层
在这里:~是对后面跟着的表达式求反值,[^???]是匹配不包含在中括号内的任何字符。
~最早出现在3.几的MYSQL里,楼主看的什么材料?
推荐楼主用 like 和 REGEXP,比较传统点
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-7-19 06:41:23 | 显示全部楼层
我在看Addison Wesley《PostgreSQL Introduction and Concepts》
不过这本书好像是老了点

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表