MySQL|基础操作+8大查询方式汇总

news2024/11/29 22:50:52

MySQL操作

一、操作数据库

MySQL中可以创建多个数据库用于存储不同场景的表结构,学习MySQL之前,我们要先理清如下的关系:

数据库 --> 数据表 --> 字段

抛开数据库存储上限去考虑,每个数据库中可以包含无数个数据表,而每个数据表又可以包含无数个字段,因此我们的学习也应该从创建数据库开始。

  • 创建数据库
create database 数据库名 charset=utf8;
例:
create database mydata charset=utf8;
  • 查看所有数据库 : show databases;
show databases; 

在这里插入图片描述

  • 使用数据库
use 数据库名;
  • 查看当前使用的数据库
select database();
  • 删除数据库
drop database 数据库名;
例:
drop database mydata;

二、数据表常见操作

创建好了数据库,我们就可以在某个数据库中进行数据表的创建与操作了,数据表是MySQL语法中的核心部分,数据工作者的多数时间都在进行数据表中各个字段的“增删改查”。

1. 基本操作

  • 查看当前数据库中所有表
show tables;
  • 查看表结构
desc 表名;

2. 创建表

给定字段名和数据类型时,我们就可以进行数据表的创建了,当然创建表的时候也有很多特殊的可选项,具体如下:

  • 数据表创建示例(简版):

    • column:字段名
    • datatype:数据类型
  • MySQL常用数据类型介绍:点击此处

CREATE TABLE table_name(
    column1 datatype,
    column2 datatype,
    column3 datatype,
    .....
    columnN datatype
);
  • 例:创建分数表
create table Score(
    name varchar(20),
    age tinyint,
    score int
);
  • 例:创建学生表
create table students(
    id int unsigned primary key auto_increment not null,
    name varchar(20) default '',
    age tinyint unsigned default 0,
    height decimal(5,2),
    gender enum('男','女','保密'),
    cls_id int unsigned default 0
);

上述代码块创建的时候使用了许多特殊语句,解释如下:

  • unsigned:限制整数类型为无符号数据(没有负数)。
  • primary key:主键约束,在表中定义一个主键来唯一确定表中每一行数据的标识符。主键可以是表中的某一列或者多列的组合,其中由多列组合的主键称为复合主键。
  • auto_increment:主键自动增长,从1开始,每多插入一条数据,主键值+1。
  • default:为该字段设定默认值。
  • decimal:保留准确精确度的列,例如decimal(5,2)标识一共能存储5位数,小数点后可以有2位,因此可保存数据的范围是-999.99-999.99
  • enum:只能从其中选择一个值插入到数据库。

3. 修改表

数据库中创建好的内容不是一成不变的,我们可以随时对表结构进行增删改的操作。

  • 添加字段
alter table 表名 add 列名 类型;
例:
alter table students add birthday datetime;
  • 修改表-修改字段名
alter table 表名 change 原名 新名 类型及约束;
例:
alter table students change birthday birth datetime not null;
  • 修改表-修改字段类型
alter table 表名 modify 列名 类型及约束;
例:
alter table students modify birth date not null;
  • 修改表-删除字段
alter table 表名 drop 列名;
例:
alter table students drop birthday;

4. 删除表

建议慎用所有的删除语句。

drop table 表名;
例:
drop table students;

5. 查看表的创建语句

show create table 表名;
例:
show create table classes;

三、添加数据

表创建好之后,我们可以使用SQL语句添加数据,但并不是所有场景都会用到该语句,工作中数据添加的方式多是:端口实时同步,表格导入等。

  • 完整格式
insert into 表名 ('字段名1', '字段名2') values(1,2);
  • 省略格式
    • 使用省略格式时,需要在values中填写所有字段对应的值,否则将会报错。
insert into 表名 values(1,2);
  • 完整格式示例
insert into students(id, name, age, height, gender, cls_id) values
(10001, 'xiaoming', 22, 180, '男', 1);

