【Java.mysql】——增删查改(CRUD)之 增查(CR) 附加数据库基础知识

目录

🚩数据库操作

🎈创建数据库

🎈使用数据库

🎈删除数据库

🚩数据类型

🚩表的操作

🎈创建表

🌈查看表结构

🎈删除表

❗练习(综合运用)

🖥️新增数据

📝单行数据 + 全列插入

📝多行数据 + 指定列插入

🖥️查询(Retrieve)

📝全列查询

📝指定列查询

📝查询字段为表达式

📝别名

📝去重:DISTINCT

📝排序:ORDER BY

📝条件查询:WHERE

✅select条件查询执行顺序


这是准备工作,数据库是大小写不区分的,所以我建议是大家都写小写,可读性好。

🚩数据库操作

🎈创建数据库

创建数据库的语法就是 

 create database zyficl;

我们也可以加上 if not exists 代表的意思是 如果你现在创建的数据库存在那么就不添加,反之添加。 (如果你所创建的数据库已经存在,但是你没有添加if not exists,那么就会报错)

所以我们以后可以加上上面一段,那样就不会报错了


说明:当我们创建数据库没有指定字符集和校验规则时,系统使用默认字符集:utf8,校验规则
是:utf8_ general_ ci,MySQL的utf8编码不是真正的utf8,没有包含某些复杂的中文字符。MySQL真正的utf8是使用utf8mb4,建议大家都使用utf8mb4
设置字符集 
CHARACTER SET 字符集;

所以最完美的写法就是:

 create database if not exists do_test character set utf8mb4;

🎈使用数据库

因为我们再进入命令行中的时候,默认是系统的数据库,我们一般都不在系统默认的数据库下进行数据的增删查改,而是在自己所建的数据库中对数据管理,所以我们就要 进入自己的数据库中,这时候我们就用到下面的语句:

use 数据库名;

🎈删除数据库

drop database [if exists] db_name;

上面增加数据库用到if not exists表示是否不存在 ,现在删除数据库需要用到if exists表示是否存在。

数据库删除以后,内部看不到对应的数据库,里边的表和数据全部被删除,所以要慎重删除。

🚩数据类型

我们下面会根据题目来针对性的对一些数据类型进行描述,我们现在利用主要的几个类型

INT:整型
比如 年龄,商品编号,身份证号等等这些是int类型。
DECIMAL(M, D):浮点数类型
钱价格这个基本上都是精确到小数位,比如99.9 
这里的decimal中的俩个参数分别是 M表示长度 D是代表小数点位数。比如99.9 M是3 D是1,长度是3,小数点位数是1.像100.0,100,1.25,都是不合法的。
VARCHAR(SIZE):字符串类型
并不说是size大小的,而是如果你达到size大小的时候 是可变的。
CHAR(SIZE):字符类型
是不可变长的
TIMESTAMP:日期类型

DATETIME:日期类型

后面再插入数据的时候会详细说明。


🚩表的操作

需要操作数据库中的表时,我们需要先使用数据库。

use 数据库名;

🎈创建表

可以使用comment增加字段说明

CREATE TABLE table_name (
 field1 datatype,  字段 类型
 field2 datatype,  字段 类型
 field3 datatype   字段 类型
);

我们创建一个学生表里面包含的字段 (姓名,年龄,密码,性别,身高,体重,生日,留言)

🌈查看表结构


🎈删除表

-- 删除 stu_test 表
drop table stu_test;
-- 如果存在 stu_test 表,则删除 stu_test 表
drop table if exists stu_test;

❗练习(综合运用)

商品 goods( 商品编号 goods_id ,商品名 goods_name, 单价 unitprice, 商品类别 category,
应商 provider)
1.创建数据库 并且设置编码 utf8mb4
 create database if not exists test_goods
  default character set utf8mb4;

2.选择数据库

 use test_goods;
3.创建goods表并添加字段
商品 goods( 商品编号 goods_id ,商品名 goods_name, 单价 unitprice, 商品类别 category,
应商 provider)
create table if not exists goods(
     goods_id int comment'商品编号',
     goods_name varchar(32) comment'商品名称',
     unitprice int comment'单价.单位分',
     category varchar(12) comment'商品分类',
     provider varchar(64) comment'供应商名称'
  );
对于钱最好的设定类型是int,因为 0.5元相当于 50分. 

🖥️新增数据

个数,类型要和表结构匹配。

现在创建一个学生表

