[Mysql] 的基础知识和sql 语句.教你速成(上)——逻辑清晰,涵盖完整

目录

前言

上篇的内容概况

下篇的内容概况

 数据库的分类

关系型数据库

常见的关系型数据库系统

非关系型数据库

1. 键值对数据库(Key-Value Stores)

特点:

常见的键值对数据库:

2. 文档数据库(Document Stores)

特点:

常见的文档数据库:

3. 列族数据库(Column-Family Stores)

特点:

常见的列族数据库:

4. 图数据库(Graph Databases)

特点:

常见的图数据库:

Mysql 常见的数据类型

数值类型

字符串类型

日期类型

sql 语句

首先是数据库的操作

建立数据库

展示数据库

删除数据库

使用数据库

基础的表的操作

展示所有表

建立表

查看表的结构

删除表

 修改表

表的增删查改

新增数据

查询数据(****)

全列查询

指定列查询

查询[字段为表达式]的查询

别名(as)

去重(distinct)

 排序 (order by)

 条件查询(where)

比较运算符

逻辑运算符

分页查询

查询语句的书写和执行顺序(****)

修改数据(update)

删除(delet)

上篇总结


前言

OK,笔者知道笔者这篇博客写完的时候,很多人已经考完数据库了,但是笔者还是要写,因为笔者还没考完捏

Mysql 作为一个开源的,易于安装和配置的,有着图形化工具的关系型数据库管理系统软件, 非常适合我们入门数据库,所以笔者会介绍Mysql 的基础知识和 sql 语句

上篇的内容概况

 数据库的分类, Mysql的数据类型,基础的sql 语句

包括数据库的操作,表的操作 ,基础的 CRUD管理和组织表的数据

下篇的内容概况

数据库的约数,聚合查询,联合查询

索引,事物,Mysql 的 JDBC 编程

不想看前面的废话直接目录空降即可

 数据库的分类

数据库分 关系型数据库 和  非关系型数据库   而我们的Mysql 就是前者

关系型数据库

所谓 关系型数据库 ,就是通过 我们说的 "表" 来 组织数据的,每个表都有自己的"行" 和 "列"

然后通过 sql 语句 来进行管理和操作,我们一般期末考试也就是考 sql 语句和画ER 图

(个人观点别骂我)不过有一说一,画ER 图是真没什么屁用,软件工程的项目需求几乎不需要成本去改,一天一个样,你画图纸除了骗骗未来啥都不知道的甲方和领导,真的有tm 一点用吗??????

常见的关系型数据库系统
  • PostgreSQL
  • Oracle Database
  • Microsoft SQL Server
  • SQLite

非关系型数据库

这个笔者没有学习过,不太了解, 大致理解是通过键值对和文档来组织数据,所以下面内容来自网络

1. 键值对数据库(Key-Value Stores)

键值对数据库使用简单的键值对存储数据,类似于字典或哈希表。每个键唯一标识一个值,这种模型非常适合快速查找和大规模分布式存储。

特点:
  • 数据通过键来访问,操作非常快速。
  • 适用于缓存、会话存储和简单数据存储等场景。
  • 灵活性高,但不适合复杂查询。
常见的键值对数据库:
  • Redis
  • Amazon DynamoDB
  • Riak
2. 文档数据库(Document Stores)

文档数据库使用文档来存储数据,通常以 JSON、BSON 或 XML 格式表示。文档可以包含复杂数据结构,包括嵌套的文档和数组。

特点:
  • 数据结构灵活,适用于半结构化和非结构化数据。
  • 支持丰富的查询和索引功能。
  • 常用于内容管理系统、用户数据存储等场景。
常见的文档数据库:
  • MongoDB
  • CouchDB
  • Amazon DocumentDB
3. 列族数据库(Column-Family Stores)

列族数据库使用列族(column families)来组织数据,类似于关系型数据库的表,但列族中的列是动态的,可以根据需要添加。数据以列为中心进行存储和查询。

特点:
  • 高效地存储和查询大规模数据。
  • 适用于数据分析、时间序列数据和大数据应用。
常见的列族数据库:
  • Apache Cassandra
  • HBase
  • ScyllaDB
4. 图数据库(Graph Databases)

图数据库使用图结构来存储数据,节点表示实体,边表示实体之间的关系。这种模型非常适合处理复杂的关系和连接查询。

