Java Web 学习笔记(一) —— MySQL(1)

news2024/11/26 4:29:18

目录

  • 1 SQL简介
  • 2 MySQL基本语法
    • 2.1 语法规则
    • 2.2 数据类型
  • 3 DDL
    • 3.1 操作数据库
    • 3.2 操作表
  • 4 DML
    • 4.1 添加数据
    • 4.2 修改数据
    • 4.3 删除数据
  • 5 DQL
    • 5.1 基础查询
    • 5.2 条件查询
    • 5.3 排序查询
    • 5.4 聚合查询
    • 5.5 分组查询
    • 5.6 分页查询

1 SQL简介


SQL :Structured Query Language,结构化查询语言,简称 SQL,一门操作关系型数据库的编程语言,是定义操作所有关系型数据库的统一标准

SQL 的通用语法

  • SQL 语句可以单行或多行书写,以分号结尾
  • Mysql数据库的SQL语句不区分大小写,关键字建议使用大写
  • 注释
    • 单行注释:-- 注释内容 (和注释内容之间必须有空格)或者 #注释内容(有没有空格都可以,且是 MySQL特有 的)
    • 多行注释:/*注释内容*/

SQL语言主要分为:

  • DML:数据操作语言,对数据进行增加、修改、删除,如insert、update、delete
  • DQL:数据查询语言,用于对数据进行查询,如select
  • DDL:数据定义语言,进行数据库、表的管理等,如create、drop
  • DCL:数据控制语言,进行授权与权限回收,如grant、revoke
  • TPL:事务处理语言,对事务进行处理,包括begin transaction、commit、rollback

❗️注意:

  • 对于程序员来讲,重点是数据的增、删、改、查,必须熟练编写 DQL、DML,能够编写DDL完成数据库、表的操作,其它操作如TPL、DCL了解即可.

2 MySQL基本语法

2.1 语法规则


  • 别名尽量别有空格,用下划线连接,如果是有空格则要用双引号引起来别名
  • sql 语言对大小写输入不敏感
  • 关键字不能被缩写,也不能分行
  • 各子句之间一定要分行写
  • 使用缩进提高代码的可读性(如嵌套时)

2.2 数据类型


MySQL支持多种数据类型,可以分为三类:

  • 数值
  • 日期
  • 字符串

在这里插入图片描述

注意:

  • 如果对分数设置double型可以这样写:score double(总长度/总位数,小数点后保留的位数)
  • 对于char()varchar()
    • char()是定长的,不足的部分用隐藏空格填充,会浪费空间;varchar()则是会记录字符串的实际大小,会更加节省空间
    • char查找效率会很高,varchar查找效率会更低。

CHAR:CHAR数据类型是固定长度的,这意味着每个CHAR列中的数据都具有相同的字符数。这使得在查找时,数据库系统可以更轻松地计算数据的位置,因为每个值都具有相同的大小。这可以提高查找效率。
VARCHAR:VARCHAR数据类型是可变长度的,不同行的数据长度可以不同。这使得在查找时需要更多的计算,因为数据库系统必须跟踪每个值的实际长度,这可能会导致查找效率略有降低。

3 DDL


DDL 是指操作数据库、表

3.1 操作数据库


  1. 查看 mysql 中有哪些数据库:
SHOW DATABASES;
  1. 使用指定名称的数据库:
USE 数据库名称;
  1. 创建数据库:
CREATE DATABASE [IF NOT EXISTS] 数据库名称;

IF NOT EXISTS : 加上该关键字库存在则不报错。如果没有该关键字库存在则报错。

CREATE DATABASE db1;
  1. 指定数据库的编码集:
CREATE DATABASE db2 CHARACTER SET 'gbk';
  1. 修改数据库的编码集:
ALTER DATABASE db1 CHARACTER SET 'utf8';
  1. 查看系统中的属性和值:
SHOW VARIABLES LIKE '%char%';
  1. 删除数据库:
DROP DATABASE [IF EXISTS] 数据库名称;

IF EXISTS : 加上该关键字库不存在则不报错。如果没有该关键字库不存在则报错。

DROP DATABASE db1;
  1. 查看当前使用的数据库:
SELECT DATABASE();

3.2 操作表


  1. 查看指定的数据库中有哪些数据表:
SHOW TABLES;
  1. 查看表的结构:
DESC 表名称;
  1. 查看表信息:
SHOW CREATE TABLE 表名称;

例如:

SHOW CREATE TABLE employees;
  1. 创建表

方式一:

CREATE TABLE [IF NOT EXISTS] 表名(
字段名1 类型1,
字段名2 类型2,
.....
字段名n 类型n
)CHARACTER SET '编码集';

❗️注意:

  • 最后一行末尾不能加逗号
CREATE TABLE emp(
id INT,
ename VARCHAR(20)
);
#if not exists : 加上该关键字表存在则不报错。如果没有该关键字库表在则报错。
CREATE TABLE IF NOT EXISTS emp(
id INT,
ename VARCHAR(20)
);
CREATE TABLE emp(
id INT,
ename VARCHAR(20)
)CHARACTER SET 'gbk';

注意:表的默认的编码集和库的编码集一致。

方式二:基于查询结果创建一张新表

CREATE TABLE emp
AS
SELECT first_name,salary
FROM myemployees.employees; #库名.表名

方式三:基于现有的表结构创建一张新表(表中没有内容)

CREATE TABLE [IF NOT EXISTS] 表名 LIKE 库名.表名;
CREATE TABLE emp LIKE myemployees.employees;
  1. 删除表
DROP TABLE [IF EXISTS] 表名;
  1. 修改表的名字
ALTER TABLE 原表名 RENAME TO 新表名;
  1. 向表中添加列
ALTER TABLE 表名 ADD 列名 列的数据类型;
  1. 修改某一列的数据类型
ALTER TABLE 表名 MODIFY 列名 新的数据类型;
  1. 修改表中列名和数据类型
ALTER TABLE 表名 CHANGE 原列名 新列名 新列的数据类型;
  1. 删除表中的某一列
ALTER TABLE 表名 DROP 列名;

4 DML


DML 对表中的数据进行增、删、改

4.1 添加数据


  1. 给指定列添加数据
INSERT INTO 表名(列名1,列名2,) VALUES(1,2,);
  1. 给全部列添加数据(添加单行数据)
INSERT INTO 表名 VALUES(1,2,);
  1. 批量添加数据
INSERT INTO 表名(列名1,列名2,) VALUES(1,2,),(1,2,),(1,2,);
INSERT INTO 表名 VALUES(1,2,),(1,2,),(1,2,);

注意:

  • 查询的字段的类型和个数要和被插入的字段的类型和个数保持一致
  • 如果插入的是全字段那么可以省略表名后的字段名,但实际开发时不建议

4.2 修改数据


修改表数据

UPDATE 表名 SET 列名1=1,列名2=2,[WHERE 条件];

修改语句中如果不加条件,则将所有数据都修改!

4.3 删除数据


删除数据

DELETE FROM 表名 [WHERE 条件] ;

删除语句中如果不加条件,则将所有数据都删除!

5 DQL


DML 对表中的数据进行查询

查询的完整语法

SELECT 
    字段列表
FROM 
    表名列表 
WHERE 
    条件列表
GROUP BY
    分组字段
HAVING
    分组后条件
ORDER BY
    排序字段
LIMIT
    分页限定

已存在 stu 表如下

在这里插入图片描述

5.1 基础查询


  1. 查询多个字段
SELECT 字段列表 FROM 表名;
SELECT * FROM 表名; -- 查询所有数据
  1. 去除重复记录
SELECT DISTINCT 字段列表 FROM 表名;
  1. 起别名
AS 

举例

SELECT name as 姓名,math as 数学成绩 FROM stu;
SELECT name 姓名,math 数学成绩 FROM stu; -- AS也可以省略

5.2 条件查询


SELECT 字段列表 FROM 表名 WHERE 条件列表;

条件列表可以使用以下运算符

在这里插入图片描述
示例代码

-- 1. 查询年龄大于20岁的学员信息
select * from stu where age > 20;

-- 2. 查询年龄大于等于20岁 并且 年龄 小于等于 30岁 的学员信息
--  && 和 and 都表示并且的意思。建议使用 and 
-- 也可以使用  between ... and 来实现该需求
select * from stu where age >= 20 &&  age <= 30;
select * from stu where age >= 20 and  age <= 30;
select * from stu where age BETWEEN 20 and 30;

-- 3. 查询入学日期在'1998-09-01' 到 '1999-09-01'  (日期类型)之间的学员信息
select * from stu where hire_date BETWEEN '1998-09-01' and '1999-09-01';