drop table if exists student;
create table student(
     id int,
     sn int comment'学号',
     name varchar(20) comment'姓名',
     qq_mail varchar(20) comment'qq邮箱'
     ) default character set utf8;

📝单行数据 + 全列插入

insert into 表名 values(值,值,值....);
插入两条记录,value_list 数量必须和定义表的列的数量及顺序一致
insert into student values(100,10000,"唐三藏",NULL);
 insert into student values(101,10001,"孙悟空","1111");

📝多行数据 + 指定列插入

insert into 表名(列名,列名....)values(值,值.....);

只给某指定的列进行插入数据。其实就是增加行元素。

insert into student(id,sn,name)values
    (102,20001,"曹孟德"),
    (103,20002,"孙仲谋");

补充:

在MySQL中,你可以使用DATETIME数据类型来表示日期和时间。DATETIME类型以'YYYY-MM-DD HH:MM:SS'的格式存储日期和时间。

以下是如何在MySQL中使用DATETIME类型的示例:

CREATE TABLE example_table ( id INT AUTO_INCREMENT PRIMARY KEY, event_datetime DATETIME );

在这个示例中,我们创建了一个名为example_table的表,其中包含一个名为event_datetime的DATETIME类型列。

你可以使用INSERT语句向表中插入日期时间值,如下所示:

INSERT INTO example_table (event_datetime) VALUES ('2024-03-09 15:30:00');

你也可以使用DATETIME函数来获取当前日期时间

INSERT INTO example_table (event_datetime) VALUES (NOW());

在检索数据时,DATETIME值将以'YYYY-MM-DD HH:MM:SS'的格式返回。


🖥️查询(Retrieve)

📝全列查询

select*from 表名; //行和列都查询出来

这就是我们刚刚插入的数据。
我们新建一个表更加直观的用于下面的案例: -- 创建考试成绩表
create table if not exists exam_result(
     id int,
     name varchar(20),
     chinese decimal(3,1),
     math decimal(3,1),
     english decimal(3,1)
 )default character set utf8;
-- 插入测试数据
INSERT INTO exam_result (id,name, chinese, math, english) VALUES
 (1,'唐三藏', 67, 98, 56),
 (2,'孙悟空', 87.5, 78, 77),
 (3,'猪悟能', 88, 98.5, 90),
 (4,'曹孟德', 82, 84, 67),
 (5,'刘玄德', 55.5, 85, 45),
 (6,'孙权', 70, 73, 78.5),
 (7,'宋公明', 75, 65, 30);

📝指定列查询

指定列的顺序不需要按定义表的顺序来
select 列名,列名,列名 from 表名;
select id,name,english from exam_result;

我指定要查找姓名,英语成绩,id号从成绩表中:


📝查询字段为表达式

查询每个学生语文数学英语的总成绩:

select name,chinese+english+math from exam_result;

-- 表达式不包含字段
SELECT id, name, 10 FROM exam_result;
-- 表达式包含一个字段
SELECT id, name, english + 10 FROM exam_result;
-- 表达式包含多个字段
SELECT id, name, chinese + math + english FROM exam_result;

补充:

SELECT id, name, english + 10 FROM exam_result;

mysql是一个“客户端服务器”结构程度。我们看到上面的结果后,我们得出一个结论:把这一列所有的行带入到表达式中,参与运算,操作不会修改数据库服务器上原始的数据,最终只是临时结果做计算,服务器读出来的时候,返回客户端,以临时表的形式(只出现一次i)


📝别名

为查询结果中的列指定别名,表示返回的结果集中,以别名作为该列的名称,语法
select 列名 as 别名 from 表名;
select name,math+english+chinese as total from exam_result;


📝去重:DISTINCT

我增加一个和唐三藏一样的数学成绩的陈陈,然后我要去重相同的数学成绩

一列:

我们看到最后的98.0和第一个98.0删除了,最后只保留一个。

俩列:

如果是俩列必须是俩者都相同才能去重,如果俩者都相同只保留一个操作。不相同删除不了。

我现在插入一个姓名"陈陈”,数学成绩是98.0的

insert into exam_result (name,math) values ("陈陈",98.0);

此时我来去重:此时就剩下一个了。


📝排序:ORDER BY

明确排序规则:以行排列 但是比较的是列与列之间。

  • a.针对哪个列进行比较
  • b.升序(asc),降序(desc),默认是asc
select 列名 from 表名 order by 列名 (asc/desc/不写);