在这里插入图片描述

  • 省略格式示例
insert into students values
(10002, 'xiaolv', 23, 165, '女', 1);

在这里插入图片描述

  • 一次添加多列数据
insert into students(id, name, age, height, gender, cls_id) values
(10003, 'xiaohu', 22, 175, '男', 2),
(10004, 'xiaoli', 24, 160, '女', 1),
(10005, 'xiaoxi', 23, 167, '女', 2);

在这里插入图片描述

四、查询数据

表查询操作是数据库中最重要的操作(没有之一),可以说对于数据库,每天的工作就是组合各种各样的查询语句进行不同场景的数据查询。

1. 基础查询

  • 查询所有列
select * from 表名;
例:
select * from students;

在这里插入图片描述

  • 查询指定列
    • 查询时可以使用as为列或表指定别名。
select1,2,... from 表名;
例:
select id, name from students;
例(使用别名):
select id as id2, name from students;

在这里插入图片描述

2. 条件查询

使用where子句对表中的数据筛选,结果为true的行会出现在结果集中

  • 语法如下:
select * from 表名 where 条件;
例:
select * from students where id=10001;

在这里插入图片描述

  • where后面支持多种运算符,进行条件的处理
    • 比较运算符
    • 逻辑运算符
    • 模糊查询
    • 范围查询
    • 空判断
比较运算符
  • 等于: =
  • 大于: >
  • 大于等于: >=
  • 小于: <
  • 小于等于: <=
  • 不等于: != 或 <>
  • 例1:查询编号大于10003的学生
select * from students where id > 10003;

在这里插入图片描述

  • 例2:查询编号不大于10004的学生
select * from students where id <= 10004;

在这里插入图片描述

  • 例3:查询姓名不是“xiaoming”的学生
select * from students where name != 'xiaoming';

在这里插入图片描述

逻辑运算符
  • and
  • or
  • not
  • 例1:查询编号大于10003的女同学
select * from students where id > 3 and gender='女';

在这里插入图片描述

  • 例2:查询编号小于10002或年龄大于24学生
select * from students where id < 10002 or age > 24;

在这里插入图片描述

模糊查询
  • MySQL中使用like语句进行模糊查询,模糊查询常用的符号如下:
  • %表示任意多个任意字符
  • _表示一个任意字符
  • 查询名字以’xiaol’开头并且末尾只有一个字母的学生(xiao ming=xiaomin+g)
select * from students where name like 'xiaol_';

在这里插入图片描述

  • 例:查询叫’hu’的学生
select * from students where name like '%hu';

在这里插入图片描述

范围查询
  • in表示在一个非连续的范围内进行检索,查询数据是否在给定范围内。
  • 例1:查询编号是10002或10004的学生:
select * from students where id in(10002,10004);

在这里插入图片描述

  • between … and …表示在一个连续的范围内进行检索
  • 例2:查询编号为10002至10004的学生
select * from students where id between 10002 and 10004;

在这里插入图片描述

空判断
  • 注意:null与’'是不同的
  • 判空is null
  • 例1:查询没有填写身高的学生
# 插入带有空值的数据
insert into students(id, name, age) values (10006, 'xiaomei', 30);

# 查询没有填写身高的学生
select * from students where height is null;

在这里插入图片描述

  • 判非空is not null
  • 例2:查询填写了性别的学生
select * from students where gender is not null;

在这里插入图片描述

条件优先级
  • 查询条件的优先级由高到低的顺序为:小括号,not,比较运算符,逻辑运算符
  • and比or先运算,如果同时出现并希望先算or,需要结合()使用

3. 排序

为了方便查看数据,可以对数据进行排序

语法:

select * from 表名 order by1 asc|desc ,2 asc|desc,...;

说明

  • 将行数据按照列1进行排序,如果某些行列1的值相同时,则按照列2排序,以此类推
  • 默认按照列值从小到大排列(asc)
  • asc从小到大排列,即升序
  • desc从大到小排序,即降序