-- 4. 查询年龄等于18岁的学员信息
-- 注意不能使用==
select * from stu where age = 18;

-- 5. 查询年龄不等于18岁的学员信息
select * from stu where age != 18;
select * from stu where age <> 18;

-- 6. 查询年龄等于18岁 或者 年龄等于20岁 或者 年龄等于22岁的学员信息
select * from stu where age = 18 or age = 20 or age = 22;
select * from stu where age in (18,20 ,22);

-- 7. 查询英语成绩为(不为) null的学员信息
-- null值的比较不能使用 =  或者 != ,需要使用 is  或者 is not
-- select * from stu where english = null; -- 这个语句是不行的
select * from stu where english is null;
select * from stu where english is not null;

模糊查询 使用 like关键字,可以使用通配符进行占位:

  • _ : 代表单个任意字符
  • % : 代表多个任意字符
  • \:转义字符
  • escape:指定转义字符

示例代码

-- 1. 查询姓'马'的学员信息
select * from stu where name like '马%';

-- 2. 查询第二个字是'花'的学员信息 
select * from stu where name like '_花%';

-- 3. 查询名字中包含 '德' 的学员信息
select * from stu where name like '%德%';

5.3 排序查询


SELECT 字段列表 FROM 表名 ORDER BY 排序字段名1 [排序方式1],排序字段名2 [排序方式2];

上述语句中的排序方式有两种,分别是:

  • ASC : 升序排列 (默认值)
  • DESC : 降序排列

注意:如果有多个排序条件,当前边的条件值一样时,才会根据第二条件进行排序

示例代码

-- 1. 查询学生信息,按照年龄升序排列 
select * from stu order by age asc;
select * from stu order by age ; -- asc可省略

-- 2. 查询学生信息,按照数学成绩降序排列
select * from stu order by math desc ;

-- 3. 查询学生信息,按照数学成绩降序排列,如果数学成绩一样,再按照英语成绩升序排列
select * from stu order by math desc , english asc ;
select * from stu order by math desc , english;

5.4 聚合查询


聚合:将一列数据作为一个整体,进行纵向计算。

SELECT 聚合函数名(列名) FROM;

聚合函数分类

在这里插入图片描述

注意:null 值不参与所有聚合函数运算

示例代码

-- 1. 统计班级一共有多少个学生
select count(*) from stu;
select count(id) from stu; -- 8 
select count(english) from stu; -- 7,有一个学生的英语成绩为null
/*
上面语句根据某个字段进行统计,如果该字段某一行的值为null的话,将不会被统计。
所以count()里面的字段一般取主键或者*,
其中count(*)表示一行中只有有一个字段不为null,就会被统计。
*/

-- 2. 查询数学成绩的最高分
select max(math) from stu;

-- 3. 查询数学成绩的最低分
select min(math) from stu;

-- 4. 查询数学成绩的总分
select sum(math) from stu;

-- 5. 查询数学成绩的平均分
select avg(math) from stu;

-- 6. 查询英语成绩的最低分
select min(english) from stu; -- 不统计null

5.5 分组查询


SELECT 字段列表 FROM 表名 [WHERE 分组前条件限定] GROUP BY 分组字段名 [HAVING 分组后条件过滤];

示例代码

-- 1. 查询男同学和女同学各自的数学平均分
-- 分组之后,查询的字段为聚合函数和分组字段,查询其他字段无任何意义
select sex, avg(math) from stu group by sex;

-- 2. 查询男同学和女同学各自的数学平均分,以及各自人数
select sex, avg(math),count(*) from stu group by sex;

-- 3. 查询男同学和女同学各自的数学平均分,以及各自人数,要求:分数低于70分的不参与分组
select sex, avg(math),count(*) from stu where math > 70 group by sex;

-- 4. 查询男同学和女同学各自的数学平均分,以及各自人数,要求:分数低于70分的不参与分组,分组之后人数大于2
select sex, avg(math),count(*) from stu where math > 70 group by sex having count(*)  > 2;

注意:

  • 分组之后,查询的字段为聚合函数和分组字段,查询其他字段无任何意义
  • where 和 having 区别:
    • 执行时机不一样:where 是分组之前进行限定,不满足where条件,则不参与分组,而having是分组之后对结果进行过滤。
    • 可判断的条件不一样:where 不能对聚合函数进行判断,having 可以。
  • 执行顺序:where>聚合函数>having

