前言

主要是记录一下select命令的使用。根据《MySQL基础教程西泽梦路》学习,简单的做一下笔记。

记录于此,方便自己回忆。

正文

我这以Window版的phpstudy软件验证。

需要进入这个目录,才可以使用mysql命令

  1. D:\phpstudy_pro\Extensions\MySQL5.7.26\bin
复制

进入正文

创建info表,列表结构和数据如下

  1. mysql> desc info;
  2. +-------+--------------+------+-----+---------+-------+
  3. | Field | Type         | Null | Key | Default | Extra |
  4. +-------+--------------+------+-----+---------+-------+
  5. | id   | int(11)     | NO   | PRI | NULL   |       |
  6. | name | varchar(100) | YES |     | NULL   |       |
  7. | page | int(11)     | YES |     | 100     |       |
  8. +-------+--------------+------+-----+---------+-------+
  9. 3 rows in set (0.00 sec)
  10. mysql> select * from info;
  11. +----+------------+------+
  12. | id | name       | page |
  13. +----+------------+------+
  14. | 1 | 笔友城堡     | 100 |
  15. | 2 | 笔友城堡3   | 100 |
  16. | 3 | dushu     |   4 |
  17. | 4 | shu       |   66 |
  18. | 5 | shuuu     | 300 |
  19. +----+------------+------+
  20. 5 rows in set (0.00 sec)
复制

where

使用WHERE设置条件并取出与条件相匹配的记录

  1. * from where 限定查询条件;
复制

查询符合page页数大于80的所有数据

  1. mysql> select * from info where page> 80;
  2. +----+------------+------+
  3. | id | name       | page |
  4. +----+------------+------+
  5. | 1 | 笔友城堡     | 100 |
  6. | 2 | 笔友城堡3   | 100 |
  7. | 5 | shuuu     | 300 |
  8. +----+------------+------+
  9. 3 rows in set (0.00 sec)
复制
比较运算符

mysql支持如下的比较运算符,主要是跟where组合使用。

  1. 比较运算符 含义
  2. = 等于
  3. > 大于
  4. >= 大于等于
  5. < 小于
  6. <= 小于等于
  7. <>                       不等于
  8. a in b ab列表中
  9. a not in b a不知b列表中
  10. a between b and c         a在[b,c]之间
  11. a not between b and c     a不在[b,c]之间
复制

来几个例子看看

  1. # 查询page不等于100的数据
  2. mysql> select * from info where page <> 100;
  3. +----+-------+------+
  4. | id | name | page |
  5. +----+-------+------+
  6. | 3 | dushu |   4 |
  7. | 4 | shu   |   66 |
  8. | 5 | shuuu | 300 |
  9. +----+-------+------+
  10. 3 rows in set (0.00 sec)
复制
  1. # 查询page在[0,100]之间的数据
  2. mysql> select * from info where page between 0 and 100;
  3. +----+------------+------+
  4. | id | name       | page |
  5. +----+------------+------+
  6. | 1 | 笔友城堡     | 100 |
  7. | 2 | 笔友城堡3   | 100 |
  8. | 3 | dushu     |   4 |
  9. | 4 | shu       |   66 |
  10. +----+------------+------+
  11. 4 rows in set (0.00 sec)
复制
  1. # 查询page不在[0,100]之间的数据
  2. mysql> select * from info where page not between 0 and 100;
  3. +----+-------+------+
  4. | id | name | page |
  5. +----+-------+------+
  6. | 5 | shuuu | 300 |
  7. +----+-------+------+
  8. 1 row in set (0.00 sec)
复制
like

like,像什么,也就是模糊查询。

  1. select * from 表名 where 查询的列名 like 匹配对象;
复制

先试试手

  1. mysql> select * from info where name like 'shu';
  2. +----+------+------+
  3. | id | name | page |
  4. +----+------+------+
  5. | 4 | shu | 66 |
  6. +----+------+------+
  7. 1 row in set (0.00 sec)
复制

咦,怎么只查询到一个呢?