示例

  • 例1:查询1班女生信息,按学号降序
select * from students where gender='女' and cls_id=1 order by id desc;

在这里插入图片描述

  • 例2:查询1班学生信息,按身高升序
select * from students where cls_id=1 order by height;

在这里插入图片描述

  • 例3:显示所有的学生信息,先按照年龄从大–>小排序,当年龄相同时 按照身高从高–>矮排序
select * from students  order by age desc,height desc;

在这里插入图片描述

4. 聚合查询

操作数据的时候,我们经常需要进行统计计算,SQL中提供了多种聚合函数可以让我们快速计算。

计数

  • count(*)表示计算总行数,括号中写星与列名,结果是相同的
  • 例1:查询学生总数
select count(*) from students;

在这里插入图片描述

最大值/最小值

  • max(列)表示求此列的最大值
  • min(列)表示求此列的最小值
  • 例2:查询女生的编号最大值
select max(id) from students where gender='女';

在这里插入图片描述

求和

  • sum(列)表示求此列的和
  • 例3:查询男生的总年龄
select sum(age) from students where gender='男';

在这里插入图片描述

平均值

  • avg(列)表示求此列的平均值
  • 例4:查询女生年龄的平均值
select avg(age) from students where gender='女';

在这里插入图片描述

聚合函数组合

  • 聚合函数之间也可以组合进行使用,比如我们可以使用countsum来求得平均值。
  • 例:查询女生年龄的平均值
select sum(age)/count(*) as avg_age from students where gender='女';

在这里插入图片描述

5.分组查询

  • 分组查询在实际工作中经常会用到,当我们需要统计某一字段下不同类别的统计数据时就需要用到分组查询了,比如:统计各个性别的学生数量,各个班级的男女生数量等。
group by
  1. group by的含义:将查询结果按照1个或多个字段进行分组,字段值相同的为一组
  2. group by可用于单个字段分组,也可用于多个字段分组
  • 直接使用group by的方法如下
select gender from students group by gender;

在这里插入图片描述

上段代码根据gender字段来分组,gender字段的全部值有3个’男’,‘女’,NULL,所以出现了三个数据,但是单独使用groupby是没有过多意义的(可以作为去重来使用),通常分组函数要配合聚合函数/concat函数一同使用。

group by + group_concat()

  1. group_concat(字段名)可以作为一个输出字段来使用,
  2. 表示分组之后,根据分组结果,使用group_concat()来放置每一组的某字段的值的集合
  • 查询各个性别的学生名字集合
select gender,group_concat(name) from students group by gender;

在这里插入图片描述

group by + 集合函数

  1. 通过group_concat()的启发,我们既然可以统计出每个分组的某字段的值的集合,那么我们也可以通过集合函数来对这个值的集合做一些操作
  • 分别统计各个性别的平均身高
select gender,avg(height) from students group by gender;

在这里插入图片描述

group by + having

  1. having 条件表达式:用来分组查询后指定一些条件来输出查询结果
  2. having作用和where一样,但having只能用于group by
  • 查找班级人数超过2的班级
select cls_id, count(*) from students group by cls_id having count(*)>2;

在这里插入图片描述

6.分页查询

当数据量过大时,在一页中查看数据是一件非常麻烦的事情,我们可以使用limit进行限制进行分页查询。

语法

  • start表示查询开始位置(第几行开始),end表示查询结束位置(第几行结束),可以省略填写start默认从0开始到end结束。
select * from 表名 limit start,end
  • 例1:查询前2行的女生信息
select * from students where gender='女' limit 2;

在这里插入图片描述

  • 例2:查询前2行的女生信息(2)
select * from students where gender='女' limit 0,2;

在这里插入图片描述

7.连接查询

在很多工作中我们需要面对成百上千个不同的数据表,当进行查询的时候,我们需要的结果也会来自于不同的表,这种情况下查询时我们需要将多张表连接成一个大的数据集,再选择合适的列返回

