msyql SELECT 和 WHERE 教程

msyql SELECT 和 WHERE 教程
SQL 语句中的 select_expression 或 where_definition 可由任何使用了下面所描述函数的表达式组成。

包含 NULL 的表达式总是得出一个 NULL 值结果,除非表达式中的操作和函数在文档中有另外的说明。

注意:在一个函数名和跟随它的括号之间必须不存在空格。这有助于 MySQL 语法分析程序区分函数调用和对恰巧与函数同名表或列的引用。然而,参数左右两边的空格却是允许的。

你可以强制 MySQL 接受函数名后存在空格的形式,这需要通过以 --ansi 选项启动 mysqld,或在 mysql_connect() 中使用 CLIENT_IGNORE_SPACE,但是,在这种情况下,所有的函数名均将成为保留字。查看章节 1.8.2 以 ANSI 模式运行 MySQL.

为了简洁,从 mysql 程序输出的例子以缩写的形式显示。因此:

mysql> SELECT MOD(29,9);
1 rows in set (0.00 sec)

+-----------+
| mod(29,9) |
+-----------+
|         2 |
+-----------+
将被显示为这样:

mysql> SELECT MOD(29,9);
        -> 2
6.3.1 无类型的特殊运算符和函数
6.3.1.1 圆括号
( ... )

括号,使用它来强制一个表达式的计算顺序。

mysql> SELECT 1+2*3;
        -> 7
mysql> SELECT (1+2)*3;
        -> 9
6.3.1.2 比较运算符
比较运算符的结果是 1 (TRUE)、0 (FALSE) 或 NULL。这些函数可工作于数字和字符串上。根据需要,字符串将会自动地被转换到数字,以及数字被转换成字符串(比如在 Perl 中)。

MySQL 使用下列规则进行比较:

如果一个或两个参数是 NULL,比较的结果是 NULL,除了 <=> 运算符。
如果在一个比较操作中两个参数均是字符串,他们将作为字符串被比较。
如果两个参数均是整数,他们作为整数被比较。
十六进制值如果不与一个数字进行比较,那么它将当作一个二进制字符串。
如果参数之一是一个 TIMESTAMP 或 DATETIME 列,而另一参数是一个常数,在比较执行之前,这个常数被转换为一个时间戳。这样做是为了对 ODBC 更友好。
在所有其它情况下,参数作为浮点(real)数字被比较。
缺省地,字符串使用当前字符集以忽略字母大小写的方式进行比较(缺省的字符集为 ISO-8859-1 Latin1,它对英语处理得很出色)。

下面的例子演示了对于比较操作字符串到数字的转换:

mysql> SELECT 1 > '6x';
         -> 0
mysql> SELECT 7 > '6x';
         -> 1
mysql> SELECT 0 > 'x6';
         -> 0
mysql> SELECT 0 = 'x6';
         -> 1
=
等于:
mysql> SELECT 1 = 0;
        -> 0
mysql> SELECT '0' = 0;
        -> 1
mysql> SELECT '0.0' = 0;
        -> 1
mysql> SELECT '0.01' = 0;
        -> 0
mysql> SELECT '.01' = 0.01;
        -> 1
<>
!=
不等于:
mysql> SELECT '.01' <> '0.01';
        -> 1
mysql> SELECT .01 <> '0.01';
        -> 0
mysql> SELECT 'zapp' <> 'zappp';
        -> 1
<=
小于或等于:
mysql> SELECT 0.1 <= 2;
        -> 1
<
小于:
mysql> SELECT 2 < 2;
        -> 0
>=
大于或等于:
mysql> SELECT 2 >= 2;
        -> 1
>
大于:
mysql> SELECT 2 > 2;
        -> 0
<=>
NULL 值安全等于:
mysql> SELECT 1 <=> 1, NULL <=> NULL, 1 <=> NULL;
        -> 1 1 0
IS NULL
IS NOT NULL
测试一个值是或不是 NULL:
mysql> SELECT 1 IS NULL, 0 IS NULL, NULL IS NULL;
        -> 0 0 1
