当前位置: 首页 > news >正文

MySql基础-单表操作

1. MYSQL概述

1.1 数据模型

关系型数据库

关系型数据库(RDBMS):建立在关系模型基础上,由多张相互连接的二维表组成的数据库。

特点:

使用表存储数据,格式统一,便于维护

使用SQL语言操作,标准统一,使用方便,可用于复杂查询

MYSQL数据模型

1.2  SQL简介

SQL:一门操作关系型数据库的编程语言,定义操作所有关系型数据库的统一标准

通用语法:

SQL语句可以单号或多行书写,以分号结尾。

SQL语句可以使用空格/缩进来增强语句的可读性。

MYSQL数据库的SQL语句不区分大小写。

注释:

1. 单行注释:-- 注释内容 或 # 注释内容(MYSQL特有)

2. 多行注释:/* 注释内容 */

 SQL分类

分类全称说明
DDLData Definiton Language数据定义语言,用来定义数据库对象(数据库,表,字段)

DML

Data Manipulation Language数据操作语言,用来对数据库表中的数据进行增删改
DQLData Query Language数据查询语言,用来查询数据库中表的记录
DCLData Control Language

数据控制语言,用来创建数据库用户、控制数据库的访问权限

2. 数据库设计

2.1 DDL

DDL 英文全称是 Data Definition Language,数据定义语言,用来定义数据库对象(数据库、表)。

2.1.1 数据库操作

查询

查询所有数据库:show databases;

查询当前数据库:select database();

创建

创建数据库:create database [if not exists] 数据库名;

使用

使用数据库:use 数据库名;

创建

创建数据库:create database [if not exists] 数据库名;

删除

删除数据库:drop database [if exists] 数据库名;

注意: 上述语法中的database ,也可以替换称schema。如:create schema db01;


MYSQL客户端工具 - 图形化工具

DataGrip
介绍:DataGrip 是JetBrains 旗下的一款数据库管理工具,是管理和开发MySQL、Oracle、PostgreSQL 的理想解决方案。

官网:DataGrip: The Cross-Platform IDE for Databases & SQL by JetBrains

2.1.2 表的操作(创建、查询、修改、删除)

创建

create table tb_user (id int comment 'ID, 唯一标识',username varchar(20) comment '用户名',name varchar(10) comment '姓名',age int comment '年龄',gender char(1) comment '性别'
) comment '用户表';

 约束

概念:约束是作用于表中字段上的规则,用于限制存储在表中的数据。

目的:保证数据库中数据的正确性、有效性和完整性。

约束描述关键字
非空约束限制该字段值不能为null

not null

唯一约束保证字段的所有数据都是唯一、不重复的unique
主键约束主键是一行数据的唯一标识,要求非空且唯一primary key(auto_increment自增)
默认约束保存数据时,如果未指定该字段值,则采用默认值default
外键约束让两张表的数据建立连接,保证数据的一致性和完整性foreign key
create table tb_user (id int primary key auto_increment comment 'ID,唯一标识',username varchar(20) not null unique comment '用户名',name varchar(10) not null comment '姓名',age int comment '年龄',gender char(1) default '男' comment '性别'
) comment '用户表';

数值类型 

查询

查询当前数据库所有表: show tables;

查询表结构:desc 表名;

查询建表语句:show create table 表名;

修改

添加字段:alter table 表名 add 字段名 类型(长度) [comment 注释] [约束];

修改字段类型:alter table 表名 modify 字段名 新数据类型(长度);

修改字段名和字段类型:alter table 表名 change 旧字段名 新字段名 类型(长度) [comment 注释] [约束];

删除字段:alter table 表名 drop column 字段名;

修改表名:rename table 表名 to 新表名;

删除

删除表:drop table [if exists] 表名;

2.2 DML

DML 英文全称是Data Manipulation Language(数据操作语言),用来对数据库中表的数据记录惊醒增、删、改操作。

添加数据(INSERT)

指定字段添加数据:insert into 表名(字段名1,字段名2) values(值1,值2);

全部字段添加数据:insert into 表名 values (值1,值2...);

