1_SQL

文章目录

  • 前端复习
  • SQL
    • 数据库的分类
      • 关系型数据库
      • 非关系型数据库(NoSQL)
    • 数据库的构成
      • 软件架构
      • MySQL内部数据组织方式
  • SQL语言
    • 登录数据库
    • 数据库操作
      • 查看库
      • 创建库
      • 删除库
      • 修改库
    • 数据库中表的操作
      • 选择数据库
      • 创建表
      • 删除表
      • 查看表
      • 修改表
    • 数据库中数据的操作
      • 添加数据
      • 查询数据
      • 修改数据
      • 删除数据
    • 特殊关键字
      • where(条件关键字)
      • distinct(过滤关键字)
      • limit(限制结果集关键字)
      • as(取别名关键字)
      • order by(排序关键字)
      • group by(分组关键字)
      • 聚合函数
    • SQL语句的执行顺序

前端复习

  • HTML
    • 以标签为基础
    • 主要负责页面上内容的搭建
  • css
    • 控制页面的样式,字体的大小,图片等等
    • 主要控制样式,页面的布局
    • div套小div
  • js
    • 页面上动态内容的功能,比如点击按钮之后、完成验证码的校验等等
    • html解析之后,在浏览器上以dom树的形式存在,即对dom树的增删改查
  • vue
    • 帮我们操作dom,我们只用操作数据,数据会自己写在页面上
    • 插值表达式、v-bind/v-model/v-on/v-for

SQL

数据库的分类

关系型数据库

  • 不仅可以存储数据,还可以存储数据与数据之间的关系。

常见的关系型数据库

  • Oracle
  • MySQL
  • MariaDB
  • SQL Server
  • DB2
  • PostgreSQL

非关系型数据库(NoSQL)

  • 对关系型数据库的补充,主要是用来做一些关系型数据库不擅长的事情。
  • 关系型数据库的数据,一般是存储在磁盘上,所以速度比较慢。非关系型数据库一般是存在内存中的,所以性能比较好。

常见的非关系型数据库

  • Redis
    • 最常用的非关系型数据库,数据存在内存,速度快,吞吐量高。
  • Memcached
  • Mongodb
  • Hbase

关系型数据库和非关系型数据库的区别:

  • 最本质的区别是::关系型数据库以数据和数据之间存在的关系维护数据, 而非关系型数据库是指存储数据的时候数据和数据之间没有什么特定关系.
  • 在大多数时候,非关系型数据库是在传统关系型数据库基础上(其实已经基本上完全不同), 在功能上简化, 在数据存储结构上大大改变,在效率上提升, 通过减少用不到或很少用的功能,在能力弱化的同时也带来产品性能的大幅度提高。
  • 但是本质上讲, 他们都是用来存储数据的. 而对于我们Java后端开发来讲, 我们在工作中基本上是以关系型数据库为主, 非关系型数据库为辅的用法.

数据库的构成

软件架构

  • B/S:Browser-Server即浏览器和服务器, 即通过浏览器和服务器发起网络交互的数据请求.
    • 常见的B/S架构: 淘宝、京东、拼多多、百度
  • C/S:Client-Server即客户端和服务器, 即通过客户端和服务器发起网络交互的数据请求.
    • 常见的C/S架构:英雄联盟、QQ、微信、数据库、手机app

在这里插入图片描述

MySQL内部数据组织方式

  • 数据库: 表示一份完整的数据仓库, 在这个数据仓库中分为多张不同的表。
  • 表:表示某种特定类型数据的的结构化清单, 里面包含多条数据。
  • 数据: 表中数据的基本单元。
    在这里插入图片描述

SQL语言

登录数据库