1. 没有 ORDER BY 子句的查询,返回的顺序是未定义的,永远不要依赖这个顺序 

sql不加order by 此时查询结果数据顺序,是不确定/无序 的,因为我们在自己机器上做的是一些简单的操作,顺序没变,但是如果进行一些更复杂的操作,就不一定了。(意思就是如果我们查看全列表数据,因为我们插入的数据都是简单的,所以每次查看到的时候发现都是一样的排序,但是如果我们操作的复杂,那么会导致每次查看数据的时候就不一定是还是和之前一次是一样的。

我们不能依赖顺序,尤其在代码中,不能依靠上述顺序展开逻辑,因为数据库没有承诺你这个数据库是有序的。所以在后来我们运用了复杂的操作,每次操作展示的顺序是不同的,是不确定。


2. NULL 数据排序,视为比任何值都小,升序(src)出现在最上面,降序(desc)出现在最下面

3.使用表达式及别名排序

4. 可以对多个字段进行排序,排序优先级随书写顺序


📝条件查询:WHERE

会指定具体的条件,按照条件针对数据进行筛选。

sql中没有==,使用=表示比较相等。
NULL+98+NULL => NULL<200 => NULL =>false
=等于,NULL 不安全,例如 NULL = NULL 的结果是 NULL
<=> 等于,NULL 安全,例如 NULL <=> NULL 的结果是 TRUE(1)
!= , <>不等于
BETWEEN a0 AND a1  范围匹配,[a0, a1],如果 a0 <= value <= a1,返回 TRUE(1)
IN (option, ...) 如果是 option 中的任意一个,返回 TRUE(1)
IS NULL 是 NULL
IS NOT NULL  不是 NULL
LIKE 模糊匹配。% 表示任意多个(包括 0 个)任意字符;_ 表示任意一个字符

1.基本查询:
-- 查询英语不及格的同学及英语成绩 ( < 60 )
SELECT name, english FROM exam_result WHERE english < 60;

-- 查询语文成绩好于英语成绩的同学
SELECT name, chinese, english FROM exam_result WHERE chinese > english

--查询总分在 200 分以下的同学
select name,chinese+english+math from exam_result where chinese+english+math<200;

 

如果我们用as别名 

会报错,所以我们要注意: WHERE条件可以使用表达式,但不能使用别名。

✅select条件查询执行顺序

  • 1.遍历表中的每个记录
  • 2.当前记录值带入条件,根据条件进行筛选 where
  • 3.如果这个记录条件成立,就要保留,进行表达式计算
  • 4.如果有order by所以都执行完之后,在进行排序(所以上面的order by可以定义别名)

所以where可以使用表达式,但是不能使用别名。

2.AND与OR:
and是且(俩个都得成立才成立)
or是或(其实一个成立就成立)
-- 查询语文成绩大于80分,且英语成绩大于80分的同学
select name,chinese,english from exam_result where chinese>80 and english>80;

-- 查询语文成绩大于80分,或英语成绩大于80分的同学(其中一个满足即可)

-- 查询语文成绩大于80分,或数学成绩大于70,并且英语成绩大于70 的同学(意思就是语文和数学成绩其中一个满足即可,但是英语成绩必须大于70)

我们不用记and优先级大于or,我们只需要将or操作打上括号即可。

 AND的优先级高于OR,在同时使用时,需要使用小括号()包裹优先执行的部分


 3.范围查询between..and (闭区间)

        ​​​​​​​In()

---查询语文成绩在 [80, 90] 分的同学及语文成绩 闭区间
select name,chinese from exam_result where chinese between 80 and 90;

 select name,chinese from exam_result where chinese>=80 and chinese<=90;


In()相当于随机抽取学生,而不是一个范围

-- 查询数学成绩是 98 或者 65 或者 84 的同学及数学成绩

select name,math from exam_result where math in(98,65,84);


使用 OR 也可以实现
SELECT name, math FROM exam_result WHERE math = 58 OR math = 65 OR math
= 98 ;

4.模糊查询:LIKE
-- % 匹配任意多个(包括 0 个)字符 
我要找名字里包含孙的人

孙开头  select name from exam_result where name like "孙%";

孙结尾  select name from exam_result where name like "%孙";

包含孙 select name from exam_result where name like "%孙%";

-- _ 匹配严格的一个任意字符
我要找名字姓孙俩个字名字的人


5.NULL 的查询:IS [NOT] NULL

查询 english成绩 已知的同学姓名

查询 english成绩 未知的同学姓名


5.分页查询:LIMIT
-- 起始下标为 0
-- 从 0 开始,筛选 n 条结果
SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT n;
-- 从 s 开始,筛选 n 条结果
SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT s, n;
-- 从 s 开始,筛选 n 条结果,比第二种用法更明确,建议使用
SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT n OFFSET s;

按id进行分页,每页三条记录,分别显示1,2,3页

接下来就是从下标3开始

 接下来就是从下标3开始

此时为空。因为表中只有9行。 


自信大方,机会总是留给有准备的人的。

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

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

相关文章

【黑马程序员】STL实战--演讲比赛管理系统

文章目录 演讲比赛管理系统需求说明比赛规则程序功能 创建管理类功能描述创建演讲比赛管理类 菜单功能添加菜单成员函数声明菜单成员函数实现菜单功能测试 退出功能添加退出功能声明退出成员函数实现退出功能测试 演讲比赛功能功能分析创建选手类比赛成员属性添加初始化属性创建…

KVM技术原理及安装KVM并且在KVM里面安装RHEL8

目录 一、kvm原理 1..1虚拟化概念 1.2 虚拟化产生背景 1.3虚拟化架构 1.4主流的虚拟化技术 1.5阐述个人对虚拟化技术的几种分类认知 二、安装KVM并且在KVM里面安装RHEL8 2.1在RHEL8主机上安装KVM 2.2安装完成后&#xff0c;使用virt-manager命令打开虚拟机管理图形界面…

Python错题集-8:AttributeError(找不到对应的对象的属性)

1问题描述 AttributeError: AxesSubplot object has no attribute arc 2代码详情 import matplotlib.pyplot as plt# 创建一个新的图形和坐标轴 fig, ax plt.subplots()# 定义弧线的参数 center (0.5, 0.5) # 圆心坐标 (x, y) width 1.0 # 半径 height 0.5 # 半径 ang…

Charles抓包工具使用

Charles简介 Charles是一款基于HTTP协议的代理服务器和HTTP监视器&#xff0c;通过将自己设置为电脑或浏览器的网络访问代理&#xff0c;能够截取请求和请求结果&#xff0c;从而达到分析抓包的目的。它允许开发者查看所有连接互联网的HTTP通信&#xff0c;包括请求、响应和HTT…

【漏洞复现】Linksys E2000 position.js 身份验证绕过漏洞(CVE-2024-27497)

0x01 产品简介 Linksys E2000是一款由思科&#xff08;Cisco&#xff09;品牌推出的无线路由器&#xff0c;它是一款支持2.4GHz和5GHz双频段的无线路由器&#xff0c;用户可以避开拥挤的2.4GHz频段&#xff0c;独自享受5GHz频段的高速无线生活。 0x02 漏洞概述 Linksys E200…

JAVA虚拟机、Dalvik虚拟机和ART虚拟机简要对比

1、什么是JVM&#xff1f; JVM本质上就是一个软件&#xff0c;是计算机硬件的一层软件抽象&#xff0c;在这之上才能够运行Java程序&#xff0c;JAVA在编译后会生成类似于汇编语言的JVM字节码&#xff0c;与C语言编译后产生的汇编语言不同的是&#xff0c;C编译成的汇编语言会…

hadoop集群部署教程

文章目录 前言一、相关介绍1. 配置文件位置1.1 只读默认配置文件1.2 可修改配置文件1.3 相关环境变量配置文件 二、安装准备1. 准备centos2. 配置集群免密登录3. 部署规划4. 安装条件5. 安装jdk 三、安装hadoop1. 下载并解压hadoop2. 设置环境变量2.1 设置hadoop安装目录环境变…

Diddler抓包工具——学习笔记

F12抓包 302【重定向】&#xff1a;当你发送了一个请求之后&#xff0c;那么这个请求重定向到了另外的资源 跳转和重定向的区别&#xff1a; 跳转是会把数据传到新的地址 重定向不会把新的数据传到新的地址 使用F12抓包时一定要打开Preserve Log开关&#xff0c;作用是保留…

【CSP试题回顾】202009-1-称检测点查询

CSP-202009-1-称检测点查询 解题代码 #include <iostream> #include <vector> #include <cmath> #include <algorithm> using namespace std;int n, X, Y, x, y; struct MyDistance {int index;int dis; }; vector<MyDistance>list; bool cmp(…

福州·名城银河湾220㎡现代简约风装修案例分享。福州中宅装饰,福州装修

以手作维度构境, 跳脱约定成俗的风格, 转化内外地域分际, 于静谧中凝聚丰厚的美学能量, 谦虚且沉默以对。 平面设计图 项目信息 项目名称 | 名城银河湾 设计地址 | 福建福州 项目面积 | 220㎡ 项目户型 | 5室2厅2厨3卫 设计风格 | 现代轻奢 首席设计师丨欧阳光玉 中…

C#,老鼠迷宫问题的回溯法求解(Rat in a Maze)算法与源代码

1 老鼠迷宫问题 迷宫中的老鼠&#xff0c;作为另一个可以使用回溯解决的示例问题。 迷宫以块的NN二进制矩阵给出&#xff0c;其中源块是最左上方的块&#xff0c;即迷宫[0][0]&#xff0c;目标块是最右下方的块&#xff0c;即迷宫[N-1][N-1]。老鼠从源头开始&#xff0c;必须…

《C缺陷和陷阱》-笔记(2)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 目录 文章目录 前言 一、理解函数声明 1.(*(void(*)( ))0)( ); 2.signal 函数接受两个参数&#xff1a; 3.使用typedef 简化函数声明&#xff1a; 二、运算符的优先级…

C/C++实现代码雨效果

C/C实现代码雨效果 目录 C/C实现代码雨效果 说明使用的库说明测试代码效果图 说明 最近整理电脑资料&#xff0c;翻出了以前写的代码&#xff0c;顺便整理一下到博客上&#xff0c;当做一次备份记录 先看看静态效果 需要分为以下步骤实现 生成代码串把代码串绘制到窗口中使…

差分约束

&#xff08;1&#xff09;求不等式组的可行解 源点需满足的条件&#xff1a;从源点出发&#xff0c;一定可以到达所有的边 求最短路 步骤&#xff1a;1.先将每个不等式xi<xj ck&#xff0c;转化成一条从xj走到xi&#xff0c;长度为ck的一条边 2.找一个超级源点&#xff0c…

CentOS7 利用remi yum源安装php8.1

目录 前言remi yum源remi yum源 支持的操作系统remi yum源 支持的php版本 安装epel源安装remi源安装 php8.1查看php版本查看php-fpm服务启动php-fpm服务查看php-fpm服务运行状态查看php-fpm服务占用的端口查看 php8.1 相关的应用 前言 CentOS Linux release 7.9.2009 (Core) …

【粉丝福利第四期】:《低代码平台开发实践:基于React》(文末送书)

文章目录 前言一、React与低代码平台的结合优势二、基于React的低代码平台开发挑战三、基于React的低代码平台开发实践四、未来展望《低代码平台开发实践&#xff1a;基于React》五、粉丝福利 前言 随着数字化转型的深入&#xff0c;企业对应用开发的效率和灵活性要求越来越高…

分销商城微信小程序:用户粘性增强,促进复购率提升

在数字化浪潮的推动下&#xff0c;微信小程序作为一种轻便、高效的移动应用形式&#xff0c;正成为越来越多企业开展电商业务的重要平台。而分销商城微信小程序的出现&#xff0c;更是为企业带来了前所未有的机遇。通过分销商城微信小程序&#xff0c;企业不仅能够拓宽销售渠道…

Double和Float类

Double类 功能&#xff1a;实现对Double基本型数据的类包 构造方法&#xff1a; (double num) double Value()方法&#xff1a;返回对象中的double型数据。 Float类 功能&#xff1a;实现对float基本型数据的类包装。 构造方法&#xff1a; (float num) Float Value()方法…

户用光伏创新技术,引领光伏时代进步

户用光伏近几年由于国家政策支持力度加大&#xff0c;技术也在快速发展&#xff0c;成功引领我国光伏时代的进步&#xff0c;掌握核心技术必将在新能源市场中抢占主导地位&#xff01; 一、制造方面 1.高效低成本晶硅太阳能电池表界面制造技术 这项技术主要涉及晶硅太阳能电池…

CraxsRat7.4 安卓手机远程管理软件

CRAXSRAT 7.4 最新视频 https://v.douyin.com/iFjrw2aD/ 官方网站下载 http://craxsrat.cn/ 不要问我是谁&#xff0c;我是活雷锋。 http://craxsrat.cn/ CraxsRat CraxsRat7 CraxsRat7.1 CraxsRat7.2 CraxsRat7.3 CraxsRat7.4
最新文章