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 ...]:限制

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

MATLAB练习题:排队论问题的模拟

​讲解视频&#xff1a;可以在bilibili搜索《MATLAB教程新手入门篇——数学建模清风主讲》。​ MATLAB教程新手入门篇&#xff08;数学建模清风主讲&#xff0c;适合零基础同学观看&#xff09;_哔哩哔哩_bilibili 下面我们来看一道排队论的题目。假设某银行工作时间内只有一个…

Java多线程导入Excel示例

在导入Excel的时候&#xff0c;如果文件比较大&#xff0c;行数很多&#xff0c;一行行读往往速度比较慢&#xff0c;为了加快导入速度&#xff0c;我们可以采用多线程的方式 话不多说直接上代码 首先是Controller import com.sakura.base.service.ExcelService; import com.s…

ADBMS1818芯片资料介绍(1)

ADBMS1818数据手册和产品信息 | Analog Devices 一、芯片简介  可测量多达18串电池电压  3 mV最大总测量误差  内置isoSPI接口  使用单根双绞线&#xff0c;长达100米  290 μs内可完成系统中所有单体电池电压测量 二、芯片内核和isoSPI状态 ADBMS1818内核状态说明…

Mac清理电脑垃圾工具CleanMyMac X4.15中文免费版下载

嘿&#xff0c;亲爱的Mac用户们&#xff0c;你们是否曾经想象过你的电脑是一座美丽的城市&#xff0c;而垃圾文件则是那些不速之客&#xff0c;悄悄堆积&#xff0c;影响着城市的整体美观。今天&#xff0c;我们就来聊聊Mac为什么会产生垃圾文件&#xff0c;这些垃圾文件会对你…

Java基于微信小程序的4S店汽车保养小程序

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…

分类问题经典算法 | 二分类问题 | Logistic回归:公式推导

目录 一. Logistic回归的思想1. 分类任务思想2. Logistic回归思想 二. Logistic回归算法&#xff1a;线性可分推导 一. Logistic回归的思想 1. 分类任务思想 分类问题通常可以分为二分类&#xff0c;多分类任务&#xff1b;而对于不同的分类任务&#xff0c;训练的主要目标是…

基于python+django的求职招聘管理系统源码+开发文档

该系统是基于pythondjango的求职招聘网站、网上招聘管理系统、网上人才招聘系统、毕业生求职招聘系统、大学生求职招聘系统、校园招聘系统、企业招聘系统。写了2周&#xff0c;给师弟的课程作业。 源码地址 https://github.com/geeeeeeeek/python_job 功能介绍 平台采用B/S结…

2.25_模式识别大作业的三种方法

filename sys.argv[1] df pd.read_csv(filename,index_col["ID"]) ax df.plot() ax.set_xlabel("Data_ID") ax.set_ylabel("load_value") plt.show() 这段代码是用来读取一个CSV文件&#xff0c;并将文件中的数据绘制成一个简单的折线图。 在…

202435读书笔记|《半小时漫画中国史》——读点经济学与历史,生活更美好,趣味烧脑土地制度、商鞅变法、华丽丽的丝绸之路这里都有

202435读书笔记|《半小时漫画中国史》——读点经济学与历史&#xff0c;生活更美好&#xff0c;趣味烧脑土地制度、商鞅变法、华丽丽的丝绸之路这里都有 1. 土地政策、度量衡及税收2. 商鞅变法3. 西汉经济4. 西汉盐铁大辩论5. 西汉丝绸之路 《半小时漫画中国史&#xff1a;经济…

bert 相似度任务训练,简单版本

目录 任务 代码 train.py predit.py 数据 任务 使用 bert-base-chinese 训练相似度任务&#xff0c;参考&#xff1a;微调BERT模型实现相似性判断 - 知乎 参考他上面代码&#xff0c;他使用的是 BertForNextSentencePrediction 模型&#xff0c;BertForNextSentencePred…

一文讲透:可视化大屏中3D元素的融入和使用方法

