MySQL心得4--1--数据库查询1(二)

2014-11-24 09:39:24 · 作者: · 浏览: 2
的情况。
例:查询XS表中备注为空的同学的情况。
SELECT 姓名,学号,出生日期,总学分
FROM XS
WHERE 备注<=>NULL;
2).逻辑运算符: and or not
例1: 计算机系女生记录 表中女用0表示
select 姓名,专业名,性别
from xs
where 专业名='计算机' and 性别=0
例2: 查看不是1990年出生的学生的姓名;
select 姓名 fromxs
where 出生日期<'1990-01-01'or 出生日期>'1990-12-31';
或:
select 姓名 fromxs
where not(出生日期>='1990-01-01'and 出生日期<='1990-12-31');
7. 模式匹配:模糊查询 匹配符:% _ www.2cto.com
%:任意多个任意字符 ; _:任意单个字符
like运算符:
like运算符用于指出一个字符串是否与指定的字符串相匹配,其运算对象可以是char、varchar、text、datetime等类型的数据,返回逻辑值TRUE或FALSE。
使用LIKE进行模式匹配时,常使用特殊符号_和%,可进行模糊查询。“%”代表0个或多个字符,“_”代表单个字符。
escape_character:转义字符,escape_character没有默认值,且必须为单个字符。当要匹配的字符串中含有与特殊符号(_和%)相同的字符时,此时应通过该字符前的转义字符指明其为模式串中的一个匹配字符。使用关键字escape可指定转义符。
由于MySQL默认不区分大小写,要区分大小写时需要更换字符集的校对规则。
例1:查询XSCJ数据库XS表中姓“王”的学生学号、姓名及性别。
SELECT 学号,姓名,性别
FROM XS
WHERE 姓名 LIKE '王%';
例2:name中倒数第二个字母是b的姓名
name like '%b_'
8. 如果我们想要查找特殊符号中的一个或全部(_和%),我们必须使用一个转义字符。
例:查询XS表中名字包含下画线的学生学号和姓名。
SELECT 学号,姓名
FROM XS
WHERE 学号 LIKE '%#_%' ESCAPE'#';
说明:定义了“#”为转义字符以后,语句中在“#”后面的“_”就失去了它原来特殊的意义。也可以不用“#”用其他任何符号。
9. regexp运算符(改运算符不是SQL标准的一部分。即也许在MySQL中能用,在sever SQl中却用不了,跨平台性不高,所以慎用) www.2cto.com
regexp运算符用来执行更复杂的字符串比较运算。regexp是正则表达式(regular expression)的缩写。和LIKE运算符一样,regexp运算符有多种功能,但它不是SQL标准的一部分,regexp运算符的一个同义词是rlike。
语法格式:
match_expression [ not ][ regexp | rlike] match_expression
like运算符有两个符号具有特殊的含义:“_”和“%”。而regexp运算符则有更多的符号有特殊的含义,参见下表:
特殊字符
含 义
特殊字符
含 义
^
匹配字符串的开始部分
[abc]
匹配方括号里出现的字符串abc
$
匹配字符串的结束部分
[a-z]
匹配方括号里出现的a~z之间的1个字符
.
匹配任何一个字符(包括回车和新行)
[^a-z]
匹配方括号里出现的不在a~z之间的1个字符
*
匹配星号之前的0个或多个字符任何序列
| www.2cto.com
匹配符号左边或右边出现的字符串
+
匹配加号之前的1个或多个字符的任何序列
[[. .]]
匹配方括号里出现的符号(如空格、换行、括号、句号、冒号、加号、连字符等)
匹配问号之前0个或多个字符
[[:<:]和[[:>:]]
匹配一个单词的开始和结束
{n}
匹配括号前的内容出现n次的序列
[[: :]
匹配方括号里出现的字符中的任意一个字符
()
匹配括号里的内容
10. where子句必须紧跟from子句之后,在where子句中,使用一个条件从from子句的中间结果中选取行。其基本格式为:
where where_definition
其中,where_definition为查询条件。语法格式为:
where_definition:
| { and | or }
| (where_definition)
| not where_definition
其中,predicate为判定运算,结果为true、false或unknown。
:
expression { = | < | <= | > | >= | <=> | <> | !=} expression /*比较运算*/
| match_expression [ NOT ] like match_expression [ ESCAPE'escape_character ' ]
/*like运算符*/
| match_expression [ NOT ][ regexp |rlike] match_expression
/*regexp运算符*/
| expression [ not ] between expression and expression /*指定范围*/
| expression is [ not ] null /*是否空值判断*/
| expression [ not] in ( subquery | expression [,…n] ) /*in子句*/
| expression { = | <| <= | > | >= | <=> | <> | !=} {all | some | any} (subquery )
www.2cto.com
/*比较子查询*/
| exist ( subquery )