mysql> SELECT 1 IS NOT NULL, 0 IS NOT NULL, NULL IS NOT NULL;
        -> 1 1 0
为了能够与其它程序更好的工作,在使用 IS NULL 是 MySQL 支持下列额外选择性:
通过它,你可以找到最后插入的记录行:
SELECT * FROM tbl_name WHERE auto_col IS NULL
这个操作可以通过设置 SQL_AUTO_IS_NULL=0 来禁止。查看章节 5.5.6 SET 句法.
对于 NOT NULL 的 DATE 和 DATETIME 列,可以通过使用下列语句找到特殊的值 0000-00-00:
SELECT * FROM tbl_name WHERE date_column IS NULL
这需要通过某些 ODBC 应用程序才能工作(因为 ODBC 不支持一个 0000-00-00 日期)

expr BETWEEN min AND max
如果 expr 大于或等于 min ,并且 expr 小于或等于 max,BETWEEN 返回 1,否则返回 0。它等价于表达式 (min <= expr AND expr <= max) ,只要所有的参数均是相同的类型。 否则类型会依照上面的规则发生转换,但是应用于所有三个参数。注意,在 MySQL 4.0.5 之前,参数被转换到 expr 的类型。
mysql> SELECT 1 BETWEEN 2 AND 3;
        -> 0
mysql> SELECT 'b' BETWEEN 'a' AND 'c';
        -> 1
mysql> SELECT 2 BETWEEN 2 AND '3';
        -> 1
mysql> SELECT 2 BETWEEN 2 AND 'x-3';
        -> 0
expr NOT BETWEEN min AND max
等同于 NOT (expr BETWEEN min AND max)。

expr IN (value,...)
如果 expr 是 IN 列表中的作一值,它将返回 1,否则返回 0。如果所有的值均是常数,那么所有的值被依照 expr 的类型进行计算和排序。然后以一个二进制搜索方式完成项目的搜索。这就意味着,如果 IN 列表完全由常数组成,IN 将是非常快的。如果 expr 是一个字母大小写敏感的字符串表达式,字符串比较将以大小写敏感方式执行:
mysql> SELECT 2 IN (0,3,5,'wefwf');
        -> 0
mysql> SELECT 'wefwf' IN (0,3,5,'wefwf');
        -> 1
从 MySQL 4.1 开始(符合 SQL-99 标准),如果左手边的表达式是 NULL,或者在列表中没有发现相匹配的值并且列表中的一个表达式是 NULL,IN 均返回 NULL。

expr NOT IN (value,...)
等同于 NOT (expr IN (value,...))。

ISNULL(expr)
如果 expr 是 NULL,ISNULL() 返回 1,否则返回 0:
mysql> SELECT ISNULL(1+1);
        -> 0
mysql> SELECT ISNULL(1/0);
        -> 1
注意,对 NULL 值使用 = 进行比较总是为 false !
COALESCE(list)
返回列表中第一个非 NULL 的元素:
mysql> SELECT COALESCE(NULL,1);
        -> 1
mysql> SELECT COALESCE(NULL,NULL,NULL);
        -> NULL
INTERVAL(N,N1,N2,N3,...)
Returns 如果 N < N1 返回 0,如果 N < N2 返回 1,等等。所有的参数均被当作整数。为了函数能正确地工作,它要求 N1 < N2 < N3 < ... < Nn。这是因为它使用的是一个二进制的搜索(非常地快):
mysql> SELECT INTERVAL(23, 1, 15, 17, 30, 44, 200);
        -> 3
mysql> SELECT INTERVAL(10, 1, 10, 100, 1000);
        -> 2
mysql> SELECT INTERVAL(22, 23, 30, 44, 200);
        -> 0
如果以任何一个标准运算符(=, <>..., 但除了 LIKE)对一个忽略大小写的字符串进行比较,尾部的空白空间(空格、TAB 和换行)均被忽略。

 

时间: 2024-12-03 04:33:55

msyql SELECT 和 WHERE 教程的相关文章

