当前位置: 首页 > news >正文

MySQL表的增删查改(上)

作者:~小明学编程  

文章专栏:MySQL

格言:目之所及皆为回忆,心之所想皆为过往

在这里插入图片描述

        前面给大家分享了关于数据库的一些基本的操作,今天分享的是数据库的核心内容,那就是我们常说的增删查改,也是我们数据库的灵魂所在。

目录

增(Create)

单行插入

多行插入

指定列的插入

 查(Retrieve)

全列查找

指定查询列

去重

排序

条件查询

NULL问题

别名问题  

模糊查询

分页查询

 改(Update)

 删(Delete)

增(Create)

顾名思义就是向我们的表中添加数据,这里我们示范,创建一个student2的表。

 接着我们介绍我们的增添数据的语句,其中我们的 into 可以省略。

insert into 表名 values (数据);

单行插入

insert into 表名 values(数据);

多行插入

insert into 表名 values
    ('lisi',18,3.9),
    ('wangwu',19,6.8),
    ('zhangliu',20,7.6);

因为我们的单行插入比较的繁琐,插入一行的数据就需要去insert一下,所以这里我们就采用多行插入法,一个insert插入多个数据。

 指定列的插入

指定列插入就意味着我们可以只插入我们想要的那一列或者几列数据就可以了

insert into 表名 (列1,列2) values (数据,数据);

当然,在我们插入的时候我们也可以对指定的列赋上NULL值。

例如:

insert into student2 (name,age) values ('liqi',NULL);

 查(Retrieve)

在我们插入完数据之后就是搜索我们想要的数据,也就是我们所说的查,在我们查之前我们先,向我们的表中插入一些数据。

insert into exam_result (id,name, chinese, math, english) values
        (1,'小a', 67, 98, 56),
        (2,'小b', 87.5, 78, 77),
        (3,'小c', 88, 98.5, 90),
        (4,'小d', 82, 84, 67),
        (5,'小e', 55.5, 85, 45),
        (6,'小f', 70, 73, 78.5),
        (7,'小g', 75, 65, 30);

然后我么介绍我们的第一条的查找语句

全列查找

    select * from 表名;

 我们可以看到该语句可以查找出整个表的内容,但是这种写法不推荐使用,这里是因为我们的表比较的小,当我们的表比较的大的时候数据很多,这时候我们再去用全列搜索就会产生问题,首先我们从磁盘中读取我们的数据一次性也就几百兆,当数据非常多达到几个G的时候我们不能读完就会占用我们本地的IO,同时当我们从服务器中去查询数据的时候如果该次数据返回的非常多,就会占用所有的资源去返回该次指令所要的数据,那么别的请求就不能再从该服务器中获取想要的数据了。

指定查询列

查询所有的列,一般情况下属于浪费我们的资源,因为一般我们不需要那么多的东西,所以我们一般只需要查询我们想要的那几列就行了。

    select 列1,列2 from 表;

 这时我们想到一个问题,我们能不能将列表中的成绩×2呢,或者我们要查询的是math,chinese,english三个成绩之和呢?当然没问题。

 可以看到只要在我们查询的时候,对我们查询的列进行表达式的运算就能达到我们的要求了。

别名:

但是我们刚刚在计算三科成绩之和的时候我们发现列名太长了,看着就很不舒服,这时我们会想我们能不能给它起一个别名呢?

    select 列名 as 别名 from 表;

 这里我们可以看到此时的列名就简洁很多了。

去重

当我们在查询数据的时候可能会遇到一些重复的数据,此时我们想要将这些重复的数据去除该怎么操作呢?

    select distinct 列 from 表;

 我们也可以写成下面这种

 这意味着只有当我们的math和chinese都相等的时候才会去重。

排序

上述在我们查到我们想要的数据之后我们发现此时的数据是乱序的,也就是我们插入时候的顺序,这时我们想让其按顺序列出来该如何去操作呢?

例如上面的数据我们想要查看math从低到高的排序

此时我们可以看到,我们拿到了我们想要的结果了,但是我们如果想要从高到底去排序呢?

 我们只需要在最后面加上desc就可以了,其实从小到大也有关键字那就是asc,可以省略但是不推荐,所以我们暂时可以总结出来我们的查询排序操作为

    select 列 from 表 order by 列 asc -- 从小到大排序
    select 列 from 表 order by 列 desc -- 从大到小排序

