MySQL核心命令详解与实战,一文掌握MySQL使用

文章目录

    • 文章简介
    • 演示库表
    • 创建数据库表
    • 选择数据库
    • 删除数据库
    • 创建表
    • 删除表
    • 向表中插入数据
    • 更新数据
    • 删除数据
    • 查询数据
    • WHERE 操作符
    • 聚合函数
    • LIKE 子句
    • 分组 GROUP BY + HAVING
    • ORDER BY(排序) 语句
    • LIMIT 操作符 分页查询
    • 多表查询-联合查询 UNION 操作符
    • 多表查询-连接的使用-JOIN
    • 语句编写和底层执行顺序

文章简介

本文主要介绍了MySQL核心命令的介绍和使用方法。

演示库表

mmall_learning库表结构。
在这里插入图片描述
部分命令中涉及的其他库表,均为简单说明,可不必在意具体表结构。

创建数据库表

CREATE DATABASE 数据库名;

CREATE DATABASE mmall_learning;

列出 MySQL 数据库管理系统的数据库列表。

SHOW DATABASES;

结果如下:
在这里插入图片描述

选择数据库

USE 数据库名;

USE mmall_learning;

显示指定数据库的所有表,使用该命令前需要使用 use 命令来选择要操作的数据库。
SHOW TABLES:
在这里插入图片描述
显示数据表的属性,属性类型,主键信息 ,是否为 NULL,默认值等其他信息。

SHOW COLUMNS FROM 数据表;

例如:展示购物车的数据表结构

SHOW COLUMNS FROM mmall_cart;

结果如下:
在这里插入图片描述

删除数据库

1.直接删除数据库,不检查是否存在

DROP DATABASE 数据库;

2.删除数据库,如果存在的话

DROP DATABASE IF EXISTS 数据库;

创建表

CREATE TABLE table_name (
    column1 datatype,
    column2 datatype,
    ...
);

示例:

CREATE TABLE `mmall_cart` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `user_id` int(11) NOT NULL,
  `product_id` int(11) DEFAULT NULL COMMENT '商品id',
  `quantity` int(11) DEFAULT NULL COMMENT '数量',
  `checked` int(11) DEFAULT NULL COMMENT '是否选择,1=已勾选,0=未勾选',
  `create_time` datetime DEFAULT NULL COMMENT '创建时间',
  `update_time` datetime DEFAULT NULL COMMENT '更新时间',
  PRIMARY KEY (`id`),
  KEY `user_id_index` (`user_id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=146 DEFAULT CHARSET=utf8;

解释:
~如果你不想字段为空可以设置字段的属性为 NOT NULL,如上实例中的 id 与 user_id 字段,在操作数据库时如果输入该字段的数据为空,就会报错。
~AUTO_INCREMENT 定义列为自增的属性,一般用于主键,数值会自动加 1。
~PRIMARY KEY 关键字用于定义列为主键。 您可以使用多列来定义主键,列间以逗号 , 分隔。
~ENGINE 设置存储引擎,CHARSET 设置编码。
~UNIQUE KEY 唯一约束,是指所有记录中字段的值不能重复出现。例如,为 user_id 字段加上唯一性约束后,每条记录的 user_id 值都是唯一的,不能出现重复的情况。

删除表

1.删除表,如果存在的话

DROP TABLE IF EXISTS 数据表;

2.直接删除表,不检查是否存在

DROP TABLE 数据表;

向表中插入数据

INSERT INTO table_name (column1, column2, column3, ...) VALUES (value1, value2, value3, ...);

table_name 是你要插入数据的表的名称。
column1, column2, column3, … 是表中的列名。
value1, value2, value3, … 是要插入的具体数值。

示例:
向以下表mmall_cart中再插入一行数据
在这里插入图片描述

INSERT INTO `mmall_cart` VALUES ('126', '21', '26', '1', '1', '2017-04-13 21:27:06', '2017-04-13 21:27:06');

在这里插入图片描述

更新数据

UPDATE table_name
SET column1 = value1, column2 = value2, ...
WHERE condition;

示例:
在这里插入图片描述
将上表中的user_id/product_id均改为20

UPDATE mmall_cart SET user_id = '20', product_id = '20' WHERE id = 126;

结果如下:
在这里插入图片描述

删除数据

DELETE FROM table_name
WHERE condition;

在这里插入图片描述
删除id为127的数据

DELETE FROM mmall_cart WHERE id = 127;

结果为:
在这里插入图片描述

查询数据

SELECT column1, column2, ...
FROM table_name
[WHERE condition]
[ORDER BY column_name [ASC | DESC]]
[LIMIT number];

简单示例:

-- 选择所有列的所有行
SELECT * FROM users;

-- 选择特定列的所有行
SELECT username, email FROM users;

-- 添加 WHERE 子句,选择满足条件的行
SELECT * FROM users WHERE is_active = TRUE;

-- 添加 ORDER BY 子句,按照某列的升序排序
SELECT * FROM users ORDER BY birthdate;

-- 添加 ORDER BY 子句,按照某列的降序排序
SELECT * FROM users ORDER BY birthdate DESC;

-- 添加 LIMIT 子句,限制返回的行数
SELECT * FROM users LIMIT 10;

-- 使用 AND 运算符和通配符
SELECT * FROM users WHERE username LIKE 'j%' AND is_active = TRUE;

-- 使用 OR 运算符
SELECT * FROM users WHERE is_active = TRUE OR birthdate < '1990-01-01';

-- 使用 IN 子句
SELECT * FROM users WHERE birthdate IN ('1990-01-01', '1992-03-15', '1993-05-03');

WHERE 操作符

有条件地从表中选取数据,可将 WHERE 子句添加到 SELECT 语句中。WHERE 子句用于在 MySQL 中过滤查询结果,只返回满足特定条件的行。
示例:

SELECT * FROM users WHERE username = 'test';

常搭配的逻辑符号有

说明符号
不等于<>, !=
等于=
大于>
小于<
大于等于>=
小于等于<=

聚合函数

语法:

SELECT 聚合函数(字段列表) FROM 表名;

示例表:
在这里插入图片描述
COUNT计数,结果为4

SELECT COUNT(quantity) FROM mmall_cart;

MAX求最大值,结果为9

SELECT MAX(quantity) FROM mmall_cart;

MIN求最小值,结果为1

SELECT MIN(quantity) FROM mmall_cart;

AVG求平均值,结果为4.25

SELECT AVG(quantity) FROM mmall_cart;

SUM求和,结果为17

SELECT SUM(quantity) FROM mmall_cart;

LIKE 子句

LIKE 子句是在 MySQL 中用于在 WHERE 子句中进行模糊匹配的关键字。
示例:

SELECT * FROM customers WHERE last_name LIKE 'S%';

以上 SQL 语句将选择所有姓氏以 ‘S’ 开头的客户。

分组 GROUP BY + HAVING

GROUP BY 语句根据一个或多个列对结果集进行分组。一般配合聚合函数和HAVING使用。
WHERE和HAVING的区别是HAVING可以对分组后的数据进行过滤。

语法:

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

示例:
查询年龄小于45的员工,并根据工作地址分组,获取同一地址员工数量大于等于3的工作地址

SELECT workaddress, COUNT(*) FROM emp WHERE age < 45 GROUP BY workaddress HAVING COUNT(*) >= 3;

ORDER BY(排序) 语句

ORDER BY(排序) 语句可以按照一个或多个列的值进行升序(ASC)或降序(DESC)排序。
语法:

SELECT column1, column2, ...
FROM table_name
ORDER BY column1 [ASC | DESC], column2 [ASC | DESC], ...;

示例:

SELECT * FROM mmall_cart ORDER BY user_id;

数据就会按给定字段排序,结果如下:
在这里插入图片描述

LIMIT 操作符 分页查询

语法

SELECT 字段列表 FROM 表名 LIMIT 起始索引, 查询记录数

在这里插入图片描述
示例:
查询第一页员工数据,每页展示十条记录

SELECT * FROM emp LIMIT 10;

多表查询-联合查询 UNION 操作符

UNION:连接数据集关键字,可以将两个查询结果集拼接为一个,会过滤掉相同的记录
UNION ALL:连接数据集关键字,可以将两个查询结果集拼接为一个,不会过滤掉相同的记录
注意:对于联合查询的多张表列数必须保持一致,字段类型也需要保持一致。
作用简单描述就是:表A有a/b两列20条数据,表B有a/b两列30条数据,通过UNION ALL以后可以得到a/b两列50条数据。使用UNION后,会获得不重复的a/b两列数据

语法:

SELECT 字段列表 FROM 表A ...
UNION [ALL]
SELECT 字段列表 FROM 表B ...;

示例,查询 product_id>15,quantity<5的数据
在这里插入图片描述

SELECT * FROM mmall_cart WHERE product_id > 18
UNION
SELECT * FROM mmall_cart WHERE quantity > 6;

查询结果为
在这里插入图片描述
说明,第一条SELECT可以查询出后两条数据,第二条SELECT语句可以查询出第二条数据,拼一起后即为原表后三条数据。

多表查询-连接的使用-JOIN

JOIN用于联合多表查询,其中:
INNER JOIN(内连接,或等值连接):获取两个表中字段匹配关系的记录。
LEFT JOIN(左连接):获取左表所有记录,即使右表没有对应匹配的记录。
RIGHT JOIN(右连接): 与 LEFT JOIN 相反,用于获取右表所有记录,即使左表没有对应匹配的记录。


在这里插入图片描述


以下 以员工表emp,部门表dept为例来简单说明。每个部门有对应的多个员工,属于1对N。

内连接

语法:

SELECT column1, column2, ...
FROM table1
INNER JOIN table2 ON table1.column_name = table2.column_name;

内连接分为隐式和显示连接。对于显示内连接,inner可以省略。


在这里插入图片描述


左连接和右连接
语法:

SELECT column1, column2, ...
FROM table1
LEFT JOIN table2 ON table1.column_name = table2.column_name;
SELECT column1, column2, ...
FROM table1
RIGHT JOIN table2 ON table1.column_name = table2.column_name;

在这里插入图片描述


自连接
自连接是表与自身表相连接


在这里插入图片描述


语句编写和底层执行顺序

语句编写顺序
在这里插入图片描述
示例:

SELECT DISTINCT column1, column2
FROM table1
JOIN table2 ON table1.id = table2.foreign_id
WHERE column1 > 100
GROUP BY column1
HAVING COUNT(*) > 1
ORDER BY column1 DESC
LIMIT 10;

MySQL语句底层的执行顺序如下:

1. FROM子句:选择数据来源的表或视图。
2. ON子句:连接条件(如果有的话,例如在JOIN操作中)。
3. JOIN子句:如果有的话,执行连接操作。
4. WHERE子句:过滤条件,只返回符合条件的记录。
5. GROUP BY子句:分组统计的字段。
6. HAVING子句:分组后的过滤条件。
7. SELECT子句:选取特定的列。
8. DISTINCT子句:去除重复数据。
9. ORDER BY子句:结果集的排序顺序。
10. LIMIT子句:限制结果集的数量。

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

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

相关文章

从0到1手把手撸码搭建后台管理系统

从0到1手把手撸码搭建后台管理系统 第一章:系统介绍开发目的与过程 要使用 Vue3 搭建后台&#xff0c;你可以按照以下步骤进行&#xff1a; 安装 Vue3&#xff1a;使用包管理工具&#xff08;如 npm 或 yarn&#xff09;安装 Vue3。选择构建工具&#xff1a;选择一个适合的构…

Spring之循环依赖

什么是循环依赖? 依赖的相互引用,如下列的这种形式 Component public class A {Autowiredprivate B b;}Component public class B {Autowiredprivate A a; } Spring是如何解决循环依赖的 Spring是通过三级缓存来解决循环依赖 singletonObjects : 单例bean,已经实例化,完成…

非周期连续函数的傅里叶变换

首先 我们把一个非周期信号扩展成一个周期信号 然后用傅里叶级数展开 也可以得到对应的级数系数 利用周期趋向于无穷大 可以把傅里叶级数展开就变成了一个积分 而神奇的是积分里其实还有一个积分 这样我们就得到了傅里叶变换对 我们把里面的积分成为函数的傅里叶变换 把外面…

C语言交换二进制位的奇数偶数位

基本思路 我们要先把想要交换的数的二进制位给写出来假如交换13的二进制位&#xff0c;13的二进制位是 0000 0000 0000 0000 0000 0000 0000 1101然后写出偶数位的二进制数&#xff08;偶数位是1的&#xff09; 1010 1010 1010 1010 1010 1010 1010 1010然后写出奇数位的二进…

Mac通过Idea启动Tomcat时出现Cannot run program xxx/catalina.sh 错误

问题描述 Mac通过Idea启动Tomcat时出现Cannot run program xxx/catalina.sh错误&#xff0c;详细如下&#xff1a; Error running Tomcat9 Cannot run program "/Users/xxx/Desktop/work/devtools/apache-tomcat-9.0.19/bin/catalina.sh" (in directory "/U…

算法设计课第一周(排序算法的效率分析)

实验1 排序算法的效率分析 一、【实验目的】 &#xff08;1&#xff09;复习排序算法的实现过程&#xff1b; &#xff08;2&#xff09;设计平均与最坏情况下时间复杂度的数据环境并理解相关含义&#xff1b; &#xff08;3&#xff09;初步了解算法时间复杂度的分析方法。…

FlashFace:一种高保真身份保存的人类形象个性化方法

FlashFace技术是由香港大学、阿里巴巴集团、蚂蚁集团共同研发的一项实用工具&#xff0c;用户可以通过提供一张或几张参考面部图像和文本提示&#xff0c;就可以轻松地即时个性化自己的相片。 与现有的人像定制方法相比&#xff0c;FlashFace方法具有更高保真度的身份保留xi性…

【spring】Spring Cloud Alibaba版本发布说明

Spring Cloud Alibaba版本发布说明 由于 Spring Boot 3.0&#xff0c;Spring Boot 2.7~2.4 和 2.4 以下版本之间变化较大&#xff0c;目前企业级客户老项目相关 Spring Boot 版本仍停留在 Spring Boot 2.4 以下&#xff0c;为了同时满足存量用户和新用户不同需求&#xff0c;社…

Vue 组件化编程

Vue 组件化编程 非单文件组件 定义组件 使用Vue.extend(options&#xff09;创建 不要写eldata要写成函数&#xff0c;避免组件被复用时&#xff0c;数据存在引用关系 注册组件 局部注册&#xff1a;new Vue()的时候&#xff0c;options传入components全局注册&#xff1a;V…

Linux 个人笔记之三剑客 grep sed awk

文章目录 零、预一、grep 文本过滤工具基础篇实战篇 二、sed 字符流编辑器基础篇实战篇 三、awk 文本处理工具基础篇实战篇 四、附xargsuniq & sort基础篇实战篇 cut 零、预 bash 的命令行展开 {} $ echo file_{1..4} file_1 file_2 file_3 file_4$ echo file_{a..d} file_…

高等数学基础篇(数二)之多元函数的基本概念

多元函数基本概念&#xff1a; 一、多元函数的极限 二、多元函数的连续性 三、偏导数 四、全微分 目录 一、多元函数的极限 二、多元函数的连续性 三、偏导数 1.偏导数的定义 2.二元函数偏导数的几何意义 3.高阶偏导数 四、全微分 补充&#xff1a; 一元函数极限连…

BIONIOAIO

通信技术整体解决的问题 1.局域网内的通信要求 2.多系统间的底层消息传递机制 3.高并发下&#xff0c;大数据量的通信场景需要 4.游戏行业。无论是手游服务端、还是大型网络游戏&#xff0c;java的应用越来越广 IO模型基本说明 就是用什么样的通道或者说是通信模式和架构…

数学逻辑专题

数学专题 分治篇LeetCode 263. 丑数解题思路代码实现总结 不要纠结&#xff0c;干就完事了&#xff0c;熟练度很重要&#xff01;&#xff01;&#xff01;多练习&#xff0c;多总结&#xff01;&#xff01;&#xff01; 分治篇 LeetCode 263. 丑数 解题思路 为判断 nnn 是否…

前端实现菜单搜索搜索(功能模版)

目录 前言正文 前言 总体界面如下所示&#xff1a; 正文 <template><div class"avue-searchs"click.self"handleEsc"><div class"avue-searchs__title">菜单搜索</div><div class"avue-searchs__content"…

以XX医院为例的医疗建筑能效管理系统【建筑能耗 供电可靠 】

一、行业背景 二、行业特点 1.供电可靠性要求高&#xff1a;医院配电系统复杂&#xff0c;门诊、急救、手术室、ICU/CCU、血液透析等场合特一级和一级负荷比较多&#xff0c;一旦发生故障会造成严重影响&#xff0c;对配电可靠性要求极高。 2.能耗水平高&#xff1a;医院能耗…

Vue.js基础指令

&#xff08;在讲指令之前&#xff0c;可以先了解插值表达式&#xff0c;如果已经知道&#xff0c;当我没说&#xff09; 一.插值表达式 1.数据绑定最常见的形式就是双大括号的文本插值&#xff0c;Mustache上属性的值替代。只要绑定的数据对象上属性发生了改变&#xff0c;插…

10_MVC

文章目录 JSON常用的JSON解析Jackson的常规使用指定日期格式 MVC设计模式MVC介绍前后端分离案例&#xff08;开发与Json相关接口&#xff09; 三层架构三层架构介绍 JSON JSON&#xff08;JavaScript Object Notation&#xff09; 是一种轻量级的数据交换格式&#xff0c;是存…

【教学类-09-03】20240401细线迷宫图02(A4横版一页-2份竖版)

作品展示&#xff1a; 背景需求&#xff1a; 【教学类-09-02】20240331细线迷宫图01&#xff08;A4横版一页1份横版&#xff09;-CSDN博客文章浏览阅读779次&#xff0c;点赞28次&#xff0c;收藏6次。【教学类-09-02】20240331细线迷宫图01&#xff08;A4横版一页1份横版&…

【2012 统考真题/完整代码】找单词共同后缀的起始位置

题目 假定采用带头结点的单链表保存单词&#xff0c;当两个单词有相同的后缀时&#xff0c;则可共享相同的后缀存储空间&#xff0c;例如&#xff0c;“loading”和“being”的存储映像如下图所示。 设str1和str2分别指向两个单词所在单链表的头结点&#xff0c;链表结点结构为…

PTA L2-043 龙龙送外卖

龙龙是“饱了呀”外卖软件的注册骑手&#xff0c;负责送帕特小区的外卖。帕特小区的构造非常特别&#xff0c;都是双向道路且没有构成环 —— 你可以简单地认为小区的路构成了一棵树&#xff0c;根结点是外卖站&#xff0c;树上的结点就是要送餐的地址。 每到中午 12 点&#…