$ mysql -uroot -p 
输入密码(******

数据库操作

查看库

查看所有的数据库
show databases;模糊匹配查看相关的数据库
show databases like "system%";
-- test% 表示以test开头
-- %info 表示以info结尾
-- %info% 表示info可以出现在任意位置查看当时创建数据库的命令
show create database test;
-- 查看当时创建数据库test的命令注释:
1. 第一种注释
-- <注释的内容>
-- 两个‘-’后面一定要有一个空格2. 第二种注释
#<注释的内容>
-- ‘#’后面可以不加空格3. 第三种注释
/*
<注释的内容>
*/

注意

  • 不要删除系统自带的几个数据库
    • information_schema
    • mysql
    • performance_schema
    • sys

创建库

创建一个数据库
create database db_test;
-- 注意:创建一个叫 db_test 的数据库,其中注意:库名,表名,列名均不区分大小写
--      如果要写库名为dbTest,则可以把 dbTest 写成 db_test创建一个数据库并指定字符集和指定校对规则
create database db_test character set utf8mb4 collate utf8mb4_bin;
-- mysql里面有一个字符集是utf8,但它是假的,是使用1-3个字节来存储数据,
-- 如果要使用utf8的编码,应该使用utf8mb4,utf8mb4是4个字节存储数据-- 校对规则是用来比较大小的
-- _ci(case insensitive 大小写不敏感)
-- _cs(case sensitive   大小写敏感)
-- eg:utf8mb4_bin、utf8mb4_general_ci
eg:create database db_test2 character set utf8mb4 collate utf8mb4_ci;-- 如果不指定一个字符集,则一般是默认的 latin1
-- latin1一般是不支持中文的

删除库

删除名称为db_test的数据库:
drop database db_test;

修改库

数据库中未提供改库名的操作,只提供修改字符集和校对规则

修改指定库的字符集和校对规则:
alter database db_test character set utf8 collate utf8_bin; 

数据库中表的操作

选择数据库

选择指定的数据库:
use db_test;查看当前在什么库:
select database();

创建表

  • Mysql中大小写不敏感
  • 不要使用数据库来存储大文件
  • 设计数据库字段的时候,一定要留有一定的冗余
create table table_name(字段名 字段类型);
--  括号里面写有哪些列,以及列类型
eg:
create table test_time(id int, date1 date, time1 timestamp);
create table test_number(id int, float1 float(4,2));

字段类型

  • 数字(整数型)

    • tinyint:1字节。

    • int: 4字节。(直接用

    • bigint: 8字节。

  • 数字(小数)

    • float(M,D):4字节。浮点型
      • M:表示最大的长度
      • D:表示小数位最大长度
    • double(M,D): 8字节。浮点型(直接用
    • decimal (M, D),dec: 压缩的“严格”定点数M+2 个字节。定点型。
      • 定点型就是用字符串来存储的
    • eg:float(4, 2):表示最多存储4位,小数位数最多2位。
      • 如果整数位多了,比如存了100.23,则会报错
      • 如果小数位多了,比如存了10.233,则会四舍五入,变为10.23
    • 如果要存储货币,需要使用decimal定点数来存,或者是字符串
  • 日期

    • year:年(YYYY)。
    • time: 时分秒(HH:MM:SS)。
    • date: 年月日(YYYY-MM-DD)。(直接用
    • datetime: 年月日时分秒。(YYYY-MM-DD HH:MM:SS)。
      • 是用字符串存的,8个字节
    • timestamp: 年月日时分秒。(YYYY-MM-DD HH:MM:SS)。(直接用
      • 是用时间戳存的。存的是从1970-01-01到现在的毫秒数
      • 2038年这个时间戳就会用完
      • 使用场景:操作/更新的时间
      • 写表的时候默认会写两个:begin_timeupdate_time
  • 字符串

    • char(M)定长字符串,设置了长度。
      • eg:char(M)代表最长存储M个长度,如果没有存到M个长度,会往后面添加空格。取出来的时候,会去掉空格。
    • varchar(M)变长字符串会用1-2字节来存储长度。也就是实际长度+1(2)。最大长度65535字节。直接用
      • eg:存储'ls',则是实际占用空间加上一个字节来存储现在的长度
    • text:文本字符串,会用2字节来存储长度。最大长度65535字节,约64K。
    • longtext:大文本字符串。会使用4字节存储长度。最大长度2^32,约4G。

写SQL,就是一个翻译的过程

  1. 需要想好你的表名
  2. 需要想好要存的所有的数据
  3. 想好类型、字段名
  4. 写SQL

删除表

删除名为table_name的表:
drop table table_name;

查看表

查看所有表:
show tables;查看表格结构(有哪些列):
desc table_name;
describe table_name;查看表的创建语句:
show create table table_name;

修改表

不建议工作中修改表

修改表名:
rename table old_table_name to new_table_name;
alter table old_table_name rename to new_table_name;修改表字符集 排序规则:
alter table table_name character set utf8mb4 collate utf8mb4_bin;添加列:
alter table table_name add column column_name column_type;删除列:
alter table table_name drop column column_name;修改某列的类型:
alter table table_name modify column column_name column_type;

数据库中数据的操作

添加数据

插入数据
方式1:指定需要插入的列名,values需要与之对应。
insert into table_name (column1, column2, ......) values (value1, value2, ......)方式2:不指定需要插入的列名。values,必须要写所有value,且与建表语句一一对应
insert into table_name values (value1, value2, ......)方式3:使用set方式
insert into table_name set column1=value1, column2=value2,...;可以插入多行:
insert into table_name values 
(value1, value2, ......),(valuem,valuen,......),(valuem,valuen,......);

eg:

指定插入列:
-- 要在values后面写与之对应的值
-- 插入的类型一定要匹配
insert into student_test(id, name, age, address, remark) 
values (1, "lihua", 20, "china", "None");不指定插入的列:
-- 插入列的顺序与创建表的时候一致
insert into student_test values (2, "zhangsan", 19, "Asia", "None");-- 插入 一条数据
insert into student_test set id=3,name="mike",age=21,address="china",remark="None";-- 还可以一次插入多行,格式就是 在前面指定的
insert into student_test(id, name, age, address, remark) values 
(4, "Jack", 20, "china", "None"), (5, "Bob", 25, "china", "None");

查询数据

查询语句:
-- 关键词 select ... from 
select * from table_name;-- * 代表选出所有列
-- 也可以写表中的列,多列使用, 分割
-- 比如 select id,name from students;
-- table_name 是表名

使用where关键词。where相当于是过滤器

eg:
-- 找出name是 zs 的表记录
select * from table_name where name='ls';-- 找出年龄大于 18岁的人
select * from table_name where age > 18;

修改数据

写update语句和delete语句一定要加where条件

更新满足条件的表记录,设置列值:
update table_name set column1=value1, column2=value2 [ where 条件];

eg:

update student_test set age = 18 where id = 4;

删除数据

删除满足条件的数据:
delete from table_name [WHERE 条件];

eg:

delete from student_test where id = 5;

特殊关键字

where(条件关键字)

  • 使用where 关键字并指定查询条件|表达式, 从数据表中获得满足条件的数据内容
  • where后面写条件,其实就是筛选出符合条件的数据
    • select就是把这些数据筛选出来展示
    • update只更新符合条件的
    • delete只删除符合条件的
  • 使用位置:查询语句(select)、更新语句(update)、删除语句(delete)

一些重要的SQL运算符

  • 算数运算符
    • 用在select后面表示我要选择的数据怎么计算出来的
    • 用在where后面表示筛选数据
运算符作用
+
-
*
/
%取余
  • 比较和逻辑运算符
运算符作用运算符作用
=等于<=>等于(可比较null)
!=不等于<>不等于
<小于>大于
<=小于等于>=大于等于
between and在闭区间内like通配符匹配(%:通配, _占位)
is null是否为nullis not null是否不为null
in不在列表内not in不在列表内
and&&
or||

  • =不能用来判断null
  • _只能匹配一次

distinct(过滤关键字)

  • 获取某个列的不重复值
  • 语法:select distinct <字段名> from <表名>;
    • 使用distinct对数据表中一个或多个字段重复的数据进行过滤,重复的数据只返回其一条数据给用户。

eg:

-- 返回所有的address
select address from student_test;-- 返回不重复的 address
select distinct address from student_test;

limit(限制结果集关键字)

select <查询内容|列等> from  <表名字> limit 记录数目;select <查询内容|列等> from  <表名字> limit 初始位置,记录数目;select <查询内容|列等> from  <表名字> limit 记录数目 offset 初始位置;

eg:

-- limit 限制了返回的最大数目
select * from student_test limit 2;-- limit offset number1, number2
-- number1:表示偏移的数量(默认是从0开始的)
-- number2:表示限制的个数
-- 从第2个开始返回,限制返回2个
select * from student_test limit 2 offset 1;
select * from student_test limit 1,2;

as(取别名关键字)

  • as 关键字用来为表和字段指定别名
  • as 可以省略
<内容> as <别名>

eg:

select address as dizhi from student_test;

order by(排序关键字)

select <查询内容|列等> from  <表名字> order by <字段名> [asc|desc];

  • order by对查询数据结果集进行排序
    • 不加排序模式: 升序排序默认
    • asc: 升序排序
    • desc: 降序排序
  • order by也可以按照多个列排序
    • 如果第一列相同,就按照第二列进行排序。如果第二列相同,则按照第三列进行排序。以此类推

eg:

select * from student_test order by age desc;select * from student_test order by age asc;

group by(分组关键字)

  • 按照某个、某些字段分组
select <查询内容|列等> from  <表名字> group by  <字段名...>
  • group by后,select中只能写group by后面的列
  • 还可以写一些聚合函数
    • group_concat()函数会把每个分组的字段值都拼接显示出来
    • having 可以让我们对分组后的各组数据过滤。(一般和分组+聚合函数配合使用)
    • round(x, d):x 指要处理的数,d 是指保留几位小数
    • min、max、sum、avg、count
  • select后 既有表结构本身的字段,又有需要使用聚合函数(count()、sum()、avg()、max()、min()等)的字段,就要用到group by分组

eg:

select group_concat(name),address from student_test group by address;-->
+--------------------+---------+
| group_concat(name) | address |
+--------------------+---------+
| zhangsan           | Asia    |
| lihua,mike,Jack    | china   |
+--------------------+---------+select group_concat(name),age,address from student_test group by age having address = "china";-->
+--------------------+------+---------+
| group_concat(name) | age  | address |
+--------------------+------+---------+
| lihua              |   20 | china   |
| mike               |   21 | china   |
+--------------------+------+---------+

group by的特点

  • group by代表分组的意思,把值相同的分到一组
  • select后面的列,只能写group by后面的列,或者聚合函数
  • 如果group by后面有多个列,会首先按照第一个列进行分组,第一个列相同,再按照第二个列进行分组
  • 如果select后面可以看出来是哪一列聚合,group by后面可以写1 2
    eg:select class, count(*) from students group by class;
    可以写成select class, count(*) from students group by 1;
  • wherehaving的区别:
    • where是原始数据进行过滤
    • having是分组之后进行过滤

聚合函数

聚合函数一般用来计算列相关的指定值. 通常分组一起使用

函数作用函数作用
count计数sum
avg平均值max最大值
min最小值

count(*)count(column_name)的区别:

  • count(*):纯粹计算有多少行
  • count(column_name):计算非null的行数

SQL语句的执行顺序

  • SQL语句的关键字是有顺序的,需要按照下面的顺序来写
select column_name, ... from table_name, ... 
[where ...][group by ...][having ...][order by ...][limit ...](5) SELECT column_name, ...:标识出来筛选的列   (1) FROM table_name, ...:打开表   (2) [WHERE ...]:过滤   (3) [GROUP BY ...]:分组   (4) [HAVING ...]:对分组后的数据进行筛选   (6) [ORDER BY ...]:对数据进行排序(7) [Limit ...]:限制

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

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

相关文章

性别和年龄的视频实时监测项目

注意&#xff1a;本文引用自专业人工智能社区Venus AI 更多AI知识请参考原站 &#xff08;[www.aideeplearning.cn]&#xff09; 性别和年龄检测 Python 项目 首先介绍性别和年龄检测的高级Python项目中使用的专业术语 什么是计算机视觉&#xff1f; 计算机视觉是使计算机能…

基于Camunda实现bpmn 2.0各种类型的任务

基于Camunda实现bpmn中各种类型任务 ​ Camunda Modeler -为流程设置器&#xff08;建模工具&#xff09;&#xff0c;用来构建我们的流程模型。Camunda Modeler流程绘图工具&#xff0c;支持三种协议类型流程文件分别为&#xff1a;BPMN、DMN、Form。 ​ Camunda Modeler下载…

配置MySQL与登录模块

使用技术 MySQL&#xff0c;Mybatis-plus&#xff0c;spring-security&#xff0c;jwt验证&#xff0c;vue 1. 配置Mysql 1.1 下载 MySQL :: Download MySQL Installer 1.2 安装 其他页面全选默认即可 1.3 配置环境变量 将C:\Program Files\MySQL\MySQL Server 8.0\bin…

【Spring Boot 源码学习】BootstrapRegistry 初始化器实现

《Spring Boot 源码学习系列》 BootstrapRegistry 初始化器实现 一、引言二、往期内容三、主要内容3.1 BootstrapRegistry3.2 BootstrapRegistryInitializer3.3 BootstrapRegistry 初始化器实现3.3.1 定义 DemoBootstrapper3.3.2 添加 DemoBootstrapper 四、总结 一、引言 前面…

Avalonia学习(二十八)-OpenGL

Avalonia已经继承了opengl&#xff0c;详细的大家可以自己查阅。Avalonia里面启用opengl继承OpenGlControlBase类就可以了。有三个方法。分别是初始化、绘制、释放。 这里把官方源码的例子扒出来给大家看一下。源码在我以前发布的单组件里面。地址在前面的界面总结博文里面。 …

YOLOv9有效改进|使用空间和通道重建卷积SCConv改进RepNCSPELAN4

专栏介绍&#xff1a;YOLOv9改进系列 | 包含深度学习最新创新&#xff0c;主力高效涨点&#xff01;&#xff01;&#xff01; 一、改进点介绍 SCConv是一种即插即用的空间和通道重建卷积。 RepNCSPELAN4是YOLOv9中的特征提取模块&#xff0c;类似YOLOv5和v8中的C2f与C3模块。 …

MySQL进阶:MySQL事务、并发事务问题及隔离级别

&#x1f468;‍&#x1f393;作者简介&#xff1a;一位大四、研0学生&#xff0c;正在努力准备大四暑假的实习、 &#x1f30c;上期文章&#xff1a;MySQL进阶&#xff1a;视图&&存储过程&&存储函数&&触发器 &#x1f4da;订阅专栏&#xff1a;MySQL进…

Docker Machine windows系统下 安装

如果你是 Windows 平台&#xff0c;可以使用 Git BASH&#xff0c;并输入以下命令&#xff1a; basehttps://github.com/docker/machine/releases/download/v0.16.0 &&mkdir -p "$HOME/bin" &&curl -L $base/docker-machine-Windows-x86_64.exe >…

点燃技能火花:探索PyTorch学习网站,开启AI编程之旅!

介绍&#xff1a;PyTorch是一个开源的Python机器学习库&#xff0c;它基于Torch&#xff0c;专为深度学习和科学计算而设计&#xff0c;特别适合于自然语言处理等应用程序。以下是对PyTorch的详细介绍&#xff1a; 历史背景&#xff1a;PyTorch起源于Torch&#xff0c;一个用于…

【真机Bug】异步加载资源未完成访问单例导致资源创建失败

1.错误表现描述 抽卡时&#xff0c;10抽展示界面为A。抽取内容可能是整卡或者碎片&#xff0c;抽到整卡&#xff0c;会有立绘展示和点击详情的按钮。点击详情后出现详情页B。【此时界面A预制体被销毁&#xff0c;卡片数据进入数据缓存池】点击页面B的返回按钮&#xff0c;单例…

C++——模版

前言&#xff1a;哈喽小伙伴们好久不见&#xff0c;这是2024年的第一篇博文&#xff0c;我们将继续C的学习&#xff0c;今天这篇文章&#xff0c;我们来习一下——模版。 目录 一.什么是模版 二.模版分类 1.函数模版 2.类模板 总结 一.什么是模版 说起模版&#xff0c;我们…

高性能通信之Netty

一, 同步IO(BIO)模型的架构 一般针对性能不高的情况下可以使用. 二,异步IO(NIO)模型的架构 多路复用(epoll模型):

【LeetCode:124. 二叉树中的最大路径和 + 二叉树+递归】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

【力扣hot100】刷题笔记Day19

前言 回溯回溯回溯&#xff01;早上整理档案竟然用了桶排序&#xff0c;不愧是算法狂魔们 79. 单词搜索 - 力扣&#xff08;LeetCode&#xff09; DFS class Solution:def exist(self, board: List[List[str]], word: str) -> bool:m, n len(board), len(board[0])# used…

谈谈高并发系统的设计方法论

谈谈高并发系统的设计方法论 何为高并发系统&#xff1f;什么是并发&#xff08;Conurrent&#xff09;&#xff1f;什么是高并发&#xff08;Hight Concurrnet&#xff09;&#xff1f;高并发的衡量指标有哪些&#xff1f; 实现高并发系统的两大板块高并发系统应用程序侧的设计…

腾讯云学生服务器使用教程_申请腾讯云学生机详细流程

2024年腾讯云学生服务器优惠活动「云校园」&#xff0c;学生服务器优惠价格&#xff1a;轻量应用服务器2核2G学生价30元3个月、58元6个月、112元一年&#xff0c;轻量应用服务器4核8G配置191.1元3个月、352.8元6个月、646.8元一年&#xff0c;CVM云服务器2核4G配置842.4元一年&…

还在用Jenkins?快来试试这款简而轻的自动部署软件!

最近发现了一个比 Jenkins 使用更简单的项目构建和部署工具&#xff0c;完全可以满足个人以及一些小企业的需求&#xff0c;分享一下。 Jpom 是一款 Java 开发的简单轻量的低侵入式在线构建、自动部署、日常运维、项目监控软件。 日常开发中&#xff0c;Jpom 可以解决下面这些…

吴恩达机器学习全课程笔记第五篇

目录 前言 P80-P85 添加数据 迁移学习 机器学习项目的完整周期 公平、偏见与伦理 P86-P95 倾斜数据集的误差指标 决策树模型 测量纯度 选择拆分方式增益 使用分类特征的一种独热编码 连续的有价值特征 回归树 前言 这是吴恩达机器学习笔记的第五篇&#xff0c…

《2023跨境电商投诉大数据报告》发布|亚马逊 天猫国际 考拉海购 敦煌网 阿里巴巴

2023年&#xff0c;跨境电商API接口天猫国际、京东国际和抖音全球购以其强大的品牌影响力和市场占有率&#xff0c;稳坐行业前三的位置。同时&#xff0c;各大跨境电商平台消费纠纷问题层出不穷。依据国内知名网络消费纠纷调解平台“电诉宝”&#xff08;315.100EC.CN&#xff…

javaEE--后端环境变量配置

目录 pre 文件准备 最终运行成功结果 后端运行步骤 1.修改setenv文件 2.运行setenv&#xff0c;设置环境变量 3.查看jdk版本 4.修改mysql文件夹下的my文件 前端运行步骤 1.nodejs环境配置 2.查看node和npm版本 3.下载并运行npm 4.注册登录 pre 文件准备 最终运行…