【MySQL 数据库】1、MySQL 的 DDL、DML、DQL 语句

news2024/12/31 4:07:45

目录

  • 一、MySQL 应该掌握哪些知识点 ?
  • 二、数据库相关概念
  • 三、主流关系型数据库管理系统
  • 四、关系型数据库
  • 五、SQL 语句的分类
  • 六、DDL
    • (1) 数据库操作
    • (2) 表操作
    • (3) 字段的数据类型
    • (4) 创建员工表
    • (5) 修改表结构
    • (6) 删除某一张表
  • 七、DML
  • 八、DQL
    • (1) 员工表
    • (2) distinct、as
    • (3) where
    • (4) 聚合函数
    • (5) group by、where 和 having 区别
    • (6) order by
    • (7) 分页查询
    • (8) exercise
    • (9) DQL 语句的执行顺序

一、MySQL 应该掌握哪些知识点 ?

🎄 (1) MySQL 基础篇(初级工程师)

  • ① MySQL 基础概念
  • ② SQL 语句
  • ③ 函数
  • ④ 约束
  • ⑤ 多表查询
  • ⑥ 事务

🎄 (2) MySQL 进阶篇(中级工程师)

  • ① 存储引擎
  • ② 索引
  • ③ SQL 优化
  • ④ 视图、存储过程、触发器
  • ⑤ 锁
  • ⑥ InnoDB 核心
  • ⑦ MySQL 管理

🎄 (3) 运维篇(高级工程师)

  • ① 日志
  • ② 主从复制
  • ③ 分库分表
  • ④ 读写分离

二、数据库相关概念

✏️ 数据库:存储数据的仓库(仓库中的数据是被有组织的存储的)【Database】

✏️ 数据库管理系统:操纵和管理数据库的大型软件【Database Management System】

✏️ SQL:操纵关系型数据库的编程语言(定义了一套操纵关系型数据库的同一标准)【Structured Query Language】

三、主流关系型数据库管理系统

📝 Oracle(非开源)
📝 MySQL(社区版是开源的)
📝 Sql Server(微软研发)
📝 PostgreSQL
📝 IBM Db2
📝 SQLite(安卓使用)

四、关系型数据库

🎄 关系型数据库(RDBMS):由多张相互关联的二维组成的数据库

五、SQL 语句的分类

📌 ① DDL(Data Definition Language)
数据定义语言【用于定义数据库字段 …】

📌 ② DML(Data Manipulation Language)
数据操作语言【用于对数据库表中的数据进行

📌 ③ DQL(Data Query Language)
数据查询语言【用于询数据库中表的记录】

📌 ④ DCL(Data Control Language)
数据控制语言【用于创建数据库用户、控制数据库的访问权限】

六、DDL

🎄 Data Definition Language:数据定义语言

(1) 数据库操作

查询:
🎼 ① 查询所有数据库:

SHOW DATABASES;

🎼 ② 查询当前数据库

SELECT DATABASE();

🎼 ③ 创建数据库

CREATE DATABASE [IF NOT EXISTS] db_name;

IF NOT EXISTS 表示 只有当数据库不存在的时候才创建,避免了下图的错误

在这里插入图片描述

CREATE DATABASE IF NOT EXISTS db_name DEFAULT CHARSET = utf8mb4

✏️ utf8mb4 字符集可存储 4 个字节的数据(可存储表情包)
✏️ utf8 字符集只能存储 3 个字节的数据
✏️ 推荐使用 utf8mb4

📌 DEFAULT CHARSET 用于设置数据的字符集

🎼 ④ 删除数据库

 DROP DATABASE [IF EXISTS] db_name

📌 IF EXISTS 只有存在才删除

🎼 ⑤ 使用数据库

USE db_name

(2) 表操作

🎄 ① 查询当前数据库的所有表

SHOW TABLES

🎄 ② 查询表结构

DESC table_name

🎄 ③ 查询指定表的建表语句

SHOW CREATE TABLE table_name