因为LIKE可以把包含某字符串的所有内容当成查询对象

如果需要模糊匹配,需要使用通配符。

通配符
  1. 通配符 含义
  2. % 任意字符串
  3. _ 任意一个字符(一个就匹配一个,多个就匹配多个)
复制

简单介绍一下

  1. 指定的字符串 符合的例子
  2. %县 石城县、宝安县、县、赣县
  3. 宝% 宝贝、宝能、宝,宝宝
  4. %中% 中国、中华、中环、中了(只要包含中的都可以)
  5. _ 石城县、石龙县、石头县
  6. _ 花呗、送呗、借呗
复制
  1. # 一个%
  2. mysql> select * from info where name like "%shu";
  3. +----+-------+------+
  4. | id | name | page |
  5. +----+-------+------+
  6. | 3 | dushu | 4 |
  7. | 4 | shu | 66 |
  8. +----+-------+------+
  9. 2 rows in set (0.00 sec)
  10. # 两个_
  11. mysql> select * from info where name like "__shu";
  12. +----+-------+------+
  13. | id | name | page |
  14. +----+-------+------+
  15. | 3 | dushu | 4 |
  16. +----+-------+------+
  17. 1 row in set (0.00 sec)
  18. # 查询包含shu的name
  19. mysql> select * from info where name like "%shu%";
  20. +----+-------+------+
  21. | id | name | page |
  22. +----+-------+------+
  23. | 3 | dushu | 4 |
  24. | 4 | shu | 66 |
  25. | 5 | shuuu | 300 |
  26. +----+-------+------+
  27. 3 rows in set (0.00 sec)
复制
not like

跟like相反,not like 提取不包含某字符串的记录。

  1. mysql> select * from info where name not like "%shu%";
  2. +----+------------+------+
  3. | id | name | page |
  4. +----+------------+------+
  5. | 1 | 笔友城堡 | 100 |
  6. | 2 | 笔友城堡3 | 100 |
  7. +----+------------+------+
  8. 2 rows in set (0.00 sec)
复制
is 和 is not

NULL表示空值。如果没有向列中输入数据,也没有给列设置默认值,就会输入NULL。

在info表中插入新的数据,name不赋值,默认会设置为NULL

  1. # 插入数据
  2. mysql> insert into info(id, page) values(6,120);
  3. # 查询
  4. mysql> select * from info ;
  5. +----+------------+------+
  6. | id | name | page |
  7. +----+------------+------+
  8. | 1 | 笔友城堡 | 100 |
  9. | 2 | 笔友城堡3 | 100 |
  10. | 3 | dushu | 4 |
  11. | 4 | shu | 66 |
  12. | 5 | shuuu | 300 |
  13. | 6 | NULL | 120 |
  14. +----+------------+------+
  15. 6 rows in set (0.00 sec)
复制

查询name是null的数据

  1. # 查询name是null的数据
  2. mysql> select * from info where name is null;
  3. +----+------+------+
  4. | id | name | page |
  5. +----+------+------+
  6. | 6 | NULL | 120 |
  7. +----+------+------+
  8. 1 row in set (0.00 sec)
  9.  
  10. # 查询name不是null的数据
  11. mysql> select name from info where name is not null;
  12. +------------+
  13. | name |
  14. +------------+
  15. | 笔友城堡 |
  16. | 笔友城堡3 |
  17. | dushu |
  18. | shu |
  19. | shuuu |
  20. +------------+
  21. 5 rows in set (0.00 sec)
复制
or 和 and

mysql语句中也可以使用or和and进行设置多个条件查询。

  1. 条件a or 条件b 符合ab中任意一个条件就可以
  2. 条件a and 条件b 符合ab两个条件的才可以
复制

上面介绍的between and或 not between and 可以进行一定的范围查询

  1. # between and
  2. select * from info where page between 0 and 100;
  3. # not between and
  4. select * from info where page not between 0 and 100;
复制