批量添加数据(指定字段): insert into 表名 (字段名1,字段名2) values (值1,值2),(值1,值2);

批量添加数据(全部字段):insert into 表名 values(值1,值2...),(值1,值2...);

注意事项:

1. 插入数据时,指定的字段顺序需要与值的顺序是一一对应的。

2. 字符串和日期型数据应该包括在引号中。

3. 插入的数据大小,应该在字段的规定范围内。

修改数据(UPDATE)

Update 语法

修改数据:update 表名 set 字段名1 = 值1,字段名2 = 值2,.......[where 条件];

注意事项

修改语句的条件可以有,也可以没有,如果没有条件,则会修改整张表的所有数据。

删除数据(DELETE)

delete语法

删除数据:delete from 表名 [where 条件];

注意事项

1. DELETE 语句的条件可以有,也可以没有,如果没有条件,则会删除整张表的所有数据。

2. DELETE 语句不能删除某一个字段的值(如果要操作,可以使用UPDATE,将该字段的值置为NULL)。

2.2DQL

DQL英文全称是Data Query Language (数据查询语言),用来查询数据库表中的记录。

关键字:SELECT

语法

DQL-基本查询

查询多个字段:select 字段1,字段2,字段3 from 表名;

查询所有字段(通配符):select * from 表名;

设置别名:select 字段1 [as 别名1],字段2 [as 别名2] from 表名;

去除重复记录:select distinct 字段列表 from 表名;

注意

* 号代表查询所有字段,在实际开发中尽量少用(不直观、影响效率)。

-- 查询指定字段 name,entrydate 并返回
select name as 姓名,entrydate as 入职日期
from tb_emp;
-- 查询返回所有字段
-- 推荐
select id, username, password, name, gender, image, job, entrydate, create_time, update_time
from tb_emp;
-- 不推荐(不直观,性能低)
select *
from tb_emp;
-- 查询所有员工的 name,entrydate,并起别名(姓名,入职日期);
select name as 姓名,entrydate as 入职日期
from tb_emp;
select name as '姓 名',entrydate as 入职日期
from tb_emp;
-- 查询已有的员工关联了哪些职位(不重复)
select distinct job
from tb_emp;

 DQL-条件查询

select 字段列表 from 表名 where 条件列表;

 

-- =====================================DQL:条件查询 ===============================
-- 1. 查询姓名为 杨逍 的员工
select id, username, password, name, gender, image, job, entrydate, create_time, update_time
from tb_emp where name = '杨逍';
-- 2. 查询 id小于等于5的员工信息
select *
from tb_emp where id <= 5;
-- 3. 查询没有分配职位的员工信息
select *
from tb_emp where job is null;
-- 4. 查询有职位的员工信息
select *
from tb_emp where job is not null;
-- 5. 查询密码不等于'123456' 的员工信息
select *
from tb_emp where password != 123456;
-- 6. 查询入职日期在 '2000-01-01' (包含) 到 '2010-01-01'(包含)之间的员工信息
select *
from tb_emp where entrydate >= '2000-01-01' && entrydate <= '2010-01-01';select *
from tb_emp where entrydate between '2000-01-01' and '2010-01-01';
-- 7. 查询入职日期在 '2000-01-01' (包含) 到 '2010-01-01'(包含)之间 且性别为女的员工信息
select *
from tb_emp where entrydate >= '2000-01-01' && entrydate <= '2010-01-01' && gender = 2;
-- 8. 查询 职位是 2(讲师),3 (学工主管),4 (教研助管) 的员工信息
select *
from tb_emp where job in (1,2,3);
-- 9. 查询姓名为两个字的员工信息
select *
from tb_emp where name like '__';
-- 10. 查询 姓'张'的员工信息
select *
from tb_emp where name like '张%';

 DQL-聚合函数

语法:select 聚合函数(字段列表) from 表名;

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

函数功能
count统计数量
max最大值
min最小值
avg平均值
sum求和

注意事项

null 值不参与所有聚合函数运算。

统计数量可以使用:count(*) count(字段) count(常量) 推荐使用 count(*)。