5.6 分页查询


大家在很多网站都见过分页的效果,如京东、百度、淘宝等。分页查询是将数据一页一页的展示给用户看,用户也可以通过点击查看下一页的数据。

SELECT 字段列表 FROM 表名 LIMIT  起始索引, 查询条目数;

注意: 上述语句中的起始索引是从0开始,是针对数据条目

示例代码

-- 1. 从0开始查询,查询3条数据
select * from stu limit 0 , 3;

-- 2. 每页显示3条数据,查询第1页数据
select * from stu limit 0 , 3;

-- 3. 每页显示3条数据,查询第2页数据
select * from stu limit 3 , 3;

-- 4. 每页显示3条数据,查询第3页数据
select * from stu limit 6 , 3;

从上面的练习推导出起始索引计算公式:

起始索引 = (当前页码 - 1) * 每页显示的条数

注意:分页查询limitMysql特有的,Oracle 分页查询使用的是 rownumberSQL Server使用的是top

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

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

相关文章

iOS App Store上传项目报错 缺少隐私政策网址(URL)解决方法

iOS App Store上传项目报错 缺少隐私政策网址(URL)解决方法 一、问题如下图所示&#xff1a; 二、解决办法&#xff1a;使用Google浏览器&#xff08;翻译成中文&#xff09;直接打开该网址 https://www.freeprivacypolicy.com/free-privacy-policy-generator.php 按照要求…

蓝桥杯每日一题2023.11.3

题目描述 承压计算 - 蓝桥云课 (lanqiao.cn) 题目分析 将重量存入a中&#xff0c;每一层从上到下进行计算&#xff0c;用d进行计算列的重量&#xff0c;当前d的重量应为正上数组和右上数组的个半和并加上自身的重量 计算到30层记录最大最小值&#xff0c;进行比例运算即可 …

Ubuntu20.04搭建RISC-V和qemu环境

1. 前言 risc-v是一个非常有潜力的指令集框架&#xff0c;最近对其产生了浓厚的兴趣&#xff0c;由于之前对于这方面的知识储备很少&#xff0c;在加上网上的教程都是点到为止&#xff0c;所以安装过程异常曲折。好在最后一步一步积累摸索&#xff0c;终于利用源码安装完成。看…

python对象方法是什么

python对象方法是什么 概念 1、在类中&#xff0c;对象调用的函数称为对象方法&#xff0c;一般也称为方法。 定义格式 class 类名:def 函数1(self, 参数1, 参数2):...实例 2、在定义对象方法时&#xff0c;第一个参数默认使用self&#xff0c;这个参数在定义时必须存在&am…

new Proxy

Proxy&#xff1a;代理 - JavaScript |MDN网络 (mozilla.org) 首先要确定Proxy的入参&#xff1a;new Proxy 的两个参数分别是目标对象和处理程序。 如下&#xff0c;写了个只有两个方法的Proxy let target {name:张三,age:18}; let handler {get(target, property, recei…

今天,他们一起聊了聊数据融合|CNCC 2023

2023 年 10 月 26-28 日&#xff0c;第二十届中国计算机大会(CNCC 2023)在沈阳市举行&#xff0c;27 日下午&#xff0c;由 OceanBase 申办的「下一代数据融合技术趋势」技术论坛圆满落幕。 会上&#xff0c;OceanBase 联合多位数据库领域知名学者、专家围绕 HTAP 工作负载融合…

Vector CANape 21安装

系列文章目录 文章目录 系列文章目录简介下载 Vector CANape 21 简介 CANape基础操作介绍&#xff1a;工程创建&#xff0c;测量&#xff0c;标定&#xff0c;离线分析操作。 下载 Vector CANape 21 如下是Vector CANape21的下载安装步骤&#xff1a; https://www.vector.co…

uni-app 开发的H5 定位功能部署注意事项

一、H5部署的时候&#xff0c;如果设计到定位功能&#xff0c;需要注意以下几点 1、打包部署的时候需要在Web配置-定位和地图里面勾选一个地图&#xff0c;并配置key 2、打包部署需要域名是https协议的&#xff0c;大多数现代浏览器要求在HTTPS协议下才能够访问地理位置信息&a…

【Python基础知识四】控制语句

