Mysql学习笔记006

这里并没有前情回顾

NULL值操作

Null是一个特殊的值,它表示着“没有值”或者“未知值”,记住它是一个与众不同的值。

为了测试NULL,不能用算数比较操作符 不信你试试

操作如下:

SELECT 1 = NULL, 1 <> NULL, 1 < NULL, 1 > NULL;

mysql> SELECT 1 = NULL, 1 <> NULL, 1 < NULL, 1 > NULL;
+----------+-----------+----------+----------+
| 1 = NULL | 1 <> NULL | 1 < NULL | 1 > NULL |
+----------+-----------+----------+----------+
| NULL | NULL | NULL | NULL |
+----------+-----------+----------+----------+
1 row in set (0.00 sec)

mysql>

都说了不能了,你还试。

那应该用什么办法试试呢?(搞事情)

远古时代的上神在升天之前曾经遗留下这两个操作符在人间供凡人们使用,他们分别是:

IS NULL 和 IS NOT NULL 这两个操作符。

操作如下:

SELECT 1 IS NULL, 1 IS NOT NULL;

mysql> SELECT 1 IS NULL, 1 IS NOT NULL;
+-----------+---------------+
| 1 IS NULL | 1 IS NOT NULL |
+-----------+---------------+
| 0 | 1 |
+-----------+---------------+
1 row in set (0.08 sec)

mysql>

温馨提示(书上又瞎操心了):在GROUP BY 中两个NULL值视为相同(我还没讲GROUP BY呢)。

执行ORDER BY时, 如果运行 ORDER BY ... ASC (升序), 则NULL值出现在最前面,若运行ORDER BY ...DESC ,则NULL值出现在最后面。

mysql> SELECT 0 IS NULL, 0 IS NOT NULL, ‘‘ IS NULL, ‘‘ IS NOT NULL;
+-----------+---------------+------------+----------------+
| 0 IS NULL | 0 IS NOT NULL | ‘‘ IS NULL | ‘‘ IS NOT NULL |
+-----------+---------------+------------+----------------+
| 0 | 1 | 0 | 1 |
+-----------+---------------+------------+----------------+
1 row in set (0.00 sec)

mysql>

模式匹配

注意:使用SQL模式匹配的时候,不能使用= 和 != 而应该使用 LIKE 或 NOT LIKE 比较操作符。还有忽略大小写。

SQL模式匹配允许你使用 "_" 匹配任何单个字符,而 "%" 匹配任意数目字符(包括零字符)。

举个栗子:我想找以‘b‘开头的名字。

操作如下:

SELECT * FROM pet WHERE name LIKE ‘b%‘;

mysql> SELECT * FROM pet
-> WHERE name LIKE ‘b%‘;
+--------+--------+---------+------+------------+------------+
| name | owner | species | sex | birth | death |
+--------+--------+---------+------+------------+------------+
| Buffy | Harold | dog | f | 1989-05-13 | NULL |
| Bowser | Diane | dog | m | 1989-08-31 | 1995-07-29 |
+--------+--------+---------+------+------------+------------+
2 rows in set (0.11 sec)

mysql>

再举个栗子:我想找出以‘fy‘结尾的名字。

操作如下:

SELECT * FROM pet WHERE name LIKE ‘%fy‘;

mysql> SELECT * FROM pet
-> WHERE name LIKE ‘%fy‘;
+--------+--------+---------+------+------------+-------+
| name | owner | species | sex | birth | death |
+--------+--------+---------+------+------------+-------+
| Fluffy | Harold | cat | f | 1993-02-04 | NULL |
| Buffy | Harold | dog | f | 1989-05-13 | NULL |
+--------+--------+---------+------+------------+-------+
2 rows in set (0.00 sec)

mysql>

接着举个栗子:我想找出名字中包含‘w‘的。(动态查找(学长告诉我的))

操作如下:

SELECT * FROM pet WHERE name LIKE ‘%w%‘;

mysql> SELECT * FROM pet
-> WHERE name LIKE ‘%w%‘;
+----------+-------+---------+------+------------+------------+
| name | owner | species | sex | birth | death |
+----------+-------+---------+------+------------+------------+
| Whistler | Gwen | bird | NULL | 1997-12-09 | NULL |
| Claws | Gwen | cat | m | 1994-03-17 | NULL |
| Bowser | Diane | dog | m | 1989-08-31 | 1995-07-29 |
+----------+-------+---------+------+------------+------------+
3 rows in set (0.00 sec)

mysql>

还是栗子:某个脑残客户要找五个字的名字。这时候机智的你(??????)??就应该用‘_‘来匹配了