在可视化大屏中&#xff0c;3D元素融入的越来越多&#xff0c;贝格前端工场经常接到这类项目&#xff0c;很多老铁认为加个3D效果很easy&#xff0c;其实不然&#xff0c;工序非常复杂&#xff0c;总结如下。 一、什么是3D技术 三维展示&#xff08;3D展示&#xff09;是指使用…

gpt生成器,批量gpt文章生成器

GPT&#xff08;生成式预训练模型&#xff09;生成器软件在当今的数字化时代扮演着越来越重要的角色&#xff0c;它们通过人工智能技术&#xff0c;可以自动生成各种类型的文章内容&#xff0c;为用户提供了无限的创作可能性。本文将介绍6款不同的GPT生成器软件&#xff0c;并介…

退休教师40年教龄补贴多少钱

那些默默奉献了四十年的老教师&#xff0c;他们退休后能得到多少补贴&#xff1f;今天&#xff0c;就让我们一起揭开这层面纱&#xff0c;看看教师退休金背后的故事。 教师这份职业&#xff0c;不仅仅是传授知识那么简单。它更代表着一种责任&#xff0c;一种对下一代无尽的关爱…

什么是微前端

微前端是一种web应用构建方式。 微前端在2016年ThoughtWorks Technology Radar正式被提出。微服务这个被广泛应用于服务端的技术范式扩展到前端领域。现代的前端应用的发展趋势正在变得越来越富功能化&#xff0c;富交互化&#xff0c;也就是SPA应用&#xff1b;这样越来越复杂…

word文档空格不能有下划线【笔记】

word文档空格不能有下划线 2024-3-1 21:20:24 推荐 word下划线打不出来了&#xff0c;是怎么回事&#xff1f; 问题 字后面打不出来下划线 操作 1.点击文件 左上角&#xff0c;点击“文件”。 2.点击选项 鼠标下滑&#xff0c;点击“选项”。 3.点击常规与保存 点击“…

CY8C42(未知.UDB模块使用)

开发UDB模块要用到verilog了 虽然官方给出了图形配置&#xff0c;但是完全看不懂。 没办法&#xff0c;我先去学FPGA了&#xff0c;去买矿卡了。 后面等学一点FPGA再来更新吧&#xff0c;可能PSOC里面有些内容会随机更新吧。 官方给了一份文档&#xff0c;链接在这&#xff0…

使用el-form之表单校验自动定位到报错位置问题,,提升用户体验

需求描述 由于需要填写的表单项太多&#xff0c;提交的时候校验不通过&#xff0c; 如果没填写的表单项在最上面&#xff0c;用户看不到不知道发生了啥&#xff0c; 所以需要将页面滚动定位到第一个报错的表单项位置&#xff0c;提升用户体验实现步骤 1. 给form表单添加ref …

智慧楼宇的心脏:E6000物联网主机

智慧楼宇是指通过全面覆盖的感知设备和互联网技术&#xff0c;为建筑提供高效、舒适、安全、环保、可持续的智能化服务。 在科技快速发展的今天&#xff0c;智慧楼宇已经不再是遥不可及的梦想。而在这个梦想成真的过程中&#xff0c;物联网主机扮演着至关重要的角色。它如同智慧…

加密与安全_深入了解Hmac算法(消息认证码)

文章目录 PreHMAC概述常见的Hmac算法Code随机的key的生成 KeyGeneratorHmacMD5用Hmac算法取代原有的自定义的加盐算法 HmacMD5 VS MD5HmacSHA256 Pre 加密与安全_深入了解哈希算法中我们提到&#xff0c; 存储用户的哈希口令时&#xff0c;要加盐存储&#xff0c;目的就在于抵…

手写数字识别(慕课MOOC人工智能之模式识别)

问题&#xff1a;手写数字识别 数据集 数据集链接请点击我 代码 %mat2vector.m function [data_] mat2vector(data,num)[row,col,~] size(data);data_zeros(num,row*col);for page 1:numfor rows 1:rowfor cols1:coldata_(page,((rows-1)*colcols)) im2double(data(rows,cols…