注意:

1.我们的order by 后面也可以用别名进行排序

select name, chinese + english + math total from exam_result
    order by total desc;

 2.我们排序的时候可以指定多个标准

select 列 from 表 order by 列1 desc 列2 asc -- 先按照列1从大到小排序当遇到相同的时候就按照列2从小到大排序

条件查询

前面我们说到的查询都是查询的指定的列,那么我们能不能查询指定的行呢?

这就要用到我们的条件查询了,例如我们想要查询,在查询之前我们要俩姐MySQL中的运算符。

    select 列 from 表 where 条件;
运算符说明
>, >=, <, <=大于,大于等于,小于,小于等于
=等于,NULL 不安全,例如 NULL = NULL 的结果是 NULL
<=>等于,NULL 安全,例如 NULL <=> NULL 的结果是 TRUE(1)
!=, <>不等于
BETWEEN a0 AND
a1
范围匹配,[a0, a1],如果 a0 <= value <= a1,返回 TRUE(1)
IN (option, ...)如果是 option 中的任意一个,返回 TRUE(1)
IS NULL是 NULL
IS NOT NULL不是 NULL
LIKE模糊匹配。% 表示任意多个(包括 0 个)任意字符;_ 表示任意一个s

这是我们原表的所有的数据,现在我们对其进行一系列的条件查询来示范怎么去使用条件查询。

首先我们可以查询一下,所有的数学成绩在80分以上的人的姓名和数学成绩,

select name,math from exam_result where math>80;

 当然我们也可以加入我们前面的排序语句, 这样我们就得到了数学成绩大于80并且从小到大排序的一个表。

between and 的左闭右闭需要注意一下,

这里我们采用的是左右都是闭区间,和我们一般的语法规则有些不同需要注意一下。

 NULL问题

1.

首先先说一下带有NULL的排序问题,当我们排序的时候我们数据中如果有NULL那么NULL会排在哪里呢?

 可以看到,这里我们这里采用的是asc从小到大的排序,然后NULL是放在最前面的也就是最小。

2.

当我们查找的时候想查找谁的数据为NULL时该怎么办呢?

 直接等于是办不到的查找结果也是NULL,上面的表中我们也提到了,所以我们要用一些其它的语句。

别名问题  

 这里我们想要查询总成绩大于200的人和成绩,并且给和起了个别名total,但是我们where后面的条件依然没用别名,这里我们用别名岂不是更方便

 但是事实却不是这样,这里给我们报错了,意思是不认识total,因为我们是首先执行后面where的所以我们当时还没有起上别名,就导致了我们找不到别名这个关键字。

模糊查询

LIKE关键字主要用于我们的模糊查询,当我们只知道我们字符串的某些部位的时候,这时我们可以查询该列数据中带有此关键字的所有的数据。

例如:我们现在查询名字中头一个字符是小的

其中%表示匹配多个字符,也就是此时我们可以匹配小a,小aaaa都没问题,当我们想要查询name中带有小的话就可以写成%小%。

 当我们要查找指定位置有某一个字符的时候,可以用_字符例如:

 这就意味着我们的d的前面必须有一个字符来让我们去匹配。

分页查询

我们前面谈到select * 查询会出现一些问题一般不建议这样去使用,因为一次性返回的数据太多了,所以现在我们想一次性返回指定规模的数据。

这就要用到我们的分页查询了,

select 列 from 表 limit 一次显示数据的数量 offset 指定小标开始;

 

注意:这里我们需要注意的是我们以上的查询操作只是把我们数据库里面的数据按照我们的需要展示出来并不会修改数据库里面的数据,同时我们也没有生成一个表,在我们数据展示的那一刻起就已经释放掉了。

 改(Update)

接下来要介绍的是修改我们的数据,

update 表 set 列1,列2 where 修改的对象;

例如我们现在要将我们小a的math成绩修改为80,english成绩修改为60,就可以写成

 这里我们就修改完毕了,当但是一般情况下我们用到修改的时候会比较的复杂将会和多个语句一起使用,例如:将总成绩倒数前三的 3 位同学的数学成绩加上 10 分这样的语句我们该怎么去写呢?

 这是我们要找的三个人,注意 :我们的NULL进行运算结果还是NULL,如NULL+10=NULL

