《MySQL基础教程》笔记5

Web  2023年11月30日 am8:45发布11个月前更新 91es.com站长
69 0 0

前言

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

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

正文

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

需要进入这个目录,才可以使用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 | 91易搜     |  100 |
|  2 | 91易搜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 | 91易搜     |  100 |
|  2 | 91易搜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 | 91易搜     |  100 |
|  2 | 91易搜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 | 91易搜     |  100 |
|  2 | 91易搜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 | 91易搜     |  100 |
|  2 | 91易搜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       |
+------------+
| 91易搜     |
| 91易搜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 | 91易搜     |  100 |
|  2 | 91易搜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。

来几个例子玩玩

  1. 查询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)
  1. 查询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 | 91易搜     |  100 |
|  2 | 91易搜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       |
+------------+
| 91易搜     |
| 91易搜3    |
| dushu      |
| shu        |
| shuuu      |
| NULL       |
| NULL       |
| NULL       |
+------------+
8 rows in set (0.00 sec)
# 添加distinct
mysql>
mysql> select distinct name from info;
+------------+
| name       |
+------------+
| 91易搜     |
| 91易搜3    |
| dushu      |
| shu        |
| shuuu      |
| NULL       |
+------------+
6 rows in set (0.00 sec)

参考文章

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

 历史上的今天

  1. 2022: [摘]Android对Bitmap缩放图片的记录(0条评论)
版权声明 1、 本站名称: 91易搜
2、 本站网址: 91es.com3xcn.com
3、 本站内容: 部分来源于网络,仅供学习和参考,若侵权请留言
3、 本站申明: 个人流水账日记,内容并不保证有效

暂无评论

暂无评论...

随机推荐

张承志:听人读书

有两件杯水末梢的小事,总想把它们记下备忘。其实备忘是不必的,因为已经顽固不弃地把它们忆了这么久,记之纸笔毕竟还是因为感动--哪怕周围写大潮大势的多么热闹,我还是更重视自己这种真实的小小感情。都是听孩子念书。地隔千里:一处是北国边界乌珠穆沁草地,一处是贫瘠之冠的宁夏山区小村。在内蒙插队到了那个年...

[摘]查找当前目录下所有文件某一行的内容

前言在做monkey时,会间隔把当前所有应用的内存占用打印出来,因此为了方便查看内存是否有持续增长,会使用命令查看所有dump的文件内容。好记性不如烂笔头正文以下在Window系统中的git bash环境中测试(或者算是Linux环境)find . -type f -name “*.tx...

Android数据库查询记录

前言记录一下数据库查询,模糊查询等Java方法,方便自己查阅。正文查询Android多媒体下面是查询audio文件隐藏内容!付费阅读后才能查看!¥2 ¥3多个隐藏块只需支付一次付费阅读匹配查询数据查询可以分为精准匹配查询,也可以模糊匹配查询。like 模糊查询隐藏内容!付费阅读后...

嫣然若雪:余生,看淡所有,珍惜拥有

现实生活中,有太多的欲望,求不到,爱不得,为自己搭建了牢笼,囚禁在很深的执念里,得不到,放不下。人生本就不易,生活里本就有太多的苦,烦恼不捡自然无,要捡天天有,没有谁能把日子过得一直顺遂。有些人,因为自己的执念,让生活增添不必要的负担;有些人,因为一点小事,让自己活得心烦意乱。人生的痛苦都是自...

纪伯伦:我曾有七次鄙视自己的灵魂

我曾有七次鄙视自己的灵魂:第一次是看见她为了上升而故作谦卑时。第二次是看见她在瘸者面前跛行时。第三次是让她在难易之间做选择,她选择了易时。第四次是她犯了错,却自我安慰说别人也犯同样的错时。第五次是她容忍了软弱,还将这容忍视作坚强时。第六次是她鄙弃一张难看的面孔,...

Android中onConfigurationChanged的总结

前言记录一下Android设备横屏、竖屏和分屏的适配说明。正文Android应用中不在AndroidManifest.xml做配置时,我的如下(这里配置很多,看你自己需求删减,这里也不一一介绍):<activity   android:name=".MainActivity" ...