--  =========================== 聚合函数 ===============================
-- 聚合函数
-- 1. 统计该企业员工数量
-- A. count(字段)  不对null 值进行运算
select count(*) as 员工数量
from tb_emp;
-- B. count(常量)
select count(1)
from tb_emp;
-- C. count(*)
select count(*)
from tb_emp;
-- 2. 统计该企业最早入职的员工
select min(entrydate)
from tb_emp;
-- 3. 统计该企业最迟入职的员工 - max
select max(entrydate)
from tb_emp;
-- 4. 统计该企业员工ID的平均值
select avg(id)
from tb_emp;
-- 5. 统计该企业员工的 ID 之和
select sum(id)
from tb_emp;

DQL - 分组查询

语法:

select 字段列表 from 表名 [where 条件] group by 分组字段名 [having 分组后过滤条件];

 where 与 having 区别

1. 执行时机不同:where是分组之前进行过滤,不满足where条件,不参与分组;而having是分组之后对结果进行过滤。

2. 判断条件不同:where不能对聚合函数进行判断,而having可以。

-- 分组
-- 1. 根据性别分组,统计男性和女性员工的数量 - count
select gender,count(*)
from tb_emp group by gender;
-- 2. 先查询入职时间在'2015-01-01'(包含)以前的员工,并对结果根据职位分组,获取员工数量大于等于2的职位
select job,count(*)
from tb_emp where entrydate < '2015-01-01' group by job having count(*) >= 2;

DQL-排序查询

条件查询:select 字段列表 from 表名 [where 条件列表][group by 分组字段] order by 字段1 排序方式1,字段2 排序方式2...;

排序方式:

ASC:升序(默认值)

DESC:降序

注意事项

如果是多字段排序,当第一个字段值相同时,才会根据第二个字段进行排序。

-- 排序查询
-- 1. 根据入职时间,对员工进行升序排序 - asc
select *
from tb_emp order by entrydate asc ;
-- 2. 根据入职时间,对员工进行降序排序
select *
from tb_emp order by entrydate desc ;
-- 3. 根据入职时间 对公司的员工进行 升序排序, 入职时间相同,再按照 更新时间,进行降序排序
select *
from tb_emp order by entrydate asc ,update_time desc ;

DQL-分页查询

语法

select 字段列表 from 表名 limit 起始索引,查询记录数;

注意事项

1. 起始索引从0开始,起始索引 = (查询页码 - 1) * 每页显示记录数

2. 分页查询是数据库的方言,不同的数据库有不同的实现,MYSQL中是LIMIT。

3. 如果查询的是第一页数据,起始索引可以省略,直接简写为limit 10。

-- 分页查询
-- 1. 从 起始 索引0 开始查询员工数据,每页展示5条记录
select *
from tb_emp limit 0,5;
-- 2. 查询 第1页 员工数据,每页展示5条记录
select *
from tb_emp limit 0,5;
-- 3. 查询 第2页 员工数据,每页展示5条数据
select *
from tb_emp limit 5,5;
-- 4. 查询 第三页
select *
from tb_emp limit 10,5;

函数:

if(表达式,tvalue,fvalue):当表达式为true时,取值tvalue,当表达式为false时,取值fvalue

case expr when value1 then result1 [when value2 then value2 ...][else result]end;

综合练习

-- 实例1:按需求完成员工管理的条件分页查询 - 根据输入条件,查询第一页数据,每页展示10条数据
-- 输入条件
-- 姓名:张
-- 性别:男
-- 入职时间:2000-01-01  2015-12-31
-- 根据输入的员工姓名、员工性别、入职时间 搜索满足条件的员工信息
-- 其中员工姓名支持模糊匹配;性别进行精确查询,入职时间进行范围查询
-- 支持分页查询
-- 并对查询的结果,根据最后修改时间进行倒序排序
select *
from tb_emp where name like '%张%' and gender = 1 and entrydate between '2000-01-01' and '2015-12-31' order by entrydate desc ;
-- 实例2:根据需求,完成员工性别信息的统计 -count(*)
-- if(表达式,true取值,false取值)
select if(gender = 1,'男性员工','女性员工') 性别,count(*) 员工数量
from tb_emp group by gender;
-- 实例3:case 表达式 when 值1 then 结果1 when 值2 then 结果2 ... else ... end
select case job when 1 then '班主任' when 2 then '讲师' when 3 then '学工主管' when 4 then '教研助管' else '未分配职位' end 职位,count(*)
from tb_emp group by job;