mysql支持三种类型的连接查询,分别为:

  • 内连接查询

    查询的结果为匹配字段相同时两个表匹配到的数据

在这里插入图片描述

  • 左连接查询

    查询的结果为右表匹配字段中的值在左表的匹配字段中存在时匹配到的数据,左表特有的数据,对于左表中无法被右表匹配的数据使用null填充

在这里插入图片描述

  • 右连接查询

    查询的结果为左表匹配字段中的值在右表的匹配字段中存在时匹配到的数据,右表特有的数据,对于右表中无法被左表匹配的数据使用null填充

在这里插入图片描述

  • 创建示例数据表
-- 分数表
create table scores (
  id int,
	subject varchar(20),
	score int
);

-- 学生表
create table students2 (
  id int,
	name varchar(20)
);
  • 添加数据
insert into students2 values
(10001, '张三'),
(10002, '李四'),
(10003, '王五'),
(10004, '赵六');


insert into scores values
(10001, '数学', 80),
(10001, '语文', 90),
(10003, '数学', 70),
(10004, '数学', 100),
(10005, '语文', 70);

语法

select * from1 inner/left/right join2 on1.=2.
  • 例1:使用内连接查询
select students2.id, name, subject, score 
from
students2
inner join
scores
on students2.id = scores.id;

在这里插入图片描述

  • 例2:使用左连接查询
select students2.id, name, subject, score 
from
students2
left join
scores
on students2.id = scores.id;

在这里插入图片描述

  • 例3:使用右连接查询
select scores.id, name, subject, score 
from
students2
right join
scores
on students2.id = scores.id;

在这里插入图片描述

8. 子查询

子查询概念

我们在进行select查询的时候,查询的结果本质上也是一张数据表,我们可以使用自查询的方式继续对该表进行查询。

在一个 select 语句中,嵌入了另外一个 select 语句,那么被嵌入的 select 语句称之为子查询语句。

主查询

主要查询的对象,第一条 select 语句

主查询和子查询的关系

  • 子查询是嵌入到主查询中
  • 子查询是辅助主查询的,要么充当条件,要么充当数据源
  • 子查询是可以独立存在的语句,是一条完整的 select 语句
  • 例1:标量子查询
  1. 查询班级学生所有科目平均分
  2. 查询大于等于平均分的记录
select * from scores where score >= (select avg(score) from scores);

在这里插入图片描述

  • 例2:列级子查询
  1. 具有考试成绩的学生id

  2. 找出学生表中对应的名字

select name from students2 where id in (select id from scores);

在这里插入图片描述

in () 括号内的内容表示查询范围,数据在括号中存在则满足。

  • 例3:表级别子查询
  1. 查询成绩表里具有数学成绩的学生
  2. 找出符合条件的学生姓名
select * from students2
inner join
(select * from scores 
where subject='数学') a
on students2.id = a.id;

在这里插入图片描述

上述代码中,我们对一个查询到的结果表进行了join。在使用该方法操作时,我们使用()将自查询扩起来,并在末尾对查询结果临时命名为a,当命名为a后,我们可以认为有数据表a可以供我们使用,a中的内容就是我们查询到的结果,接下来按照常规数据表连接查询方式进行操作即可。

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

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

相关文章

Apriori介绍及代码批注

一、Apriori原理解析 1. 概述 关联规则分析是数据挖掘中最活跃的研究方法之一&#xff0c;目的是在一个数据集中找到各项之间的关联关系&#xff0c;而这种关系并没有在数据中直接体现出来。以超市的销售数据为例&#xff0c;当存在很多商品时&#xff0c;可能的商品组合数量…

MySQL的数据库操作、数据类型、表操作

