1_SQL

news2024/12/27 10:47:24

文章目录

  • 前端复习
  • 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.coloradmin.cn/o/1481950.html

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

相关文章

【GPU驱动开发】- AST简介

前言 不必害怕未知&#xff0c;无需恐惧犯错&#xff0c;做一个Creator&#xff01; AST&#xff0c;抽象语法树&#xff0c;是一种包含丰富语义信息的格式&#xff0c;其中包括类型、表达式树和符号等。 TranslationUnitDecl&#xff1a;该类表示一个输入源文件 ASTContext&…

常见的开源人脸检测模型有哪些

阅读本文之前可以先参阅----神经网络中的重要概念 如何快速入门深度学习 人工智能模型与人脸检测模型详解 一、人工智能模型概述 人工智能&#xff08;Artificial Intelligence, AI&#xff09;模型&#xff0c;是指通过计算机算法和数学统计方法&#xff0c;模拟人类智能行为…

C习题003:球筐投球(一排)

题目 输入样例 在这里给出一组输入。例如&#xff1a; 5 3 7 5 7 7 3 1 5 3 1 5 2 4 4 4输出样例 在这里给出相应的输出。例如&#xff1a; 12 10 12 16 8代码长度限制 16 KB 时间限制400 ms 内存限制 64 MB 栈限制 8192 KB 代码 #include<stdio.h> int main() {int…

Netty5 入门HelloWorld