操作如下:

SELECT * FROM pet WHERE name LIKE ‘_____‘;(别数了是五个下划线)

mysql> SELECT * FROM pet
-> WHERE name LIKE ‘_____‘;
+-------+--------+---------+------+------------+-------+
| name | owner | species | sex | birth | death |
+-------+--------+---------+------+------------+-------+
| Claws | Gwen | cat | m | 1994-03-17 | NULL |
| Buffy | Harold | dog | f | 1989-05-13 | NULL |
+-------+--------+---------+------+------------+-------+
2 rows in set (0.00 sec)

mysql>

如果是非常复杂的匹配原则(比如我要在text 中找有没有身份证号)就会使用到正则表达式了。

这是就用到了这两个操作符 REGEXP 和 NOT REGEXP(或RLIKE 和 NOT RLIKE,他们是同义词)。

先列举几个简单的,详细的之后会有的。如果要是不更新的话。。。

  • ‘.‘ 匹配任何单个的字符。
  • 字符类“[...]”匹配在方括号内的任何字符。例如,“[abc]”匹配“a”、“b”或“c”。为了命名字符的范围,使用一个“-”。“[a-z]”匹配任何字母,而“[0-9]”匹配任何数字。
  • "*" 匹配零个或多个在它前面的字符。例如,“x*”匹配任何数量的“x”字符,“[0-9]*”匹配任何数量的数字,而 ".*" 匹配任何数量的任何字符。
  • 为了定位一个模式以便它必须匹配被测试值的开始或结尾,在模式开始处使用“^”或在模式的结尾用“$”;

我再把上面的栗子重新敲一遍。

找出以‘b‘开头的名字

操作如下:

SELECT * FROM pet WHERE name RLIKE ‘^b‘;

mysql> SELECT * FROM pet
-> WHERE name RLIKE ‘^b‘;
+--------+--------+---------+------+------------+------------+
| name | owner | species | sex | birth | death |
+--------+--------+---------+------+------------+------------+
| Buffy | Harold | dog | f | 1989-05-13 | NULL |
| Bowser | Diane | dog | m | 1989-08-31 | 1995-07-29 |
+--------+--------+---------+------+------------+------------+
2 rows in set (0.05 sec)

mysql>

如果你非要区分大小写就应该这么写

SELECT * FROM pet WHERE name RLIKE BINARY ‘^b‘;

找出以‘fy‘结尾的名字

操作如下:

SELECT * FROM pet WHERE name RLIKE ‘fy$‘;

mysql> SELECT * FROM pet WHERE name RLIKE ‘fy$‘;
+--------+--------+---------+------+------------+-------+
| name | owner | species | sex | birth | death |
+--------+--------+---------+------+------------+-------+
| Fluffy | Harold | cat | f | 1993-02-04 | NULL |
| Buffy | Harold | dog | f | 1989-05-13 | NULL |
+--------+--------+---------+------+------------+-------+
2 rows in set (0.00 sec)

mysql>

找出名字中有‘w‘的

操作如下:

SELECT * FROM pet WHERE name RLIKE ‘w‘;

mysql> SELECT *
-> FROM pet
-> WHERE name RLIKE ‘w‘;
+----------+-------+---------+------+------------+------------+
| name | owner | species | sex | birth | death |
+----------+-------+---------+------+------------+------------+
| Whistler | Gwen | bird | NULL | 1997-12-09 | NULL |
| Claws | Gwen | cat | m | 1994-03-17 | NULL |
| Bowser | Diane | dog | m | 1989-08-31 | 1995-07-29 |
+----------+-------+---------+------+------------+------------+
3 rows in set (0.00 sec)

mysql>

找出5个字母的名字的pet

操作如下:

SELECT * FROM pet WHERE name RLIKE ‘^.....$‘;

mysql> SELECT * FROM pet WHERE name RLIKE ‘^.....$‘;
+-------+--------+---------+------+------------+-------+
| name | owner | species | sex | birth | death |
+-------+--------+---------+------+------------+-------+
| Claws | Gwen | cat | m | 1994-03-17 | NULL |
| Buffy | Harold | dog | f | 1989-05-13 | NULL |
+-------+--------+---------+------+------------+-------+
2 rows in set (0.00 sec)

mysql>

也可以这么写:

SELECT * FROM pet WHERE name RLIKE ‘^.{5}$‘;

mysql> SELECT * FROM pet WHERE name RLIKE ‘^.{5}$‘;
+-------+--------+---------+------+------------+-------+
| name | owner | species | sex | birth | death |
+-------+--------+---------+------+------------+-------+
| Claws | Gwen | cat | m | 1994-03-17 | NULL |
| Buffy | Harold | dog | f | 1989-05-13 | NULL |
+-------+--------+---------+------+------------+-------+
2 rows in set (0.00 sec)