这里也可以分别用and或or进行查询

  1. # 使用and
  2. mysql> select * from info where page >=0 and page <=100;
  3. +----+------------+------+
  4. | id | name | page |
  5. +----+------------+------+
  6. | 1 | 笔友城堡 | 100 |
  7. | 2 | 笔友城堡3 | 100 |
  8. | 3 | dushu | 4 |
  9. | 4 | shu | 66 |
  10. +----+------------+------+
  11. 4 rows in set (0.00 sec)
复制
  1. # 使用or
  2. mysql> select * from info where page > 100 or page < 0;
  3. +----+-------+------+
  4. | id | name | page |
  5. +----+-------+------+
  6. | 5 | shuuu | 300 |
  7. | 6 | NULL | 120 |
  8. | 7 | NULL | 170 |
  9. | 8 | NULL | 173 |
  10. +----+-------+------+
  11. 4 rows in set (0.00 sec)
复制

当然,除了上面的,可以组合其他多个命令,也就多个条件进行限制。

  1. mysql> select * from info where name like "%shu%" and page>50;
  2. +----+-------+------+
  3. | id | name | page |
  4. +----+-------+------+
  5. | 4 | shu | 66 |
  6. | 5 | shuuu | 300 |
  7. +----+-------+------+
  8. 2 rows in set (0.00 sec)
复制
混合使用

当AND和OR混合使用时,会优先处理AND。

来几个例子玩玩

  1. 查询page在(0,100)之间的或包含”shu”的数据

  1. # and 的优先级比or高 ,可以不用(),但为了阅读性,我是特意加上
  2. mysql> select * from info where (page>0 and page<100 ) or name like "%shu%";
  3. +----+-------+------+
  4. | id | name | page |
  5. +----+-------+------+
  6. | 3 | dushu | 4 |
  7. | 4 | shu | 66 |
  8. | 5 | shuuu | 300 |
  9. +----+-------+------+
  10. 3 rows in set (0.00 sec)
复制
  1. 查询page>200且不等于 66 范围内的且name包含“shu”的数据

  1. # 这里or必须包含括号,否则查询
  2. mysql> select * from info where (page<>66 or page>200 ) and name like "%shu%
  3. +----+-------+------+
  4. | id | name | page |
  5. +----+-------+------+
  6. | 3 | dushu | 4 |
  7. | 5 | shuuu | 300 |
  8. +----+-------+------+
  9. 2 rows in set (0.00 sec)
  10.  
  11. # 如果or不加(),查询到完全不符合我们的题意
  12. mysql> select * from info where page<>66 or page>200 and name like "%shu%";
  13. +----+------------+------+
  14. | id | name | page |
  15. +----+------------+------+
  16. | 1 | 笔友城堡 | 100 |
  17. | 2 | 笔友城堡3 | 100 |
  18. | 3 | dushu | 4 |
  19. | 5 | shuuu | 300 |
  20. | 6 | NULL | 120 |
  21. | 7 | NULL | 170 |
  22. | 8 | NULL | 173 |
  23. +----+------------+------+
  24. 7 rows in set (0.00 sec)
复制

distinct

distinct不同的或不重复的。

我们继续给info表插入几条数据,name依旧不赋值(为null)。[上面有]

对比一下添加了distinct后的区别

  1. # 不添加distinct
  2. mysql> select name from info;
  3. +------------+
  4. | name |
  5. +------------+
  6. | 笔友城堡 |
  7. | 笔友城堡3 |
  8. | dushu |
  9. | shu |
  10. | shuuu |
  11. | NULL |
  12. | NULL |
  13. | NULL |
  14. +------------+
  15. 8 rows in set (0.00 sec)
  16. # 添加distinct
  17. mysql>
  18. mysql> select distinct name from info;
  19. +------------+
  20. | name |
  21. +------------+
  22. | 笔友城堡 |
  23. | 笔友城堡3 |
  24. | dushu |
  25. | shu |
  26. | shuuu |
  27. | NULL |
  28. +------------+
  29. 6 rows in set (0.00 sec)
复制

参考文章

  1. 《MySQL基础教程-西泽梦路》

相关文章

暂无评论

none
暂无评论...