一、客户端代码及关键类说明 /*** netty5的客户端* author -zhengzx-**/ public class ClientSocket {public static void main(String[] args) {//服务类Bootstrap bootstrap new Bootstrap();//workerEventLoopGroup worker new NioEventLoopGroup();try {//设置线程池boo…

javaScript 深浅拷贝

javaScript深浅拷贝 浅拷贝 自己创建一个新的对象&#xff0c;来接受你要重新复制或引用的对象值。如果对象属性是基本的数据类型&#xff0c;复制的就是基本类型的值给新对象&#xff0c;但如果属性是引用数据类型&#xff0c;复制的就是内存中的地址&#xff0c;如果其中一个…

1907_Arm Cortex-M3的基本了解

1907_Arm Cortex-M3的基本了解 全部学习汇总&#xff1a; g_arm_cores: ARM内核的学习笔记 (gitee.com) 我发现Arm Coretex-M3有一个专门的DataSheet&#xff0c;看起来这个的确是被当做了一个设计的产品来对待的。正好&#xff0c;基于这个文件来看看M3具备哪些基本的特性&…

http状态,cookie、session、token的对比

http是无状态的&#xff0c;也就是说断开会话了服务器就不记得任何事情了&#xff0c;但这样对于用户会很麻烦&#xff0c;因为要不停输入用户名和密码 cookie是放在浏览器里的数据&#xff0c;第一次访问后服务器会set cookie&#xff0c;然后浏览器保存这个cookie&#xff0…

Java基于微信小程序的房屋租赁、租房小程序,附源码

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

计算机网络_2.1 物理层概述

2.1 物理层概述 一、物理层要实现的功能二、物理层接口特性 B站 深入浅出计算机网络 2.1物理层概述 一、物理层要实现的功能 物理层要实现的功能就是在各种传输媒体上传输比特0和1&#xff0c;进而给上面的数据链路层提供透明传输比特流的服务。 数据链路层“看不见”&#xff…

cpp基础学习笔记03:类型转换

static_cast 静态转换 用于类层次结构中基类和派生类之间指针或者引用的转换。up-casting (把派生类的指针或引用转换成基类的指针或者引用表示)是安全的&#xff1b;down-casting(把基类指针或引用转换成子类的指针或者引用)是不安全的。用于基本数据类型之间的转换&#xff…

微服务day02-Ribbon负载均衡与Nacos安装与入门

一.Ribbon负载均衡 在上一节中&#xff0c;我们通过在RestTemplte实例中加上了注解 LoadBalanced,表示将来由RestTemplate发起的请求会被Ribbon拦截和处理&#xff0c;实现了访问服务时的负载均衡&#xff0c;那么他是如何实现的呢&#xff1f; 1.1 Ribbon负载均衡的原理 Rib…

(定时器/计数器)中断系统(详解与使用)

讲解 简介 定时器/计数器 定时器实际上也是计数器,只是计数的是固定周期的脉冲 定时和计数只是触发来源不同(时钟信号和外部脉冲)其他方面是一样的。 定时器在单片机内部就像一个小闹钟一样,根据时钟的输出信号,每隔“一秒”,计数单元的数值就增加一,当计数单元数值…

[pdf]《软件方法》2024版部分公开-共196页

DDD领域驱动设计批评文集 做强化自测题获得“软件方法建模师”称号 《软件方法》各章合集 潘加宇《软件方法》2024版部分公开pdf文件&#xff0c;共196页&#xff0c;已上传CSDN资源。 也可到以下地址下载&#xff1a; http://www.umlchina.com/url/softmeth2024.html 如果…

韦东山嵌入式Liunx入门驱动开发四

文章目录 一、异常与中断的概念及处理流程1-1 中断的引入1-2 栈(1) CPU实现a ab的过程(2) 进程与线程 1-3 Linux系统对中断处理的演进1-4 Linux 中断系统中的重要数据结构(1) irq_desc 结构体(2) irqaction 结构体(3) irq_data 结构体(4) irq_domain 结构体(5) irq_domain 结构…

T3SF:一款功能全面的桌面端技术练习模拟框架

关于T3SF T3SF是一款功能全面的桌面端技术练习模拟框架&#xff0c;该工具针对基于主场景事件列表的各种事件提供了模块化的架构&#xff0c;并包含了针对每一个练习定义的规则集&#xff0c;以及允许为对应平台参数定义参数的配置文件。 该工具的主模块能够执行与其他特定模…

BetterDisplay Pro for Mac v2.0.11激活版:屏幕显示优化专家

BetterDisplay Pro是一款由waydabber开发的Mac平台上的显示器校准软件&#xff0c;可以帮助用户调整显示器的颜色和亮度&#xff0c;以获得更加真实、清晰和舒适的视觉体验。 软件下载&#xff1a;BetterDisplay Pro for Mac v2.0.11激活版下载 &#x1f50d; 精准校准&#xf…

Python实现DMI工具判断信号:股票技术分析的工具系列(3)

Python实现DMI工具判断信号&#xff1a;股票技术分析的工具系列&#xff08;3&#xff09; 介绍算法解释 代码rolling函数介绍完整代码 介绍 先看看官方介绍&#xff1a; DMI (趋向指标&#xff09; 用法 1.PDI线从下向上突破MDI线&#xff0c;显示有新多头进场&#xff0c;为…

vscode+remote突然无法连接服务器以及ssh连接出问题时的排错方法

文章目录 设备描述状况描述解决方法当ssh连接出问题时的排错方法 设备描述 主机&#xff1a;win11&#xff0c;使用vscode的remote-ssh插件 服务器&#xff1a;阿里云的2C2GUbuntu 22.04 UFIE 状况描述 之前一直使用的是vscode的remote服务&#xff0c;都是能够正常连接服务…

LabVIEW流量控制系统

LabVIEW流量控制系统 为响应水下航行体操纵舵翼环量控制技术的试验研究需求&#xff0c;通过LabVIEW开发了一套小量程流量控制系统。该系统能够满足特定流量控制范围及精度要求&#xff0c;展现了其在实验研究中的经济性、可靠性和实用性&#xff0c;具有良好的推广价值。 项…

在学习云原生的时候,一直会报错ImagePullBackOff Back-off pulling image

在学习云原生的时候&#xff0c;一直会报错 &#xff08;见最后几张图&#xff09; ImagePullBackOff Back-off pulling image 然后我就在像。这个配置的镜像是不是可以自己直接下载&#xff0c;但是好像不怎么搜索得到 然后就在想&#xff0c;这个lfy_k8s_images到底是个啥玩…