《MySQL基础教程》笔记5

Web  2023年11月30日 am8:45发布1年前 (2023)更新 城堡大人
98 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 | 笔友城堡     |  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。

来几个例子玩玩

  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 | 笔友城堡     |  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)

参考文章

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

 历史上的今天

  1. 2022: [摘]Android对Bitmap缩放图片的记录(0条评论)
版权声明 1、 本站名称: 笔友城堡
2、 本站网址: https://www.biumall.com/
3、 本站部分文章来源于网络,仅供学习与参考,如有侵权,请留言

暂无评论

暂无评论...

随机推荐

Android 13 U盘挂载监听

前言记录一下监听U盘挂载和卸载的方法。记录于此,方便自己差异。正文这里介绍目前知道的且测试ok的方式,看源码很多,但部分没通过测试。下面主要是2种方式,一个是广播,一个是registerStorageVolumeCallback()。隐藏内容!评论可看后才能查看!评论可看regist...

Bootstrap4移除图标解决方法

我们知道Bootstrap3是支持的图标 ,但Bootstrap4 不支持。这是因为Bootstrap4 把图标移除了,取而代之建议使用其他的,比如 https://octicons.github.com/ 和http://fontawesome.io/如果你在升级Bootstrap4 ...

SharedPreferences最后一次写入时断电偶尔存在不保存问题

前言最近测试反馈,播放音乐的信息断电时偶尔不记忆。项目中的记忆是使用sharedpreferences的,sharedpreferences是以xml文件保存,保存的位置在:/data/data/[包名]/shared_prefs测试反馈的关键字[断电]、[偶尔]和[不记忆],也就是说这...

C语言之类型转换符大全

前言C语言类型打印是要有转换符,也就是我们常用的%d,%c等,这里简单记录一下相关规则,方便自己查阅。正文转换说明符占位符                   说明%d                       有符号十进制整数%i 一...

Android换肤之Toast和Dialog

前言前面介绍过Android静态换肤日夜模式的切换(原文:《Android静态换肤-日夜主题切换之继承Activity记录 》),从中我们知道,Toast和Dialog存在无法切换成功。原因是Toast或者Dialog是需要时才去初始化的,此时换肤插件没法获取到View。PS:日夜模式不存在...

Android加载动画常用做法简介

前言Android开发中常用到加载动画,因此今天有空记录一下使用方法和性能对比,方便自己查阅。正文效果就是一直旋转,下面是用到的部分加载图片(忘记保留来源地址了,只知道来自简书面,抱歉)隐藏内容!付费阅读后才能查看!¥2 ¥3多个隐藏块只需支付一次付费阅读参考文章