前言
主要是记录一下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)
参考文章
历史上的今天
暂无评论...
随机推荐
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多个隐藏块只需支付一次付费阅读参考文章