🎄 ④ 创建表

CREATE TABLE `student` (
  `id` INT(11) DEFAULT NULL COMMENT '编号',
  `name` VARCHAR(20) DEFAULT NULL COMMENT '姓名',
  `age` TINYINT(4) DEFAULT NULL COMMENT '年龄',
  `gender` CHAR(1) DEFAULT NULL COMMENT '性别'
) ENGINE=INNODB DEFAULT CHARSET=utf8mb4 COMMENT='这是学生表'
  • ① 使用 VARCHAR 类型必须指定长度
  • ② 最后一个字段的后面不要加 ,【加了会报错】

(3) 字段的数据类型

🎄 数据库表的数据类型有三种:

① 数值类型
在这里插入图片描述

DECIMAL 数据类型的精度和标度:
eg:25.689 的精度是 5
eg:25.689 的标度是 3

🎄 age:tinyint unsigned

  • unsigned【年龄不会有负数】

🎄 score:总分100分,最多出现一位小数

  • score double(4,1)
  • 分数有可能是:100.1【所以是4
  • 只会有一位小数【所以是1

② 字符串类型
在这里插入图片描述

  • 长字符串】varchar(10):最多只能存储10个字符,会根据实际情况指定占用的空间【性能比 char 差】

  • 长字符串】char(10):最多只能存储10个字符,当存储的是1个字符的时候也是占用10字符的空间,为使用的字符用空格补位【性能比 varchar 好】

【姓名 name】用 varchar 类型比较好
【性别 gender】用 char 类型比较好

📝 varchar(n):n 表示的是最大字符数【占用的空间不固定,但占用的最大空间是固定的】
📝 char(n):n 表示的是总字符数【占用的空间是固定的】


③ 日期时间类型
在这里插入图片描述

(4) 创建员工表

在这里插入图片描述

CREATE TABLE employer   (
	id INT UNSIGNED COMMENT '编号',
	`work_no` VARCHAR(10) COMMENT '工号',
	`name` VARCHAR(10) COMMENT '姓名',
	 age TINYINT(3) UNSIGNED COMMENT '年龄' ,
    `gender` CHAR(1) COMMENT '性别',
     id_number CHAR(18) COMMENT '身份证号',
     entry_date DATE COMMENT '入职时间'
) COMMENT '员工表'

(5) 修改表结构

📌 ① 往表中新增字段
在这里插入图片描述

为 employer 表新增【昵称】字段, 字段名为 nickname,类型为 varchar(20)

ALTER TABLE employer ADD nickname VARCHAR(20) COMMENT '昵称';

📌 ② 修改表中的字段

  • 修改字段的数据类型
    在这里插入图片描述

把 employer 表中 id 字段的数据类型修改为 BIGINT, 也无符号

ALTER TABLE employer MODIFY id BIGINT UNSIGNED;
  • 修改字段名和数据类型
    在这里插入图片描述

修改 employer 表中 nickname 字段的字段名为 username,类型是 varchar(30)

ALTER TABLE employer CHANGE nickname username VARCHAR(30) COMMENT '用户名'

📌 ③ 删除表中的字段

在这里插入图片描述

删除 employer 表中的 age 字段

ALTER TABLE employer DROP age

📌 ④ 修改表名

在这里插入图片描述

把 employer 表的表名修改为 staff

ALTER TABLE employer RENAME TO staff

(6) 删除某一张表

在这里插入图片描述
删除数据库中的表名为 emp 的表,如果存在的话

DROP TABLE IF EXISTS emp

删除指定表,并重新创建表(类似删除表中的全部数据)
在这里插入图片描述

七、DML

在这里插入图片描述

在这里插入图片描述

DELETE FROM table_name
TRUNCATE table_name

八、DQL

在这里插入图片描述

在这里插入图片描述

(1) 员工表