小结

相关文章:

MySql基础-单表操作

1. MYSQL概述 1.1 数据模型 关系型数据库 关系型数据库(RDBMS)&#xff1a;建立在关系模型基础上&#xff0c;由多张相互连接的二维表组成的数据库。 特点&#xff1a; 使用表存储数据&#xff0c;格式统一&#xff0c;便于维护 使用SQL语言操作&#xff0c;标准统一&…...

【STM32系统】基于STM32设计的SD卡数据读取与上位机显示系统(SDIO接口驱动、雷龙SD卡)——文末资料下载

基于STM32设计的SD卡数据读取与上位机显示系统 演示视频&#xff1a; 基于STM32设计的SD卡数据读取与上位机显示系统 简介&#xff1a;本研究的主要目的是基于STM32F103微控制器&#xff0c;设计一个能够读取SD卡数据并显示到上位机的系统。SD卡的数据扇区读取不仅是为了验证存…...

SpringBoot开发——整合Redis

文章目录 1、创建项目&#xff0c;添加Redis依赖2、创建实体类Student3、创建Controller4、配置application.yml5、整合完成 Redis ( Remote Dictionary Server &#xff09;是一个开源的内存数据库&#xff0c;遵守 BSD 协议&#xff0c;它提供了一个高性能的键值&#xff08…...

OpenCV结构分析与形状描述符(17)判断轮廓是否为凸多边形的函数isContourConvex()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 测试轮廓的凸性。 该函数测试输入的轮廓是否为凸的。轮廓必须是简单的&#xff0c;即没有自相交。否则&#xff0c;函数的输出是不确定的。 cv:…...

P5425 [USACO19OPEN] I Would Walk 500 Miles G

*原题链接* 很离谱的题。首先可以想到暴力连边&#xff0c;整个图为一个完全图&#xff0c;将所有的边选出来&#xff0c;然后从小到大一条条加入&#xff0c;当剩下集合数量 <K 的时候就结束。答案为加入的最后一条边的大小。如果用prim算法的话时间复杂度为。足以通过此题…...

Java高级Day41-反射入门

115.反射 反射机制 1.根据配置文件re.properties指定信息&#xff0c;创建Cat对象并调用hi方法 SuppressWarnings({"all"}) public class ReflectionQuestion {public static void main(String[] args) throws IOException {//根据配置文件 re.properties 指定信息…...

在Linux系统上使用Docker部署java项目

一.使用Docker部署的好处&#xff1a; 在Linux系统上使用Docker部署项目通常会大大简化部署流程&#xff0c;因为Docker可以将应用程序及其依赖打包到一个独立的容器中。 Docker打包应用程序时会将其与所有依赖项&#xff08;操作系统、库等&#xff09;一起打包。这样&#…...

【C++】标准库IO查漏补缺

【C】标准库 IO 查漏补缺 文章目录 系统I/O1. 概述2. cout 与 cerr3. cerr 和 clog4. 缓冲区5. 与 printf 的比较 系统I/O 1. 概述 标准库提供的 IO 接口&#xff0c;包含在 iostream 文件中 输入流: cin输出流&#xff1a;cout / cerr / clog。 输入流只有一个 cin&#x…...

python简单易懂的lxml读取HTML节点及常用操作方法

python简单易懂的lxml读取HTML节点及常用操作方法 1. 初始化和基本概念 lxml 是一个强大的pyth库&#xff0c;用于处理XML和HTML文档。它提供了类似BeautifulSoup的功能&#xff0c;但性能更高。在使用lxml时&#xff0c;通常会先解析HTML或XML文档&#xff0c;得到一个Eleme…...

Java | Leetcode Java题解之第406题根据身高重建队列

题目&#xff1a; 题解&#xff1a; class Solution {public int[][] reconstructQueue(int[][] people) {Arrays.sort(people, new Comparator<int[]>() {public int compare(int[] person1, int[] person2) {if (person1[0] ! person2[0]) {return person2[0] - perso…...

