Mysql入门系列:MySQL教程(7)
MySQL允许您一次从多个表中选择列。我们将这个内容留到“从多个表中检索信息”小节去介绍。
1. 指定检索条件
为了限制SELECT 语句检索出来的记录集,可使用WHERE 子句,它给出选择行的条件。可通过查找满足各种条件的列值来选择行。
可查找数字值:
也可以查找串值。(注意,一般串的比较是不区分大小写的。)
可以查找日期值:
可搜索组合值:
WHERE 子句中的表达式可使用表1-1中的算术运算符、表1-2 的比较运算符和表1-3
的逻辑运算符。还可以使用圆括号将一个表达式分成几个部分。可使用常量、表列和函数来完成运算。在本教程的查询中,我们有时使用几个MySQL函数,但是
MySQL的函数远不止这里
给出的这些。请参阅附录C,那里给出了所有MySQL函数的清单。
在用表达式表示一个需要逻辑运算的查询时,要注意别混淆逻辑与运算符与我们平常使用的“与”的含义。假如希望查找“出生在Vi rginia 的总统与出生在Maryland 的总统”。应该注意怎样表示“与”的关系,能写成如下的查询吗?
错了,因为这个查询的意思是“选择既出生在Vi rginia 又出生在M a r y l a n d的总统”,不可能有同时出生在两个地点的总统,因此这个查询无意义。在英语中,可以用“a n d”表示这种选择,但在SQL 中,应该用OR 来连接两个条件,如下所示:
这有时是可以觉察到的,不仅仅是在编写自己的查询时可以觉察到,而且在为他人编写查询时也可以知道。最好是在他人描述想要检索什么时仔细听,但不一
定使用相同的逻辑运算符将他人的描述转录成SQL 语句。对刚才所举的例子,正确的英语等价描述为“选择出生在Vi rginia
或者出生在Maryland 的总统。”
2. NULL 值
NULL 值是特殊的;因为它代表“无值”。不可能以评估两个已知值的相同方式来将它与已知值进行评估。如果试图与通常的算术比较运算符一道使用NULL,其结果是未定义的:
为了进行NULL 值的搜索,必须采用特殊的语法。不能用= 或!= 来测试等于NULL 或不等于NULL,取而代之的是使用IS NULL 或IS NOT NULL 来测试。例如,因为我们将健在总统的死亡日期表示为NULL,那么可按如下语句查找健在的总统:
MySQL3.23 及以后的版本具有一个特殊的MySQL专有的比较运算符“ < = >”,即使是NULL 与NULL 的比较,它也是可行的。用这个比较运算符,可将前面的两个查询重写为:
3. 对查询结果进行排序
有时我们注意到,在一个表装入初始数据后,对其发布一条SELECT * FROM
tbl_name查询,检索出的行与这些行被插入的顺序是相同的。但不要认为这种情况是有规律的。如果在初始装入表后进行了行的删除和插入,就会发现服务
器返回表的行次序被改变了。(删除记录在表中留下了未使用的“空位”,MySQL在以后插入新记录时将会试图对其填补。)缺省时,如果选择了行,服务器对
返回行的次序不作任何保证。为了对行进行排序,可
使用ORDER BY 子句:
在ORDER BY 子句中,可在列名之后利用ASC 或DESC 关键字指定排序是按该列值的升序或降序进行的。例如,为了按倒序(降序)名排列总统名,可如下使用DESC:
如果在ORDER BY 子句中,对某个列名既不指定ASC 又不指定DESC,则缺省的次序为升序。在对可能包含NULL 值的列进行排序时,如果是升序排序, NULL 值出现在最前面,如果是按降序排序,NULL 值出现在最后。
查询结果可在多个列上进行排序,而每个列的升序或降序可以互相独立。下面的查询从president 表中检索行,并按出生的州降序、在每个州中再按姓氏的升序对检索结果进行排序:
阅读(707) | 评论(0) | 转发(0) |