|
错了,因为这个查询的意思是“选择既出生在Vi rginia 又出生在M a r y l a n d的总统”,不可能有同时出生在两个地点的总统,因此这个查询无意义。在英语中,可以用“a n d”表示这种选择,但在SQL 中,应该用OR 来连接两个条件,如下所示:

 这有时是可以觉察到的,不仅仅是在编写自己的查询时可以觉察到,而且在为他人编写查询时也可以知道。最好是在他人描述想要检索什么时仔细听,但不一定使用相同的逻辑运算符将他人的描述转录成SQL 语句。对刚才所举的例子,正确的英语等价描述为“选择出生在Vi rginia 或者出生在Maryland 的总统。” 2. NULL 值 NULL 值是特殊的;因为它代表“无值”。不可能以评估两个已知值的相同方式来将它与已知值进行评估。如果试图与通常的算术比较运算符一道使用N U L L,其结果是未定义的:
 为了进行NULL 值的搜索,必须采用特殊的语法。不能用= 或!= 来测试等于NULL 或不等于N U L L,取而代之的是使用IS NULL 或IS NOT NULL 来测试。例如,因为我们将健在总统的死亡日期表示为N U L L,那么可按如下语句查找健在的总统:
 MySQL3.23 及以后的版本具有一个特殊的MySQL 专有的比较运算符“ < = >”,即使是NULL 与NULL 的比较,它也是可行的。用这个比较运算符,可将前面的两个查询重写为:
 3. 对查询结果进行排序 有时我们注意到,在一个表装入初始数据后,对其发布一条SELECT * FROM tbl_name查询,检索出的行与这些行被插入的顺序是相同的。但不要认为这种情况是有规律的。如果在初始装入表后进行了行的删除和插入,就会发现服务器返回表的行次序被改变了。(删除记录在表中留下了未使用的“空位”,MySQL 在以后插入新记录时将会试图对其填补。)缺省时,如果选择了行,服务器对返回行的次序不作任何保证。为了对行进行排序,可 使用ORDER BY 子句:
 在ORDER BY 子句中,可在列名之后利用ASC 或DESC 关键字指定排序是按该列值的升序或降序进行的。例如,为了按倒序(降序)名排列总统名,可如下使用D E S C:
 如果在ORDER BY 子句中,对某个列名既不指定ASC 又不指定D E S C,则缺省的次序为升序。在对可能包含NULL 值的列进行排序时,如果是升序排序, NULL 值出现在最前面,如果是按降序排序,NULL 值出现在最后。 查询结果可在多个列上进行排序,而每个列的升序或降序可以互相独立。下面的查询从president 表中检索行,并按出生的州降序、在每个州中再按姓氏的升序对检索结果进行排序:
 4. 限制查询结果如果一个查询返回许多行,但您只想看其中的几行,则可以利用LIMIT 子句,特别是与ORDER BY 子句结合时更是如此。MySQL 允许限制一个查询的输出为前n 行。下面的查询选择了5 位出生日期最早的总统:
 如果利用ORDER BY birth DESC 按降序排序,将得到5 位最晚出生的总统。LIMIT 也可以从查询结果中取出中间部分。为了做到这一点,必须指定两个值。第一个值为结果中希望看到的第一个记录(第一个结果记录的编号为0 而不是1)。第二个值为希望看到的记录个数。下面的查询类似于前面那个查询,但只显示从第11 行开始的5 个记录:
 自MySQL 3.23.2 以来,可按照一个公式来排序查询结果。例如,利用ORDER BYRAND( ) 与LIMIT 结合,从president 表中随机抽取一个记录:

 5. 计算并命名输出的列值 前面的多数查询通过从表中检索值已经产生了输出结果。MySQL 还允许作为一个公式的结果来计算输出列的值。表达式可以简单也可以复杂。下面的查询求一个简单表达式的值(常量)以及一个涉及几个算术运算符和两个函数调用的较复杂的表达式的值:
 此查询把名和姓连接起来,中间间隔一个空格,将总统名形成一个单一字符串,而且将出生城市和州连接在一起,中间隔一个逗号,形成出生地。 在利用表达式来计算列值时,此表达式被用作列标题。如果表达式很长(如前面的一些查询样例中那样),那么可能会出现一个很宽的列。为了处理这种情况,此列可利用AS name结构来重新命名标题。这样的名称为列别名。用这种方法可使上面的输出更有意义,如下所示:


上一页 [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] ... 下一页 >> |