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.rhkb.cn/news/267366.html

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

相关文章

GO—函数

Go 语言支持普通函数、匿名函数和闭包&#xff0c;从设计上对函数进行了优化和改进&#xff0c;让函数使用起来更加方便。 Go 语言的函数属于“一等公民”&#xff08;first-class&#xff09;&#xff0c;也就是说&#xff1a; 函数本身可以作为值进行传递。支持匿名函数和闭…

Android 混淆是啥玩意儿?

什么是混淆 Android混淆&#xff0c;是伴随着Android系统的流行而产生的一种Android APP保护技术&#xff0c;用于保护APP不被破解和逆向分析。简单的说&#xff0c;就是将原本正常的项目文件&#xff0c;对其类、方法、字段&#xff0c;重新命名a,b,c…之类的字母&#xff0c…

假如有n个台阶,一次只能上1个台阶或2个台阶,请问走到第n个台阶有几种走法?

说明如下:假如有 3个台阶&#xff0c;那么总计就有3种走法:第一种为每次上1个台阶&#xff0c;上3次;第二种为先上2个台阶&#xff0c;再上1个台阶;第三种为先上1个台阶&#xff0c;再上2个台阶。 解决方法&#xff1a;递归 代码展示&#xff1a; #include <stdio.h> …

SD NAND:为车载显示器注入智能与安全的心脏

SD NAND 在车载显示器的应用 在车载显示器上&#xff0c;SD NAND&#xff08;Secure Digital NAND&#xff09;可以有多种应用&#xff0c;其中一些可能包括&#xff1a; 导航数据存储&#xff1a; SD NAND 可以用于存储地图数据、导航软件以及车载系统的相关信息。这有助于提…

【Vue3】插槽使用和animate使用

插槽使用 插槽slot匿名插槽具名插槽插槽作用域简写 动态插槽transition动画组件自定义过渡class类名如何使用animate动画库组件动画生命周期appear transition- group过渡列表transition- group平面过渡代码展示 gsap动画库 状态过渡 插槽slot 插槽就是子组件中提供给父组件使…

备战蓝桥杯---状态压缩DP进阶题1

我们来看一看一道比较难的问题&#xff08;十分十分的巧妙&#xff09;&#xff1a; 显然我们应该一行一行放&#xff0c;又竖的会对下一行产生影响&#xff0c;我们令横着放为0&#xff0c;竖着放的上方为1. 对于下一行&#xff0c;前一行放1的下面为0&#xff0c;但是会出现…

Python 实现Excel自动化办公(中)

在上一篇文章的基础上进行一些特殊的处理&#xff0c;这里的特殊处理主要是涉及到了日期格式数据的处理&#xff08;上一篇文章大家估计也看到了日期数据的处理是不对的&#xff09;以及常用的聚合数据统计处理&#xff0c;可以有效的实现你的常用统计要求。代码如下&#xff1…

Python爬虫——Urllib库-2

编解码 问题引入 例如&#xff1a; https://www.baidu.com/s?wd章若楠 https://www.baidu.com/s?wd%E7%AB%A0%E8%8B%A5%E6%A5%A0 第二部分的一串乱码就是章若楠 如果这里是写的章若楠就会 产生这样的错误 所以我们就可以使用get请求方式的quote方法了 get请求方式的q…

YOLOv9:使用可编程梯度信息学习您想学习的内容

摘要 arxiv.org/pdf/2402.13616.pdf 当今的深度学习方法侧重于如何设计最合适的目标函数,以便模型的预测结果能最接近于实际结果。同时,还必须设计一个适当的架构,以便于获取足够的预测信息。现有的方法忽略了一个事实,即当输入数据经历层层特征提取和空间变换时,会损失…

(学习日记)2024.02.29:UCOSIII第二节

写在前面&#xff1a; 由于时间的不足与学习的碎片化&#xff0c;写博客变得有些奢侈。 但是对于记录学习&#xff08;忘了以后能快速复习&#xff09;的渴望一天天变得强烈。 既然如此 不如以天为单位&#xff0c;以时间为顺序&#xff0c;仅仅将博客当做一个知识学习的目录&a…