特点:
  • 自然地表示和查询复杂关系。
  • 适用于社交网络、推荐系统和网络分析等场景。
常见的图数据库:
  • Neo4j
  • Amazon Neptune
  • JanusGraph

Mysql 常见的数据类型

常见的 数据类型就是 数值类型, 字符串类型,还有日期类型;

数值类型

tinyint小整数,范围:-128 到 127 或 0 到 255
smallint较小整数,范围:-32768 到 32767 或 0 到 65535
mediumint中等大小整数,范围:-8388608 到 8388607 或 0 到 16777215
int/integer标准整数,范围:-2147483648 到 2147483647 或 0 到 4294967295
bigint大整数,范围:-9223372036854775808 到 9223372036854775807 或 0 到 18446744073709551615
decimal(m,d)定点数,精确到小数点后 m 位,总共 d 位
float单精度浮点数,4 字节
double双精度浮点数,8 字节
bit位字段类型,可存储位值

 笔者练习的时候 常用 int,declmai,double 其他都是在书上看了几眼

字符串类型

数据类型描述
char(m)固定长度字符串,最多 255 个字符
varchar(m)可变长度字符串,最多 65535 个字符
tinytext非常小的文本字符串,最多 255 个字符
text

 如上,基本都是笔者从书上汇总来的

日期类型

date日期值,格式:yyyy-mm-dd
datetime日期和时间值,格式:yyyy-mm-dd hh:mm
timestamp时间戳,格式:yyyy-mm-dd hh:mm,自动更新

 有时候可以配合 now() 函数使用就是了

sql 语句

好的,终于来到了sql 语句速成 这一块了 基本思路就是 CRUD

首先是数据库的操作

建立数据库

create database (if not exists)  数据库的名字  charset utf8;

 记得手动指定编码方式为 utf8,不然无法使用中文

展示数据库

show databases;

删除数据库

drop database if exists 数据库名字;

使用数据库

use 数据库的名字

管理表之前要使用数据库

基础的表的操作

展示所有表

show tables;

建立表

create table 表的名字(你自己觉得) (id int,name varchar(20));

在表的名字后面 打括号,写上你想要的 列名 数据类型,用逗号分隔,我这里随便举了个例子给你看看


查看表的结构

desc 表名

 效果如图,会显示表的结构

删除表

drop table 表的名字

 修改表

alter table

这个有点多,不好举例 

表的增删查改

以下操作大概就是重点了, CRUD!!!

CRUD 即增加(Create)、查询(Retrieve)、更新(Update)、删除(Delete)四个单词的首字母缩写
怕有人不知道所以我提一嘴

新增数据

insert into 表名 (指定列,如果不写就是默认所有列)  values (插入数据,要符合每一列的数据类型)

例如

insert into student values(1,'张三');

可以一次性插入很多数据

insert into student values(1,'张三'),(2,'李四').(3,'王五');

查询数据(****)

通过查询操作,我们将穿插一些子句语法

全列查询

顾名思义,可以查询表中的所有列和行

select * from 表名

我的老师告诉我,这个在实际生产中要慎用,如果数据库存在大量数据,容易占用资源造成损失,当然了我们平时自己的数据库那是随便用了.

*号代表所有

指定列查询

为了放置我上述的情况产生,我们要指定列去查询

select (列名,用逗号隔开) from 表名
查询[字段为表达式]的查询

请看图

 这是一个样例, 我可以查询 三科成绩之和(这就是一个表达式)

select id,name,chinese+math+english from exam_result;

效果如上图,可以得到表达式结果 

别名(as)

 

我们可以给三科之和去一个别名

语法如下

select id,name,chinese+math+english as total from exam_result;

 效果如下

在需要的列后面 + as 新名字,as 可以省略,但推荐加上去 

去重(distinct)

如果有重复的数据,可以通过如下语法去重

select DISTINCT (指定列) from 表名

太简单了就不举例演示了

 排序 (order by)

记住这两个要点

1. 没有 ORDER BY 子句的查询,返回的顺序是未定义的,永远不要依赖这个顺序
2. NULL 数据排序,视为比任何值都小,升序出现在最上面,降序出现在最下面

语法如下,以上面的exam_result 表为例子 查询姓名和数学成绩,并且排序

 select id,math from exam_result order by  math desc;order by (指定列) desc/asc;
