前言
主要是记录一下select命令的使用。根据《MySQL基础教程–西泽梦路》学习,简单的做一下笔记。
记录于此,方便自己回忆。
正文
需要进入这个目录,才可以使用mysql命令
- D:\phpstudy_pro\Extensions\MySQL5.7.26\bin
进入正文
创建info表,列表结构和数据如下
- mysql> desc info;
- +-------+--------------+------+-----+---------+-------+
- | Field | Type | Null | Key | Default | Extra |
- +-------+--------------+------+-----+---------+-------+
- | id | int(11) | NO | PRI | NULL | |
- | name | varchar(100) | YES | | NULL | |
- | page | int(11) | YES | | 100 | |
- +-------+--------------+------+-----+---------+-------+
- 3 rows in set (0.00 sec)
- mysql> select * from info;
- +----+------------+------+
- | id | name | page |
- +----+------------+------+
- | 1 | 笔友城堡 | 100 |
- | 2 | 笔友城堡3 | 100 |
- | 3 | dushu | 4 |
- | 4 | shu | 66 |
- | 5 | shuuu | 300 |
- +----+------------+------+
- 5 rows in set (0.00 sec)
where
使用WHERE设置条件并取出与条件相匹配的记录
- * from 表 where 限定查询条件;
查询符合page页数大于80的所有数据
- mysql> select * from info where page> 80;
- +----+------------+------+
- | id | name | page |
- +----+------------+------+
- | 1 | 笔友城堡 | 100 |
- | 2 | 笔友城堡3 | 100 |
- | 5 | shuuu | 300 |
- +----+------------+------+
- 3 rows in set (0.00 sec)
比较运算符
mysql支持如下的比较运算符,主要是跟where组合使用。
- 比较运算符 含义
- = 等于
- > 大于
- >= 大于等于
- < 小于
- <= 小于等于
- <> 不等于
- a in b a在b列表中
- a not in b a不知b列表中
- a between b and c a在[b,c]之间
- a not between b and c a不在[b,c]之间
来几个例子看看
- # 查询page不等于100的数据
- mysql> select * from info where page <> 100;
- +----+-------+------+
- | id | name | page |
- +----+-------+------+
- | 3 | dushu | 4 |
- | 4 | shu | 66 |
- | 5 | shuuu | 300 |
- +----+-------+------+
- 3 rows in set (0.00 sec)
- # 查询page在[0,100]之间的数据
- mysql> select * from info where page between 0 and 100;
- +----+------------+------+
- | id | name | page |
- +----+------------+------+
- | 1 | 笔友城堡 | 100 |
- | 2 | 笔友城堡3 | 100 |
- | 3 | dushu | 4 |
- | 4 | shu | 66 |
- +----+------------+------+
- 4 rows in set (0.00 sec)
- # 查询page不在[0,100]之间的数据
- mysql> select * from info where page not between 0 and 100;
- +----+-------+------+
- | id | name | page |
- +----+-------+------+
- | 5 | shuuu | 300 |
- +----+-------+------+
- 1 row in set (0.00 sec)
like
like,像什么,也就是模糊查询。
- select * from 表名 where 查询的列名 like 匹配对象;
先试试手
- mysql> select * from info where name like 'shu';
- +----+------+------+
- | id | name | page |
- +----+------+------+
- | 4 | shu | 66 |
- +----+------+------+
- 1 row in set (0.00 sec)
咦,怎么只查询到一个呢?
因为LIKE可以把包含某字符串的所有内容当成查询对象
如果需要模糊匹配,需要使用通配符。
通配符
- 通配符 含义
- % 任意字符串
- _ 任意一个字符(一个就匹配一个,多个就匹配多个)
简单介绍一下
- 指定的字符串 符合的例子
- %县 石城县、宝安县、县、赣县
- 宝% 宝贝、宝能、宝,宝宝
- %中% 中国、中华、中环、中了(只要包含中的都可以)
- 石_县 石城县、石龙县、石头县
- _呗 花呗、送呗、借呗
- # 一个%
- mysql> select * from info where name like "%shu";
- +----+-------+------+
- | id | name | page |
- +----+-------+------+
- | 3 | dushu | 4 |
- | 4 | shu | 66 |
- +----+-------+------+
- 2 rows in set (0.00 sec)
- # 两个_
- mysql> select * from info where name like "__shu";
- +----+-------+------+
- | id | name | page |
- +----+-------+------+
- | 3 | dushu | 4 |
- +----+-------+------+
- 1 row in set (0.00 sec)
- # 查询包含shu的name
- mysql> select * from info where name like "%shu%";
- +----+-------+------+
- | id | name | page |
- +----+-------+------+
- | 3 | dushu | 4 |
- | 4 | shu | 66 |
- | 5 | shuuu | 300 |
- +----+-------+------+
- 3 rows in set (0.00 sec)
not like
跟like相反,not like 提取不包含某字符串的记录。
- mysql> select * from info where name not like "%shu%";
- +----+------------+------+
- | id | name | page |
- +----+------------+------+
- | 1 | 笔友城堡 | 100 |
- | 2 | 笔友城堡3 | 100 |
- +----+------------+------+
- 2 rows in set (0.00 sec)
is 和 is not
NULL表示空值。如果没有向列中输入数据,也没有给列设置默认值,就会输入NULL。
在info表中插入新的数据,name不赋值,默认会设置为NULL
- # 插入数据
- mysql> insert into info(id, page) values(6,120);
- # 查询
- mysql> select * from info ;
- +----+------------+------+
- | id | name | page |
- +----+------------+------+
- | 1 | 笔友城堡 | 100 |
- | 2 | 笔友城堡3 | 100 |
- | 3 | dushu | 4 |
- | 4 | shu | 66 |
- | 5 | shuuu | 300 |
- | 6 | NULL | 120 |
- +----+------------+------+
- 6 rows in set (0.00 sec)
查询name是null的数据
- # 查询name是null的数据
- mysql> select * from info where name is null;
- +----+------+------+
- | id | name | page |
- +----+------+------+
- | 6 | NULL | 120 |
- +----+------+------+
- 1 row in set (0.00 sec)
- # 查询name不是null的数据
- mysql> select name from info where name is not null;
- +------------+
- | name |
- +------------+
- | 笔友城堡 |
- | 笔友城堡3 |
- | dushu |
- | shu |
- | shuuu |
- +------------+
- 5 rows in set (0.00 sec)
or 和 and
mysql语句中也可以使用or和and进行设置多个条件查询。
- 条件a or 条件b 符合a或b中任意一个条件就可以
- 条件a and 条件b 符合a和b两个条件的才可以
上面介绍的between and或 not between and 可以进行一定的范围查询
- # between and
- select * from info where page between 0 and 100;
- # not between and
- select * from info where page not between 0 and 100;
这里也可以分别用and或or进行查询
- # 使用and
- mysql> select * from info where page >=0 and page <=100;
- +----+------------+------+
- | id | name | page |
- +----+------------+------+
- | 1 | 笔友城堡 | 100 |
- | 2 | 笔友城堡3 | 100 |
- | 3 | dushu | 4 |
- | 4 | shu | 66 |
- +----+------------+------+
- 4 rows in set (0.00 sec)
- # 使用or
- mysql> select * from info where page > 100 or page < 0;
- +----+-------+------+
- | id | name | page |
- +----+-------+------+
- | 5 | shuuu | 300 |
- | 6 | NULL | 120 |
- | 7 | NULL | 170 |
- | 8 | NULL | 173 |
- +----+-------+------+
- 4 rows in set (0.00 sec)
当然,除了上面的,可以组合其他多个命令,也就多个条件进行限制。
- mysql> select * from info where name like "%shu%" and page>50;
- +----+-------+------+
- | id | name | page |
- +----+-------+------+
- | 4 | shu | 66 |
- | 5 | shuuu | 300 |
- +----+-------+------+
- 2 rows in set (0.00 sec)
混合使用
当AND和OR混合使用时,会优先处理AND。
来几个例子玩玩
查询page在(0,100)之间的或包含”shu”的数据
- # and 的优先级比or高 ,可以不用(),但为了阅读性,我是特意加上
- mysql> select * from info where (page>0 and page<100 ) or name like "%shu%";
- +----+-------+------+
- | id | name | page |
- +----+-------+------+
- | 3 | dushu | 4 |
- | 4 | shu | 66 |
- | 5 | shuuu | 300 |
- +----+-------+------+
- 3 rows in set (0.00 sec)
查询page>200且不等于 66 范围内的且name包含“shu”的数据
- # 这里or必须包含括号,否则查询
- mysql> select * from info where (page<>66 or page>200 ) and name like "%shu%
- +----+-------+------+
- | id | name | page |
- +----+-------+------+
- | 3 | dushu | 4 |
- | 5 | shuuu | 300 |
- +----+-------+------+
- 2 rows in set (0.00 sec)
- # 如果or不加(),查询到完全不符合我们的题意
- mysql> select * from info where page<>66 or page>200 and name like "%shu%";
- +----+------------+------+
- | id | name | page |
- +----+------------+------+
- | 1 | 笔友城堡 | 100 |
- | 2 | 笔友城堡3 | 100 |
- | 3 | dushu | 4 |
- | 5 | shuuu | 300 |
- | 6 | NULL | 120 |
- | 7 | NULL | 170 |
- | 8 | NULL | 173 |
- +----+------------+------+
- 7 rows in set (0.00 sec)
distinct
distinct不同的或不重复的。
我们继续给info表插入几条数据,name依旧不赋值(为null)。[上面有]
对比一下添加了distinct后的区别
- # 不添加distinct
- mysql> select name from info;
- +------------+
- | name |
- +------------+
- | 笔友城堡 |
- | 笔友城堡3 |
- | dushu |
- | shu |
- | shuuu |
- | NULL |
- | NULL |
- | NULL |
- +------------+
- 8 rows in set (0.00 sec)
- # 添加distinct
- mysql>
- mysql> select distinct name from info;
- +------------+
- | name |
- +------------+
- | 笔友城堡 |
- | 笔友城堡3 |
- | dushu |
- | shu |
- | shuuu |
- | NULL |
- +------------+
- 6 rows in set (0.00 sec)
参考文章
历史上的今天
© 版权声明