目录 一、数据库操作 &#xff08;1&#xff09;、显示数据库 &#xff08;2&#xff09;、创建数据库 &#xff08;3&#xff09;、删除数据库 &#xff08;4&#xff09;、使用数据库 二、常用数据类型 &#xff08;1&#xff09;、数值类型 &#xff08;2&#xff0…

用Jmeter做微信小程序项目接口测试【案例】

公司新项目组开发一款微信小程序电商平台&#xff0c;为了更好保证产品质量&#xff0c;因此提出了需要进行接口测试。 从接口本身来讲&#xff0c;对其测试与其他项目应该是一样的。所以不难理解&#xff0c;我们要对小程序的接口测试需要准备的 材料有&#xff1a; 1、完备…

LCR 158. 库存管理 II 哈希 / 摩尔投票法

LCR 158. 库存管理 II - 力扣&#xff08;LeetCode&#xff09; 仓库管理员以数组 stock 形式记录商品库存表。stock[i] 表示商品 id&#xff0c;可能存在重复。请返回库存表中数量大于 stock.length / 2 的商品 id。 &#xff08;1&#xff09;方法一&#xff1a;先排序 题目…

​Profinet转EtherNET/IP从站连接欧姆龙plc与西门子200smart通讯的配置方法​

本案例是200smart plc与欧姆龙plc进行通讯的方法&#xff0c;远创智控YC-PNM-EIP网关可以读写全系列西门子 PLC 数据。一般不需要 PLC 里做特殊的设置。只需要把 PLC 的变量地址配置到网关中&#xff0c;网关就可以读取指定地址的数据或者写数据到指定的地址。 PLC 通过网线连接…

Android---Bitmap详解

每一个 Android App 中都会使用到 Bitmap&#xff0c;它也是程序中内存消耗的大户&#xff0c;当 Bitmap 使用内存超过可用空间&#xff0c;则会报 OOM。 Bitmap 占用内存分析 Bitmap 用来描述一张图片的长、宽、颜色等信息&#xff0c;可用使用 BitmapFactory 来将某一路径下…

浮点数在计算机中的二进制表示

文章目录 Part.I IntroductionPart.II 原理Part.III 代码验证Reference Part.I Introduction 首先要了解一下下面的知识&#xff1a; 1 位有两种状态&#xff1a;0 或 11 字节&#xff08;byte&#xff09; 8 位&#xff08;bit&#xff09; 2 7 128 2^7128 27128&#xff1…

rhcsa简单的查询命令

时间 date -s "20021125 12:00:00" date 052312002002 一.简单语法 hwclock --查看硬件时间 hwclock --show 查看硬件时间 hwclock -w 同步硬件时间和系统时间 hwclock -s 将硬件时钟同步到系统时间 hwclock -r 查看当前时间 cal 查看当前月份日历 cal 10 …

nodejs+vue+elementui+express基于体质分析的个性化健身方案生成系统与设计

基于体质分析的个性化健身方案生成系统与设计 客户端&#xff1a; 1、在健身系统中可以自己选择课程&#xff08;需先充值&#xff0c;金额大于课程价格才可购买&#xff0c;否则提示余额不足&#xff0c;请充值&#xff09;&#xff0c;完成课程后由该课程的发布教练评价评分…

Python文件——使用Python读取txt文件

作者&#xff1a;Insist-- 个人主页&#xff1a;insist--个人主页 本文专栏&#xff1a;Python专栏 专栏介绍&#xff1a;本专栏为免费专栏&#xff0c;并且会持续更新python基础知识&#xff0c;欢迎各位订阅关注. 目录 一、文件的编码 1. 什么是编码 2. 常见的编码 二、P…

【软考】10.2 贪心法/回溯法/数据挖掘/智能优化

《贪心法》 适用于局部最优解 典型应用&#xff1a;背包问题 最有可能得到全局最优解&#xff1a;最大单位重量价值 ——> 重量 / 价值 《回溯法》 系统地搜索一个问题的所有解或者任一解深度优先&#xff0c;从根节点出发适用于解决迷宫类的问题 0-1背包算法的时间复杂度…