Python基础知识&#xff1a;控制语句 1 条件控制1.1 if语句1.2 match...case语句 2 循环语句2.1 for循环2.2 for...else语句2.3 while循环2.4 while 循环使用 else 语句2.5 无限循环 参考 Python控制语句主要包含顺序、选择和循环三个方面&#xff0c;下面主要从这三方面进行介…

winscp文件增量同步到linux服务器

一&#xff0c;点击同步 场景&#xff1a;在做服务器迁移的时候&#xff0c;文件好几十个G一天也迁移不完&#xff0c;每天还有增量的文件&#xff0c;先全量同步一次&#xff0c;然后再用增量同步&#xff0c;然后你用winscp的同步工具&#xff0c;进增量同步。 将本地文件同…

[JavaWeb]——JWT令牌技术

&#x1f308;键盘敲烂&#xff0c;年薪30万&#x1f308; 目录 一、前言&#xff1a; 二、JWT令牌技术 2.1 概念介绍 2.2 组成介绍 2.3 JWT对象介绍 2.4 JWT生成 2.5 JWT校验 三、总结 一、前言&#xff1a; 问题抛出❓ 许多网页都会设置登录界面&#xff0c;我们点击…

HarmonyOS列表组件

List组件的使用 import router from ohos.routerEntry Component struct Index {private arr: number[] [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]build() {Row() {Column() {List({ space: 10 }) {ForEach(this.arr, (item: number) > {ListItem() {Text(${item}).width(100%).heig…

光电直读水表支持短时间多次抄表吗

传统的水表读数方式已经逐渐无法满足人们对于便捷、准确的需求。为此&#xff0c;光电直读水表应运而生&#xff0c;它凭借出色的读数性能和稳定的准确性&#xff0c;赢得了广大用户的一致好评。那么&#xff0c;光电直读水表支持短时间多次抄表吗&#xff1f;答案是肯定的&…

centos7-lamp

目录 一、安装 1.关闭防火墙关闭selinux 2.安装apache 3.配置主页 二、部署mariadb&#xff08;mysql&#xff09; 1.用yum安装 2.启动数据库 3.看下端口是否listen 4登录mysql 5.修改下密码 三、安装php 1.安装依赖包 2.安装php解释器和php连接mysql驱动 3.配置…

网站文章收录因素,别人复制文章排名比你原创的好?

我经常看到有站长抱怨“网站不收录”&#xff0c;“排名不好”&#xff0c;“复制的文章为什么秒收”之类的问题。对于SEO从业者来说&#xff0c;这确实是一个打击&#xff0c;认为搜索引擎不公平。凭什么自己原创不收录&#xff0c;别人复制去了&#xff0c;秒收他的&#xff…

ClickHouse 学习之从高级到监控以及备份(二)

第 一 部分 高级篇 第 1 章 Explain 查看执行计划 在 clickhouse 20.6 版本之前要查看 SQL 语句的执行计划需要设置日志级别为 trace 才能可以看到&#xff0c;并且只能真正执行 sql&#xff0c;在执行日志里面查看。在 20.6 版本引入了原生的执行计划的语法。在 20.6.3 版本成…

库房管理软件采购申请流程代码实现解析

300rmb掏了个javavue2的小系统&#xff0c;学习代码&#xff0c;调整下申请流程。 原有的入库流程是&#xff0c;库管&#xff08;admin&#xff09;提出采购申请给采购员&#xff08;caigou&#xff09;&#xff0c;采购员采购入库时点击入库完成采购入库流程。 想弄清后端代…

基于深度学习之基于KNN算法智慧体育检测系统

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 智慧体育检测系统是一种基于K最近邻&#xff08;KNN&#xff09;算法的人工智能系统&#xff0c;旨在分析和评估个体…

Docker DeskTop安装与启动(Windows版本)

一、官网下载Docker安装包 Docker官网如下&#xff1a; Docker官网不同操作系统下载页面https://docs.docker.com/desktop/install/windows-install/ 二、安装Docker DeskTop 2.1 双击 Docker Installer.exe 以运行安装程序 2.2 安装操作 默认勾选&#xff0c;具体操作如下…

HCL模拟器综合实验案例(2)

本案例提供给计算机网络专业学生以及参加新华三杯的同学进行学习 题目 由于公司并购前的历史原因导致双方使用不同的 OSPF 进程&#xff0c;经由总部技术部统一规划后再做调整&#xff0c;现阶段使用暂时过渡方案&#xff0c;即使用静态路由、OSPF、RIP、BGP多协议组网&#x…