sql教程:SQL SELECT DISTINCT 实例教程

sql教程:SQL SELECT DISTINCT 实例教程 本章将解释选择离散发言. 在SQL选择不同的声明 在一个表中,一些列可能包含重复的值.这不是一个问题,然而,有时你会希望只列出不同(不同的)值在桌子上. 的独特的关键字可以用来只返回独特的(不同)的价值.  SQL SELECT DISTINCT 语法. SELECT DISTINCT column_name(s) FROM table_name 来看一个distinct不重复记录的实例吧. _Id LastName FirstNam

sql初级教程:select top 使用教程

sql初级教程:select top 使用教程 好了下面我们来看看在select top 的语法吧. 如mssql :select top 10 from table_name 在mysql:select * from table_name limit 0,10 SELECT TOP number|percent column_name(s) FROM table_name 下面我们来看个实例教程. _Id LastName FirstName Address City 1 Hansen Ola

HTML DOM Select 对象实例教程

选择对象 选择对象是一个下拉列表中的HTML表单. 对于每一个个体的HTML <select>标记的一种形式,一个选择对象的创建. 您可以访问对象的选择搜索的内容[ ]数组的形式,或通过使用document.getElementById ( ) . IE浏览器: Internet Explorer中,女:火狐,氧:歌剧院, W3C的:万维网联盟(因特网标准) . 选择对象的集合 集合描述即F ö W3C的 选项[ ]返回一个数组的所有选项在下拉列表中4 1 9是   Property Desc

jquery获取下拉框值详解

我们利用js获取select值是比较麻烦的,下面我们来看看利用jquery来获取select值的代码吧,下面我们来看分二种获取方法. <select id="ddltype"> <option value="">请选择</option> <option value="1">安徽省</option> -- </select> <select id="ddltyp

Mysql主从复制(master-slave)实际操作案例_Mysql

在这一章节里, 我们来了解下如何在 Mysql 中进行用户授权及主从复制   这里先来了解下 Mysql 主从复制的优点:   1. 如果主服务器出现问题, 可以快速切换到从服务器提供的服务 2. 可以在从服务器上执行查询操作, 降低主服务器的访问压力 3. 可以在从服务器上执行备份, 以避免备份期间影响主服务器的服务 注意一般只有更新不频繁的数据或者对实时性要求不高的数据可以通过从服务器查询, 实时性要求高的数据仍然需要从主数据库获得   在这里我们首先得完成用户授权, 目的是为了给从服务器有

mysql中常用操作命令 (1/4)

.linux下启动mysql教程的命令:    mysqladmin start /ect/init.d/mysql start (前面为mysql的安装路径)   2.linux下重启mysql的命令:    mysqladmin restart /ect/init.d/mysql restart (前面为mysql的安装路径) 3.linux下关闭mysql的命令:    mysqladmin shutdown    /ect/init.d/mysql   shutdown (前面为mysq

mysql 增加新用户与修改密码方法

mysql教程 增加新用户与修改密码方法 格式:mysqladmin -u用户名 -p旧密码 password 新密码 1.给root加个密码ab12.首先在dos下进入目录mysqlbin,然后键入以下命令: mysqladmin -uroot -password ab12 注:因为开始时root没有密码,所以-p旧密码一项就可以省略了. 2.再将root的密码改为djg345. mysqladmin -uroot -pab12 password djg345 七.增加新用户.(注意:和上面不

兼容ff,ie 复制内容js代码

 代码如下 复制代码 <script language="网页特效"> function doCopy(id){  var testCode=document.getElementById(id).innerText;  if(copy2Clipboard(testCode)!=false){  if (document.all){  var rng = document.body.createTextRange();  rng.moveToElementText(docu

sql 数据表存在就删除不存在就创建

sql 数据表存在就删除不存在就创建 我们常用的mssql server 存储过程中: set @sign=0; select 1 into @sign from information_schema where table_name='aa' and table_schema='表aa所在数据库教程名称'; if @sign=0 then   create table aa ..... end if; 命令行: create table if not exists aa( 表定义 );   O