Python接口自动化之接口依赖!

以下主要介绍如何提取token、将token作为类属性全局调用及充值接口如何携带token进行请求。 一、场景说明 在面试接口自动化时&#xff0c;经常会问&#xff0c;其他接口调用的前提条件是当前用户必须是登录状态&#xff0c;如何处理接口依赖&#xff1f; 在此之前我们介绍过…

预训练机器阅读理解模型:对齐生成式预训练与判别式下游场景

©PaperWeekly 原创 作者 | 徐蔚文&#xff0c;李昕&#xff0c;邴立东等 单位 | 阿里巴巴达摩院 论文链接&#xff1a; https://arxiv.org/pdf/2212.04755.pdf 收录会议&#xff1a; NeurIPS 2023 论文链接&#xff1a; https://aclanthology.org/2023.acl-short.131.p…

038-第三代软件开发-简易视频播放器-自定义Slider (二)

第三代软件开发-简易视频播放器-自定义Slider (二) 文章目录 第三代软件开发-简易视频播放器-自定义Slider (二)项目介绍简易视频播放器自定义Slider (二)横向纵向 关键字&#xff1a; Qt、 Qml、 关键字3、 关键字4、 关键字5 项目介绍 欢迎来到我们的 QML & C 项目&…

进程(2)——进程状态(僵尸,睡眠……)【linux】

进程&#xff08;2&#xff09;——进程状态&#xff08;僵尸&#xff0c;睡眠……&#xff09;【linux】 一.操作系统的进程状态&#xff1a;1.1 运行态1.2 阻塞态1.3 挂起态 二.linux进程状态2.1 R——运行状态2.2 S——浅度睡眠状态2.3 D——&#xff08;disk sleep&#xf…

【数智化人物展】阿里元境CTO郭旷野:元宇宙技术推动数字内容生产变革

郭旷野 本文由阿里元境CTO郭旷野投递并参与《2023中国企业数智化转型升级先锋人物》榜单/奖项评选。 数据智能产业创新服务媒体 ——聚焦数智 改变商业 数字经济发展的大背景下&#xff0c;数字技术持续演进&#xff0c;逐渐形成了数字化生活、数字化生产模式&#xff0c;与此…

从工厂到社会:探索如何应用设计模式工厂模式

文章目录 &#x1f31f; 将设计模式工厂模式运用到社会当中&#x1f34a; 工厂模式在社会中的应用&#x1f389; 工厂&#x1f389; 餐厅&#x1f389; 运输 &#x1f34a; 工厂模式的优势&#x1f389; 代码简洁&#x1f389; 扩展性强&#x1f389; 便于维护和管理 &#x1f…

pytorch 笔记:KLDivLoss

1 介绍 对于具有相同形状的张量 ypred​ 和 ytrue&#xff08;ypred​ 是输入&#xff0c;ytrue​ 是目标&#xff09;&#xff0c;定义逐点KL散度为&#xff1a; 为了在计算时避免下溢问题&#xff0c;此KLDivLoss期望输入在对数空间中。如果log_targetTrue&#xff0c;则目标…

【继承练习题--多态-- 动态绑定-- 重写】

文章目录 继承的练习题&#xff1a;多态多态实现条件 动态绑定什么是重写Override 注解重写的条件&#xff08;缺一不可&#xff09;有一种特殊的重写&#xff1a;叫协变类型重写的设计原则快捷键生成重写重写和重载的区别object类是所有类的父类 总结 继承的练习题&#xff1a…

芯片封装简介【待补充】

TO封装 最开始的封装&#xff0c;这类封装三脚的比较多&#xff0c;比如7805 7812 等电源芯片 STO三脚贴片封装 TO的贴片形式 三极管和LDO比较常见 DIP封装 51单片机&#xff08;双列直插式封装&#xff09; SIP封装单列直插式封装&#xff08;罕见&#xff09; 5. SOP封…