mysql>

to be continued...

时间: 2024-11-08 19:13:45

Mysql学习笔记006的相关文章

MySQL学习笔记-基础入门

MySQL学习笔记

MySql学习笔记(一)之DQL常用查询

MySql学习笔记(一)之DQL常用查询 前言:mysql是中小型的数据库软件,SQL语言分为DDL,DCL,DML,DQL四种,在这里重点讲解DQL的单表查询. 正文:在学习mysql单表查询之前,我们先做一些准备工作. 需要安装的软件如下: 1.mysql,版本可以选择5.1或者5.5,安装过程可以参考博客:http://www.cnblogs.com/ixan/p/7341637.html 2.mysql图形化管理软件:Navicate,sqlyog(二选一,推荐使用sqlyog). 本文

MySQL学习笔记-自定义函数

MySQL学习笔记-自定义函数 1.自定义函数简介 自定义函数:用户自定义函数(user-defined function,UDF)是一种对MySQL扩展的途径,其用法与内置函数相同 自定义函数的两个必要条件:(1)参数  (2)返回值 自定义函数: 创建自定义函数 CREATE FUNCTION function_name RETURNS {STRING|INTEGER|REAL|DECIMAL} routine_body 关于函数体: 1.函数体可以由合法的SQL语句构成: 2.函数体可以是

Mysql学习笔记(三)对表数据的增删改查。

写在前面:(一些牢骚,可以直接跳到分割线后) 太过敏感的人不会快乐,不幸的是我正是这种性格的人. 从培训机构毕业后,迫于经济方面的压力,和当时的班里的一个同学住在了一起,我们在一个公司上班.谁知道这都是不开心生活的源头,从每天早晨开始心情就很糟糕.他是个脾气很慢的人,我是个急脾气,特别是在早上上班的时候.由此种种吧,实在是不胜枚举.算了,还是不说了,太痛苦了,我不太喜欢说别人的坏话.我是学心理学的,已经用各种方法去安慰自己,但是都不太奏效. 回想以往和朋友的交往中,我虽然不算十分合群的人,但绝对

mysql 学习笔记(一)

查询:show databases;show status;show tables; desc  table-name: 更改root密码:方法一:mysqladmin -uroot -poldpassword  password newpassword方法二:mysql -uroot -puse mysqlupdate user set password=password("newpasswd") where user="root";select host,use

MySQL学习笔记-数据类型与操作数据表

MySQL学习笔记-数据类型与操作数据表 数据类型:  1.字符型  2.整型  3.浮点型  4.日期时间型 数据表操作:  1.插入记录  2.查找记录 记录操作:  1.创建数据表  2.约束的使用 1.数据类型 [1]整型: 数据类型 存储范围 字节 TINYINT 有符号型:-128~127(-2^7~2^7 -1),无符号型0~255(0~2^8 -1) 1 SMALLINT 有符号型:-2^15~2^15 -1,无符号型0~2^16 -1 2 MEDIUMINT 有符号型:-2^2

mysql学习笔记 第五天

使用分区数据表: 分区数据表和merge数据表具有相似的作用,但是分区数据表确确实实是一个数据表 ,不像merge是列出数据表的逻辑关系,并且分区数据表可以包括像myisam以外的 的数据表.创建分区数据表: create table 里给出数据列和索引,然后用partition by 定义一个用来把数据行分配 到各个分区的分区函数:[将数据表分成四个区] create table log_partition( dt datetime not null, info varchar(100) no

mysql学习笔记 第四天

mysql引擎: archive(档案)[数据插入以后不能被修改,只读] blackhole[这种写操作是删除数据,读操作是返回空白记录] CSV[在储存数据时以逗号作为数据项之间的分隔符] example[示例(存根)储存引擎] Falcon[用来进行处理事务的储存类型] federated[用来访问远程数据表的储存引擎] InnoDB[具备外键支持功能的事务处理引擎] memory[内存里的数据表] merge[用来管理多个MyISAM数据表构成的数据表集合(merg-myisam)] my

mysql 学习笔记 第二天

插入表格数据: Insert into table_name set columns_1=value1,columns_2=value2,对于没有赋值的列,将会取默认值,并且这个方法只能一次插入一个数据 利用文本方式插入数据: Load data local infile‘径’into table table_name: Select 的通用形式: Select columns from table or tables where conditions;from一般不能少的,但是当查询的时候没有