update exam_result set math = math+10 order by chinese+math+english asc limit 3;

按照当前需求写出来的sql语句,我们执行之后看看结果, 我们可以看到数据已经更改了。

下面我们再进行一个操作,将我们所有人的语文成绩加上10,

update exam_result set chinese = chinese+10;

 删(Delete)

delete from 表 where 条件;

我们可以看到我们操作完毕之后,数据库中就没有id=9的数据了,当我们没有where的时候就是删除该表里面的所有的数据。 

以上就是本章给大家分享的MySQL的一些基本的增删改查的知识。

相关文章:

  • 世界杯---人生就是一届又一届世界杯
  • LeetCode 1832. 判断句子是否为全字母句
  • 多数据源解决分布式事务
  • 跳槽一次能涨多少?今天见识到跳槽天花板。
  • 【HTML期末学生大作业】 制作一个简单HTML宠物网页(HTML+CSS)
  • 分享一些冷门但却很实用的css样式
  • 写代码时记录的小技巧
  • Springboot 那年我双手插兜,手写一个excel导出
  • web自动化测试入门篇04——selenium+python基础方法封装
  • 21 【styled-components的使用】
  • Flink Checkpoint 问题排查实用指南
  • 0基础1天学会js-第二讲
  • 猿如意中的【PyCharm社区版】工具详情介绍
  • 【Docker】Docker安装Redis,并配置数据备份同步到宿主机
  • 图像的OTSU阈值化、双阈值化、半阈值化的原理及OpenCV代码实现
  • 【JavaScript】通过闭包创建具有私有属性的实例对象
  • Apache的基本使用
  • CNN 在图像分割中的简史:从 R-CNN 到 Mask R-CNN
  • hadoop入门学习教程--DKHadoop完整安装步骤
  • Javascript基础之Array数组API
  • JS专题之继承
  • Linux Process Manage
  • python学习笔记-类对象的信息
  • vue 配置sass、scss全局变量
  • vue--为什么data属性必须是一个函数
  • 笨办法学C 练习34:动态数组
  • 个人博客开发系列:评论功能之GitHub账号OAuth授权
  • 记录:CentOS7.2配置LNMP环境记录
  • 马上搞懂 GeoJSON
  • 实习面试笔记
  • 微信支付JSAPI,实测!终极方案
  • 学习Vue.js的五个小例子
  • 学习笔记DL002:AI、机器学习、表示学习、深度学习,第一次大衰退
  • [地铁译]使用SSD缓存应用数据——Moneta项目: 低成本优化的下一代EVCache ...
  • ​​​​​​​GitLab 之 GitLab-Runner 安装,配置与问题汇总
  • ###51单片机学习(1)-----单片机烧录软件的使用,以及如何建立一个工程项目
  • #ifdef 的技巧用法
  • #快捷键# 大学四年我常用的软件快捷键大全,教你成为电脑高手!!
  • $.ajax()参数及用法
  • (1)虚拟机的安装与使用,linux系统安装
  • (12)目标检测_SSD基于pytorch搭建代码
  • (html5)在移动端input输入搜索项后 输入法下面为什么不想百度那样出现前往? 而我的出现的是换行...
  • (solr系列:一)使用tomcat部署solr服务
  • (二)pulsar安装在独立的docker中,python测试
  • (附源码)springboot教学评价 毕业设计 641310
  • (每日持续更新)jdk api之StringBufferInputStream基础、应用、实战
  • (三)mysql_MYSQL(三)
  • (原創) 如何安裝Linux版本的Quartus II? (SOC) (Quartus II) (Linux) (RedHat) (VirtualBox)
  • (转)C语言家族扩展收藏 (转)C语言家族扩展
  • (转)自己动手搭建Nginx+memcache+xdebug+php运行环境绿色版 For windows版
  • .NET Core跨平台微服务学习资源
  • .NET(C#、VB)APP开发——Smobiler平台控件介绍:Bluetooth组件
  • .NET/C# 避免调试器不小心提前计算本应延迟计算的值
  • .net反编译工具
  • @selector(..)警告提示