安卓获取apk的公钥,用于申请app备案等

要申请app的icp备案等场景&#xff0c;需要app的 证书MD5指纹和公钥&#xff0c;示例如下&#xff1a; 步骤1&#xff1a;使用keytool从APK中提取证书 1. 打开命令行&#xff0c;cd 到你的apk目录&#xff0c;如&#xff1a;app/release 2. 解压APK文件&#xff1a; unzip yo…...

【leetcode_python】杨辉三角

给定一个非负整数 numRows&#xff0c;生成「杨辉三角」的前 numRows 行。 在「杨辉三角」中&#xff0c;每个数是它左上方和右上方的数的和。 示例 1: 输入: numRows 5 输出: [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]]示例 2: 输入: numRows 1 输出: [[1]] 方案&#…...

Parallels Desktop 20 for Mac中文版发布了?会哪些新功能

Parallels Desktop 20 for Mac 正式发布&#xff0c;完全支持 macOS Sequoia 和 Windows 11 24H2&#xff0c;并且在企业版中引入了全新的管理门户。 据介绍&#xff0c;新版本针对 Windows、macOS 和 Linux 虚拟机进行了大量更新&#xff0c;最大的亮点是全新推出的 Parallels…...

SpringBoot整合SSE-灵活管控连接

SpringBoot整合SSE(管控连接) 1、sse单向通信整成逻辑双向通信。 2、轻量级实现端对端信息互通。 3、避免繁琐配置学习。 核心点通过记录连接码和心跳检测实现伪双向通道,避免无效连接占用过多内存。 服务器推送(Server Push)技术允许网站和应用在有新内容可用时主动向用户…...

挖矿木马-Linux

目录 介绍步骤 介绍 1、挖矿木马靶机中切换至root用户执行/root目录下的start.sh和attack.sh 2、题目服务器中包含两个应用场景&#xff0c;redis服务和hpMyAdmin服务&#xff0c;黑客分别通过两场景进行入侵&#xff0c;入侵与后续利用线路路如下&#xff1a; redis服务&…...

【leetcode——415场周赛】——python前两题

3289. 数字小镇中的捣蛋鬼 数字小镇 Digitville 中&#xff0c;存在一个数字列表 nums&#xff0c;其中包含从 0 到 n - 1 的整数。每个数字本应 只出现一次&#xff0c;然而&#xff0c;有 两个 顽皮的数字额外多出现了一次&#xff0c;使得列表变得比正常情况下更长。 为了…...

【CSS in Depth 2 精译_029】5.2 Grid 网格布局中的网格结构剖析(上)

当前内容所在位置&#xff08;可进入专栏查看其他译好的章节内容&#xff09; 第一章 层叠、优先级与继承&#xff08;已完结&#xff09; 1.1 层叠1.2 继承1.3 特殊值1.4 简写属性1.5 CSS 渐进式增强技术1.6 本章小结 第二章 相对单位&#xff08;已完结&#xff09; 2.1 相对…...

ZYNQ LWIP(RAW API) TCP函数学习

1 LWIP TCP函数学习 tcp_new()–新建控制块 这个函数用于分配一个TCP控制块,它通过tcp_alloc()函数分配一个TCP控制块结构来存储TCP控制块的数据信息, 如果没有足够的内容分配空间,那么tcp_alloc()函数就会尝试释放一些不太重要的TCP控制块, 比如就会释放处于TIME_WAIT、C…...

Spring Boot,在应用程序启动后执行某些 SQL 语句

在 Spring Boot 中&#xff0c;如果你想在应用程序启动后执行某些 SQL 语句&#xff0c;可以利用 spring.sql.init 属性来配置初始化脚本。这通常用于在应用启动时创建数据库表、索引、视图等&#xff0c;或者填充默认数据。data-locations 和 schema-locations 指定了 SQL 脚本…...

【SQL】百题计划:SQL最基本的判断和查询。

[SQL]百题计划 Select product_id from Products where low_fats "Y" and recyclable "Y";...