create table emp (
	id int comment '编号',
	workno varchar(10) comment '工号',
	name varchar(10) comment '姓名',
	gender char(1) comment '性别',
	age tinyint unsigned comment '年龄',
	idcard char(18) comment '身份证号',
	workaddress varchar(50) comment '工作地址',
	entrydate varchar(33) comment '入职时间'
)comment '员工表';
INSERT INTO emp (id, workno, name, gender, age, idcard, workaddress, entrydate)
VALUES (1, '00001', '柳岩666', '女', 20, '123456789012345678', '北京', '2000-01-
01');
INSERT INTO emp (id, workno, name, gender, age, idcard, workaddress, entrydate)
VALUES (2, '00002', '张无忌', '男', 18, '123456789012345670', '北京', '2005-09-
01');
INSERT INTO emp (id, workno, name, gender, age, idcard, workaddress, entrydate)
VALUES (3, '00003', '韦一笑', '男', 38, '123456789712345670', '上海', '2005-08-
01');
INSERT INTO emp (id, workno, name, gender, age, idcard, workaddress, entrydate)
VALUES (4, '00004', '赵敏', '女', 18, '123456757123845670', '北京', '2009-12-01');
INSERT INTO emp (id, workno, name, gender, age, idcard, workaddress, entrydate)
VALUES (5, '00005', '小昭', '女', 16, '123456769012345678', '上海', '2007-07-01');
INSERT INTO emp (id, workno, name, gender, age, idcard, workaddress, entrydate)
VALUES (6, '00006', '杨逍', '男', 28, '12345678931234567X', '北京', '2006-01-01');
INSERT INTO emp (id, workno, name, gender, age, idcard, workaddress, entrydate)
VALUES (7, '00007', '范瑶', '男', 40, '123456789212345670', '北京', '2005-05-01');
INSERT INTO emp (id, workno, name, gender, age, idcard, workaddress, entrydate)
VALUES (8, '00008', '黛绮丝', '女', 38, '123456157123645670', '天津', '2015-05-
01');
INSERT INTO emp (id, workno, name, gender, age, idcard, workaddress, entrydate)
VALUES (9, '00009', '范凉凉', '女', 45, '123156789012345678', '北京', '2010-04-
01');
INSERT INTO emp (id, workno, name, gender, age, idcard, workaddress, entrydate)
VALUES (10, '00010', '陈友谅', '男', 53, '123456789012345670', '上海', '2011-01-
01');
INSERT INTO emp (id, workno, name, gender, age, idcard, workaddress, entrydate)
VALUES (11, '00011', '张士诚', '男', 55, '123567897123465670', '江苏', '2015-05-
01');
INSERT INTO emp (id, workno, name, gender, age, idcard, workaddress, entrydate)
VALUES (12, '00012', '常遇春', '男', 32, '123446757152345670', '北京', '2004-02-
01');
INSERT INTO emp (id, workno, name, gender, age, idcard, workaddress, entrydate)
VALUES (13, '00013', '张三丰', '男', 88, '123656789012345678', '江苏', '2020-11-
01');
INSERT INTO emp (id, workno, name, gender, age, idcard, workaddress, entrydate)
VALUES (14, '00014', '灭绝', '女', 65, '123456719012345670', '西安', '2019-05-
01');
INSERT INTO emp (id, workno, name, gender, age, idcard, workaddress, entrydate)
VALUES (15, '00015', '胡青牛', '男', 70, '12345674971234567X', '西安', '2018-04-
01');
INSERT INTO emp (id, workno, name, gender, age, idcard, workaddress, entrydate)
VALUES (16, '00016', '周芷若', '女', 18, null, '北京', '2012-06-01');

在这里插入图片描述

(2) distinct、as

在这里插入图片描述

在这里插入图片描述

distinct: 去除查询结果的重复项

(3) where

在这里插入图片描述
在这里插入图片描述

查询没有身份证号的员工信息

select * from emp where idcard is null;

查询有身份证号的员工信息

select * from emp where idcard is not null;

在这里插入图片描述

查询年龄不等于88岁的员工信息

select * from emp where age != 88;
select * from emp where age <> 88;

查询年龄在 15 到 20 岁的员工信息(包含15和20岁)

select * from emp where age between 15 and 20;
select * from emp where age >= 15 && age <= 20;
select * from emp where age >= 15 and age <= 20;

查询年龄是 18、20 或 40 的员工信息

select * from emp where age = 18 or age = 20 or age = 40;
select * from emp where age in (18, 20, 40);

查询姓名为两个字的员工信息

select * from emp where name like '__' # 两个下划线

查询身份证号最后一位为 x 的员工信息

select * from emp where idcard like '%x';

(4) 聚合函数

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

1、统计员工数量

select count(*) 'employeeNum' from emp;
select count(id) as '员工数量' from emp;

2、统计员工平均年龄

select avg(age) '平均年龄' from emp;

3、统计员工最大年龄

select max(age) '最大年龄' from emp;

4、统计员工最小年龄

select min(age) '最小年龄' from emp;

5、统计西安地区员工的年龄之和

select sum(age) '年龄和' from emp where workaddress = '西安';

(5) group by、where 和 having 区别

分组(GROUP BY)一般要结合聚合函数一起使用。

在这里插入图片描述
1、根据性别分组,统计男性员工和女性员工的数量

SELECT
	gender,
	count( gender ) '人数'
FROM
	emp 
GROUP BY
	gender;

在这里插入图片描述

在这里插入图片描述

2、根据性别分组,统计男性员工和女性员工的平均年龄

SELECT
	gender,
	avg( age ) '平均年龄' 
FROM
	emp 
GROUP BY
	gender

3、查询年龄小于45岁的员工,并根据工作地址分组,获取员工数量大于等于3的工作地址

SELECT
	count( * ) '人数',
	workaddress 
FROM
	emp 
WHERE
	age < 45 GROUP BY workaddress HAVING count( * ) >= 3;

在这里插入图片描述

(6) order by

在这里插入图片描述

1、根据年龄对公司的员工进行升序排序

select name, age from emp order by age asc;
select name, age from emp order by age;

2、根据入职时间,对员工进行降序排序

SELECT
	* 
FROM
	emp 
ORDER BY
	entrydate DESC;

3、根据年龄对公司的员工进行升序排序 , 年龄相同 , 再按照入职时间进行降序排序

SELECT
	* 
FROM
	emp 
ORDER BY
	age,
	entrydate DESC;

(7) 分页查询

在这里插入图片描述

1、查询第1页员工数据, 每页展示10条记录

select * from emp limit 0, 10;
select * from emp limit 10;

2、查询第2页员工数据, 每页展示10条记录

select * from emp limit 10, 10;

(8) exercise

在这里插入图片描述

select * from emp where age >= 20 && age <= 23;
select * from emp where age >= 20 and age <= 23;
select * from emp where age between 20 and 23;
select * from emp where age in (20, 21, 22, 23);
select * from emp where age = 20 or age = 21 or age = 22 or age = 23;

在这里插入图片描述

SELECT
	* 
FROM
	emp 
WHERE
	gender = '男' 
	AND age BETWEEN 20 
	AND 40 
	AND `name` LIKE '___';

在这里插入图片描述

SELECT
	gender,
	count( * ) 
FROM
	emp 
WHERE
	age < 60 
GROUP BY
	gender;

在这里插入图片描述

SELECT
	`name`,
	age,
	entrydate 
FROM
	emp 
WHERE
	age <= 35 
ORDER BY
	age,
	entrydate DESC;

在这里插入图片描述

SELECT
	* 
FROM
	emp 
WHERE
	gender = '男' 
	AND age BETWEEN 20 
	AND 40 
ORDER BY
	age,
	entrydate 
	LIMIT 5;

(9) DQL 语句的执行顺序

在这里插入图片描述

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

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

相关文章

经典神经网络(4)Nin-Net及其在Fashion-MNIST数据集上的应用

经典神经网络(4)Nin-Net及其在Fashion-MNIST数据集上的应用 1 Nin-Net的简述 1.1 Nin-Net的概述 LeNet、AlexNet和VGG都有⼀个共同的设计模式&#xff1a;通过⼀系列的卷积层与汇聚层来提取空间结构特征&#xff1b;然后通过全连接层对特征的表征进⾏处理。AlexNet和VGG对Le…

线程池的创建与使用

void execute(Runnable run)方法处理Runnbale任务 Future<> submit(Callable<> task)方法处理Callable任务 void shutdown()结束线程池 List<\Runnable> shutdownNow()立即结束线程池&#xff0c;不管任务是否执行完毕 //创建线程池的一种方式 ExecutorServi…

基于WebApi实现ModbusTCP数据服务

在上位机开发过程中&#xff0c;有时候会遇到需要提供数据接口给MES或者其他系统&#xff0c;今天跟大家分享一下&#xff0c;如何在Winform等桌面应用程序中&#xff0c;开发WebApi接口&#xff0c;提供对外数据服务。 为了更好地演示应用场景&#xff0c;本案例以读取Modbus…

Leetcode 209. 长度最小的子数组——go语言实现

文章目录 一、题目描述二、代码实现方法一&#xff1a;暴力法解题思路代码实现复杂度分析 方法二&#xff1a;滑动窗口 双指针解题思路代码实现复杂度分析 方法三&#xff1a;前缀和 二分查找解题思路代码实现复杂度分析 一、题目描述 给定一个含有 n 个正整数的数组和一个正…

STM32 10个工程篇:1.IAP远程升级(四)

在前三篇博客中主要介绍了IAP远程升级的应用背景、下位机的实现原理、以及基于STM32CubeMX对STM32F103串口DMA的基本配置&#xff0c;第四篇博客主要想介绍Labview端上位机和下位机端的报文定义和通信等。 当笔者工作上刚接触到STM32 IAP升级的时候&#xff0c;实事求是地说存在…

【科普】电压和接地真的存在吗?如何测试?

经常在实验室干活的&#xff0c;难免不被电击过&#xff0c;尤其是在干燥的北方&#xff0c;“被电”是常有的事情&#xff0c;我记得有一次拿着射频线往仪表上拧的时候&#xff0c;遇到过一次严重的电火花&#xff0c;瞬间将仪表的射频口边缘烧出了一个疤&#xff0c;实验室遭…

LeetCode83. 删除排序链表中的重复元素

写在前面&#xff1a; 题目链接&#xff1a;LeetCode83. 删除排序链表中的重复元素 编程语言&#xff1a;C 题目难度&#xff1a;简单 一、题目描述 给定一个已排序的链表的头 head &#xff0c; 删除所有重复的元素&#xff0c;使每个元素只出现一次 。返回 已排序的链表 。 …

Java中异常的处理及捕获

Java中异常的处理及捕获 一、异常的概述 &#xff08;1&#xff09;Java中异常的作用&#xff1a;增强程序的健壮性 &#xff08;2&#xff09;在Java中所有的Error&#xff08;错误&#xff09;和异常&#xff08;Exception&#xff09;都继承了同一个父类Throwable 二、异…

postgresql内核源码分析-删除表drop table流程

专栏内容&#xff1a;postgresql内核源码分析个人主页&#xff1a;我的主页座右铭&#xff1a;天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物&#xff0e; 目录 前言 调用关系 概要流程 详细流程 创建对象列表空间 删除多个指定的数据库…

【蓝桥杯国赛真题27】Scratch LED屏幕 少儿编程scratch图形化编程 蓝桥杯国赛真题讲解

目录 scratch LED屏幕 一、题目要求 编程实现 二、案例分析 1、角色分析

C#中使用git将项目代码上传到远程仓库的操作

一、远程仓库创建操作&#xff08;远程仓库使用的是gitHub&#xff09; 1、登录GitHub官网&#xff0c;注册登录账号后&#xff0c;点击创建仓库 2、仓库名称命名&#xff0c;如下所示&#xff1a; 3、创建成功如下所示&#xff1a;获得https协议&#xff08;https://github.c…

Android开发不可缺少的辅助工具

目录 jadxandroid_toolscrcpy-guiCode CraftsSQLite Expert Personal jadx jadx是一款apk反编译工具。 PS&#xff1a;部分版本安装&#xff0c;无法打开类文件&#xff0c;需换个版本。 开源地址&#xff1a;https://github.com/skylot/jadx android_tool android_tool可以通…

【瑞萨RA_FSP】SCL UART 串口通信

文章目录 一、串口通信协议简介1. 物理层2. 协议层 二、SCI 简介三、SCI的结构框图四、UART波特率计算 一、串口通信协议简介 串口通讯(Serial Communication)是一种设备间非常常用的串行通讯方式&#xff0c;因为它简单便捷&#xff0c;因此大部分电子设备都支持该通讯方式&a…

SNAT和DNAT策略

文章目录 1.SNAT策略及应用1.1 SNAT原理与应用1.2 SNAT策略的工作原理1.3 实验步骤 2.DNAT策略2.1 DNAT策略的概述2.1 DNAT原理与应用2.3 实验步骤 3.规则的导出、导入4. 总结 1.SNAT策略及应用 1.1 SNAT原理与应用 SNAT 应用环境&#xff1a;局域网主机共享单个公网IP地址接…

【利用AI让知识体系化】关于浏览器内核的基础知识

I. 介绍 什么是浏览器内核 浏览器内核&#xff08;Browser Engine&#xff09;&#xff0c;也叫浏览器渲染引擎&#xff08;Rendering Engine&#xff09;&#xff0c;是浏览器的核心组成部分&#xff0c;它负责将 HTML、CSS、JavaScript 等代码经过解析和渲染后&#xff0c;…

End-to-End Object Detection with Transformers 论文学习

论文地址&#xff1a;End-to-End Object Detection with Transformers 1. 解决了什么问题&#xff1f; 现有的目标检测算法需要大量的人为先验的设计&#xff0c;如 anchor 和 NMS&#xff0c;整体架构并不是端到端的。现有的检测方法为了去除重叠框&#xff0c;一般会利用 p…

企业级信息系统开发——初探Spring - 利用组件注解符精简Spring配置文件

文章目录 一、打开项目二、利用组件注解符精简Spring配置文件&#xff08;一&#xff09;创建新包&#xff08;二&#xff09;复制四个类&#xff08;三&#xff09;修改杀龙任务类&#xff08;四&#xff09;修改救美任务类&#xff08;五&#xff09;修改勇敢骑士类&#xff…

NEEPU Sec 2023 公开赛 writeup

文章目录 WebCute CirnoCute Cirno(Revenge) RevHow to use ida?BaseHow to use python?IKUN检查器junk code CryptoFunnyRsaLossloud Misc吉林第一站倒影Shiro重生之我是CTFer 问卷 Web Cute Cirno 学艺不精的我脑袋要炸了 在Cirno界面的源代码中发现任意读 考虑之前的比…

在Ubuntu20.04部署Flink1.17实现基于Flink GateWay的Hive On Flink的踩坑记录(一)

在Ubuntu20.04部署Flink1.17实现基于Flink GateWay的Hive On Flink的踩坑记录&#xff08;一&#xff09; 前言 转眼间&#xff0c;Flink1.14还没玩明白&#xff0c;Flink已经1.17了&#xff0c;这迭代速度还是够快。。。 之前写过一篇&#xff1a;https://lizhiyong.blog.c…

View中的滑动冲突

View中的滑动冲突 1.滑动冲突的种类 滑动冲突一般有3种, 第一种是ViewGroup和子View的滑动方向不一致 比如: 父布局是可以左右滑动,子view可以上下滑动 第二种 ViewGroup和子View的滑动方向一致 第三种 第三种类似于如下图 2.滑动冲突的解决方式 滑动冲突一般情况下有2…