-- ASC 为升序(从小到大)
-- DESC 为降序(从大到小)
-- 默认为 ASC

效果如图

如果没有指定 是升序还是降序,默认升序

可以配合别名使用,比如把三科成绩排序

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

 条件查询(where)

在讲解之前,必须知道  逻辑运算符和比较运算符

因为在 MySQL 中,where 子句用于指定选择查询中的条件,以过滤符合特定条件的记录。逻辑运算符和比较运算符用于在 where 子句中构建条件表达式。

比较运算符

                                                             等于column = value
<>                                                             不等于column <> value
!=                                                    不等于(同 <>column != value
>                                                             大于column > value
<                                                               小于column < value
>=                                                       大于等于column >= value
<=                                                       小于等于column <= value
BETWEEN                                           在范围内column BETWEEN value1 AND value2
NOT BETWEEN                                不在范围内column NOT BETWEEN value1 AND value2
IN                                                  在集合中column IN (value1, value2, ...)
NOT IN                                       不在集合中column NOT IN (value1, value2, ...)
LIKE                                       模糊匹配column LIKE pattern
NOT LIKE                          不模糊匹配column NOT LIKE pattern
IS NULL                         是空值column IS NULL
IS NOT NULL          不是空值column IS NOT NULL
逻辑运算符
AND                                                      逻辑与condition1 AND condition2
OR                                                        逻辑或condition1 OR condition2
NOT                                               逻辑非NOT condition

 我给标红的运算符举例,其他的大伙应该也会不用我说了

还是那张表,查询数学成绩在60-90 的

select name,math from exam_result where math between 60 and 90;

或者这么写

select name,math from exam_result where math >= 60 and math < 90;

 模糊匹配

-- % 匹配任意多个(包括 0 个)字符

-- _ 匹配严格的一个任意字符
记住这个就好了

总的来说,写条件查询就像英语写定语从句,多写几次就会了

分页查询

在数据库查询中,分页查询 (limit) 是一种非常常见的技术,尤其是在处理大量数据时。分页查询通过限制每次返回的记录数量,可以有效地管理和显示数据。

-- 从 0 开始,筛选 n 条结果
SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT n;
-- 从 s 开始,筛选 n 条结果
SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT s, n;
-- 从 s 开始,筛选 n 条结果,比第二种用法更明确,建议使用
SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT n OFFSET s;

比如,查询前三个的 id 和 name ,按 id 排序

select id,name from exam_result order by id limit 3;

 可以看到,null  在首位,也确实只有前三个

其他的读者自己去练习吧

查询语句的书写和执行顺序(****)

看了那么多例子,很难记全东西, 所以记忆sql 语句需要一些逻辑

比如,顺序

书写顺序

select -- from --where--group--having--order by--limit ;

执行顺序

from -- where--group by--having--select--order by--limit;

查询还没结束哦,只不过我实在是写不动了,上述都是基础,还有进阶的聚合查询和联合查询,笔者以后更!!!!!

修改数据(update)

过了最多最全的查询,来到修改,这个是修改表的数据,而不是修改表的结构.

UPDATE table_name SET column = expr [, column = expr ...][WHERE ...] [ORDER BY ...] [LIMIT ...]

语法如上

还是举例来看,还是那张表

 我要修改孙十万的70的语文成绩改成90;

update exam_result set chinese=90 where name ='孙权';

效果如下

把总成绩倒数前三的人的 数学加1分;

首先,找到倒数前三

select id,name,chinese+math+english as total from exam_result  
order by total limit 1,3;

然后,加分

update exam_result set math=math+1 
order by chinese+math+chinese limit 4;

效果如图

 好的修改就到这里,也不难说实话

删除(delet)

删除数据

语法如下

DELETE FROM  table_name [WHERE ...] [ORDER BY ...] [LIMIT.....];

举例,把孙悟空这一行从表上删了

delet from exam_result where name='孙悟空';

 把表的数据删完

delete from exam_result;

注意,这和删表

drop table exam_result;

有区别的, 一个是把里面的数据删了容器还在,后者是直接把锅砸了

看图

 一个是表空了,一个是没有表了

删除写到这

上篇总结

总结就是写博客是最好的复习方式,我不是在写笔记,笔者是真的希望有人能看懂和学会!!!!!!!!

笔者花了大约3小时写完了上篇,主要是介绍了数据库的基础知识和一些基础的sql 语句

包括数据库的操作,表的操作 ,基础的 CRUD管理和组织表的数据

下篇,笔者写的是

数据库的约束,聚合查询,联合查询

索引,事物,Mysql 的 JDBC 编程

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/354921.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

好用的linux一键换源脚本

最近发现一个好用的linux一键换源脚本&#xff0c;记录一下 官方链接 大陆使用 bash <(curl -sSL https://linuxmirrors.cn/main.sh)# github地址 bash <(curl -sSL https://raw.githubusercontent.com/SuperManito/LinuxMirrors/main/ChangeMirrors.sh) # gitee地址 …

Redis 网络模型

一、用户空间和内核空间 1.1 linux 简介 服务器大多采用 Linux 系统&#xff0c;这里我们以 Linux 为例来讲解&#xff0c;下面有两个不同的 linux 发行版&#xff0c;分别位 ubuntu 和 centos&#xff0c;其实发行版就是在 Linux 系统上包了一层壳。 任何 Linux 发行版&#…

RS-232协议详解:深入理解与实际应用

RS-232协议详解 RS-232协议&#xff0c;也称为推荐标准232&#xff0c;是一种用于串行通信的标准协议。它在计算机和外围设备之间的通信中广泛应用。本文将详细介绍RS-232协议的各个方面&#xff0c;包括其历史、工作原理、信号类型、连接方式、应用场景等。希望通过这篇文章&a…

如何使用React的lazy和Suspense来实现代码分割?

在React中&#xff0c;使用React.lazy和Suspense可以方便地实现组件的代码分割。代码分割是一种优化技术&#xff0c;它将代码拆分成多个包&#xff0c;然后按需加载这些包&#xff0c;从而加快应用的初始加载时间。下面是如何使用这两个API的基本步骤&#xff1a; 使用React.l…

软考初级网络管理员__网络单选题

1.某人的电子邮箱为 Rjspks163.com,对于Rjspks和163.com的正确理解为(2)&#xff0c;在发送电子邮件时&#xff0c;常用关键词使用中&#xff0c;(3)是错误的&#xff0c;采用的协议是(4)。若电子邮件出现字符乱码现象&#xff0c;以下方法中(5)一定不能解决该问题。 SNMP SM…

【安防天下】模拟视频监控系统——模拟监控系统的构成视频采集设备

文章目录 1 模拟监控系统的构成2 视频采集设备2.1 摄像机相关技术2.1.1 摄像机的工作原理2.1.2 摄像机的分类2.1.3 摄像机的主要参数 2.2 镜头相关介绍2.2.1 镜头的主要分类2.2.2 镜头的主要参数 1 模拟监控系统的构成 模拟视频监控系统又称闭路电视监控系统&#xff0c; 一般…

DB9母头接口定义485

在通信技术中&#xff0c;DB9接口广泛应用于串行通信&#xff0c;尤其是在RS232和RS485标准中。虽然DB9接口最常见于RS232通信&#xff0c;但通过适当的引脚映射&#xff0c;它也可以用于RS485通信。本文将详细介绍如何定义和使用DB9母头接口进行RS485连接。 DB9母头接口简介 …

这些帮助你成长的IOS应用,建议收藏

TrackIt TrackIt是一款功能丰富的任务清单、日程管理和习惯打卡应用&#xff0c;旨在帮助用户提高效率和专注力。通过这些功能&#xff0c;用户可以更好地规划时间和任务&#xff0c;从而实现个人目标和养成良好习惯。 在目标设定方面&#xff0c;SMART原则是一个常用的方法&a…

数据可视化实验五:seaborn绘制进阶图形

目录 一、绘制动态轨迹图 1.1 代码实现 1.2 绘制结果 二、使用seaborn绘制关系图 2.1 绘制散点图分析产品开发部已离职的员工的评分与平均工作时间 2.1.1 代码实现 2.1.2 绘制结果 ​编辑 2.2 基于波士顿房价数据&#xff0c;绘制房间数和房屋价格的折线图 2.2.1 代码…

redis 缓存jwt令牌设置更新时间 BUG修复

大家好&#xff0c;今天我又又又来了&#xff0c;hhhhh。 上文中 我们永redis缓存了token 但是我们发现了 一个bug &#xff0c;redis中缓存的token 是单用户才能实现的。 就是 我 redis中存储的键 名 为token 值 是jwt令牌 &#xff0c;但是如果 用户a 登录 之后 创建一个…

区间预测 | Matlab实现EVO-CNN-SVM能量谷算法优化卷积神经网络支持向量机结合核密度估计多置信区间多变量回归区间预测

区间预测 | Matlab实现EVO-CNN-SVM能量谷算法优化卷积神经网络支持向量机结合核密度估计多置信区间多变量回归区间预测 目录 区间预测 | Matlab实现EVO-CNN-SVM能量谷算法优化卷积神经网络支持向量机结合核密度估计多置信区间多变量回归区间预测效果一览基本介绍程序设计参考资…

【Ubuntu通用压力测试】Ubuntu16.04 CPU压力测试

使用 stress 对CPU进行压力测试 我也是一个ubuntu初学者&#xff0c;分享是Linux的优良美德。写的不好请大佬不要喷&#xff0c;多谢支持。 sudo apt-get update 日常先更新再安装东西不容易出错 sudo apt-get upgrade -y 继续升级一波 sudo apt-get install -y linux-tools…

【尚庭公寓SpringBoot + Vue 项目实战】移动端登录管理(二十)

【尚庭公寓SpringBoot Vue 项目实战】移动端登录管理&#xff08;二十&#xff09; 文章目录 【尚庭公寓SpringBoot Vue 项目实战】移动端登录管理&#xff08;二十&#xff09;1、登录业务2、接口开发2.1、获取短信验证码2.2、登录和注册接口2.3、查询登录用户的个人信息 1、…

后端学习笔记:Python基础

后端学习笔记&#xff1a;Python基础 数据类型&#xff1a; Python中主要有以下几种常用的基本数据类型&#xff1a; String 字符串类型&#xff0c;用单引号或者双引号引用Number 数字类型&#xff0c;包括浮点数&#xff0c;整数&#xff0c;长整数和复数List 列表项&…

ENVI实战—一文搞定非监督分类

实验1&#xff1a;使用isodata法分类 目的&#xff1a;学会使用isodata法开展非监督分类 过程&#xff1a; ①导入影像&#xff1a;打开ENVI&#xff0c;按照“文件→打开为→光学传感器→ESA→Sentinel-2”的顺序&#xff0c;打开实验1下载的哨兵2号数据。 图1 ②区域裁剪…

Hbase搭建教程

Hbase搭建教程 期待您的关注 ☀小白的Hbase学习笔记 目录 Hbase搭建教程 1.上传hbase的jar包并解压 2.重新登录 3.启动zookeeper 4.配置环境变量 5.关闭ZK的默认配置 6.修改hbase-site.xml文件 7.修改regionservers文件 8.将配置好的文件分发给其它节点 9.配置环境变量…

PyCharm新手入门

前言 在之前《Python集成开发工具的选择》一文中介绍了python初学者可以使用Jupyter Notebook&#xff0c;Jupyter Notebook简单易用&#xff0c;可以用来练习代码编写&#xff0c;但是实际生产开发环境使用这个工具是远远不够用的&#xff0c;因为实际软件开发中需要软件调试…

LabVIEW程序闪退问题

LabVIEW程序出现闪退问题可能源于多个方面&#xff0c;包括软件兼容性、内存管理、代码质量、硬件兼容性和环境因素。本文将从这些角度进行详细分析&#xff0c;探讨可能的原因和解决方案&#xff0c;并提供预防措施&#xff0c;以帮助用户避免和解决LabVIEW程序闪退的问题。 1…

软考高级论文真题“论大数据lambda架构”

论文真题 大数据处理架构是专门用于处理和分析巨量复杂数据集的软件架构。它通常包括数据收集、存储、处理、分析和可视化等多个层面&#xff0c;旨在从海量、多样化的数据中提取有价值的信息。Lambda架构是大数据平台里最成熟、最稳定的架构&#xff0c;它是一种将批处理和流…

前端锚点 点击 滑动双向绑定

一. 页面样式 二. 代码 <div class"flexBox"><div class"mdDiv" v-for"(item,index) in tabList" :key"index" :class"nowChooseindex?choosed:" click"jumpMD(index, item.id)">{{item.name}}&l…