【SQL学习笔记1】增删改查+多表连接全解析(内附SQL免费在线练习工具)

可以使用Sqliteviz这个网站免费编写sql语句&#xff0c;它能够让用户直接在浏览器内练习SQL的语法&#xff0c;不需要安装任何软件。 链接如下&#xff1a; sqliteviz 注意&#xff1a; 在转写SQL语法时&#xff0c;关键字之间有一个特定的顺序&#xff0c;这个顺序会影响到…...

HubSpot推出与ChatGPT的深度集成引发兴奋与担忧

上周三&#xff0c;HubSpot宣布已构建与ChatGPT的深度集成&#xff0c;这一消息在HubSpot用户和营销技术观察者中引发了极大的兴奋&#xff0c;但同时也存在一些关于数据安全的担忧。 许多网络声音声称&#xff0c;这对SaaS应用程序和人工智能而言是一场范式转变。 但向任何技…...

python爬虫——气象数据爬取

一、导入库与全局配置 python 运行 import json import datetime import time import requests from sqlalchemy import create_engine import csv import pandas as pd作用&#xff1a; 引入数据解析、网络请求、时间处理、数据库操作等所需库。requests&#xff1a;发送 …...

ArcPy扩展模块的使用(3)

管理工程项目 arcpy.mp模块允许用户管理布局、地图、报表、文件夹连接、视图等工程项目。例如&#xff0c;可以更新、修复或替换图层数据源&#xff0c;修改图层的符号系统&#xff0c;甚至自动在线执行共享要托管在组织中的工程项。 以下代码展示了如何更新图层的数据源&…...

背包问题双雄:01 背包与完全背包详解(Java 实现)

一、背包问题概述 背包问题是动态规划领域的经典问题&#xff0c;其核心在于如何在有限容量的背包中选择物品&#xff0c;使得总价值最大化。根据物品选择规则的不同&#xff0c;主要分为两类&#xff1a; 01 背包&#xff1a;每件物品最多选 1 次&#xff08;选或不选&#…...

今日行情明日机会——20250609

上证指数放量上涨&#xff0c;接近3400点&#xff0c;个股涨多跌少。 深证放量上涨&#xff0c;但有个小上影线&#xff0c;相对上证走势更弱。 2025年6月9日涨停股主要行业方向分析&#xff08;基于最新图片数据&#xff09; 1. 医药&#xff08;11家涨停&#xff09; 代表标…...

WEB3全栈开发——面试专业技能点P8DevOps / 区块链部署

一、Hardhat / Foundry 进行合约部署 概念介绍 Hardhat 和 Foundry 都是以太坊智能合约开发的工具套件&#xff0c;支持合约的编译、测试和部署。 它们允许开发者在本地或测试网络快速开发智能合约&#xff0c;并部署到链上&#xff08;测试网或主网&#xff09;。 部署过程…...

【Linux应用】Linux系统日志上报服务,以及thttpd的配置、发送函数

【Linux应用】Linux系统日志上报服务&#xff0c;以及thttpd的配置、发送函数 文章目录 thttpd服务安装thttpd配置thttpd服务thttpd函数日志效果和文件附录&#xff1a;开发板快速上手&#xff1a;镜像烧录、串口shell、外设挂载、WiFi配置、SSH连接、文件交互&#xff08;RADX…...

【AI教我写网站-ECG datacenter】

阶段性总结&#xff1a;后端用户管理基础 在项目管理和协作中&#xff0c;清晰地阐述“为什么做”比“怎么做”更能凝聚共识和提供方向。我们不仅要理解技术实现&#xff0c;更要明白其背后的动机和意义。 让我们重新回顾并总结我们到目前为止的工作&#xff0c;这次会更侧重…...

架构设计技巧——架构设计模板

一份实用、高效、覆盖核心要素的架构设计模板是确保设计质量、促进团队沟通和指导实施的关键。以下是一个经过提炼的架构设计文档核心模板框架&#xff0c;结合了业界最佳实践&#xff0c;并强调灵活裁剪&#xff1a; 架构设计文档模板 (核心框架) 文档标识 项目/系统名称&a…...