BUGKU 本地管理员

打开环境&#xff0c;先F12查看看到一串代码。Base64解码一下&#xff0c;得到的应该是密码&#xff0c;然后输入admin | test123试一下 使用BP抓包&#xff0c;修改XFF&#xff0c;得到flag

社区分享|中华保险基于MeterSphere开展接口自动化测试

中华联合保险集团股份有限公司&#xff08;以下简称为“中华保险”&#xff09;始创于1986年&#xff0c;是全国唯一一家以“中华”冠名的国有控股保险公司。截至2022年12月底&#xff0c;中华保险总资产为1006.06亿元&#xff0c;在全国拥有超过2900个营业网点&#xff0c;员工…

破解SQL Server迷局,彻底解决“管道的另一端无任何进程错误233”

问题描述&#xff1a;在使用 SQL Server 2014的时候&#xff0c;想用 SQL Server 身份方式登录 SQL Servcer Manager&#xff0c;结果报错&#xff1a; 此错误消息&#xff1a;表示SQL Server未侦听共享内存或命名管道协议。 问题原因&#xff1a;此问题的原因有多种可能 管道…

SpringBoot整合JdbcTemplate

✅作者简介:大家好,我是Leo,热爱Java后端开发者,一个想要与大家共同进步的男人😉😉 🍎个人主页:Leo的博客 💞当前专栏: 循序渐进学SpringBoot ✨特色专栏: MySQL学习 🥭本文内容:SpringBoot整合JdbcTemplate 📚个人知识库: Leo知识库,欢迎大家访问 目录 …

openGauss学习笔记-232 openGauss性能调优-系统调优-资源负载管理-资源管理准备-资源规划

文章目录 openGauss学习笔记-232 openGauss性能调优-系统调优-资源负载管理-资源管理准备-资源规划 openGauss学习笔记-232 openGauss性能调优-系统调优-资源负载管理-资源管理准备-资源规划 完成资源负载管理功能配置前&#xff0c;需要先根据业务模型完成租户资源的规划。业…

fastjson反序列化漏洞

fastjson反序列化漏洞 文章目录 fastjson反序列化漏洞1.漏洞原理2.探测方式2.1 查看回显2.2 LDAP/RMI服务测试 3.LDAP/RMI服务搭建要求4.漏洞复现4.1 fastjson <1.2.47 反序列化导致任意命令执行漏洞4.1.1 环境准备4.1.2 复现过程 4.2 fastjson <1.2.24 反序列化导致任意…

simple-pytest 框架使用指南

simple-pytest 框架使用指南 一、框架介绍简介框架理念&#xff1a;框架地址 二、实现功能三、目录结构四、依赖库五、启动方式六、使用教程1、快速开始1.1、创建用例&#xff1a;1.2、生成py文件1.3、运行脚本1.3.1 单个脚本运行1.3.2 全部运行 1.4 报告查看 2、功能介绍2.1、…

vue2 开发记录

el-select 如何修改选择项的样式/el-select-dropdown__item 文字上下显示 测试代码 <div stylemargin-left: 100px><!-- 测试代码--><el-select filterablesizemini><div classxxx-el-select><el-optionv-foritem in [{key:1,des:2,…

web自动化笔记八:滚动条处理和窗口截屏

一、滚动条处理 ①为什么要操作滚动条&#xff1f; 1. 在HTML页面中&#xff0c;由于前端技术框架的原因&#xff0c;页面元素为动态显示&#xff0c;元素根据滚动条的下拉而被加载 2. 页面注册同意条款&#xff0c;需要滚动条到最底层&#xff0c;才能点击…

vue cesium加载点与定位到指定位置

vue cesium定位到指定位置 window.viewer.camera.flyTo({destination: Cesium.Cartesian3.fromDegrees(point.longDeg, point.latDeg, 6500000), orientation: {heading: 6.2079384332084935, roll: 0.00031509431759868534, pitch: -1.535}, duration: 3})vue cesium加载点 …