MySQL把数量平均n人_mysql_day02

这篇博客详细介绍了MySQL数据库的启动与连接、库和表的管理,包括创建、查看、切换、删除以及数据类型的使用。还深入讲解了数据记录的插入、查询、更新和删除操作,以及表字段的管理,包括添加、修改和删除字段。此外,文章讨论了字符类型的宽度和数值类型的宽度的区别,并提供了各种查询条件子句的使用,如WHERE、运算符、范围比较、模糊比较和正则匹配。最后,文章涵盖了SQL查询的顺序、ORDER BY、LIMIT、聚合函数、GROUP BY、HAVING、DISTINCT、数学运算以及约束和索引的概念及其应用。
摘要由CSDN通过智能技术生成

MySQL-Day01回顾

1、MySQL的特点

1、关系型数据库

2、跨平台

3、支持多种编程语言

2、MySQL的启动和连接

1、服务端启动

sudo /etc/init.d/mysql start|stop|restart|reload

2、客户端连接

mysql -h主机地址 -u用户名 [-P3306] -p密码

3、注意

1、MySQL中的数据是以文件的形式存储在数据库目录/var/lib/mysql

2、关系型数据库的核心内容是 关系 即 二维表

3、库的管理

1、创建库(指定字符集)

create database 库名 default charset = utf8;

2、查看创建库的语句

show create database 库名;

3、查看当前所在库

select database();

4、切换库

use 库名;

5、查看库中已有表

show tables;

6、删除库

drop database 库名;

4、表的管理

1、创建表(指定字符集)

CREATE TABALE 表名(字段名 数据类型,...)DEFAULT CHARSET = UTF8;

2、查看创建表的语句(字符集和存储引擎)

show create table 表名;

3、查看表结构

desc 表名;

4、删除表

drop table 表名;

5、表记录的管理

1、插入记录

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

insert into 表名(字段名列表) values(),(),...;

2、查询表记录

select * from 表名;

select 字段名1,字段名2,... from 表名;

6、表字段管理

1、添加(add)

alter table 表名 add 字段名 数据类型;

alter table 表名 add 字段名 数据类型 first;

alter table 表名 add 字段名 数据类型 after 字段名;

2、修改(modify)

alter table 表名 modify 字段名 新数据类型;

3、删除(drop)

alter table 表名 drop 字段名;

4、字段名重命名(change)

alter table 表名 change 旧字段名 新字段名 数据类型;

5、表的重命名(rename)

alter table 表名 rename 新表名;

7、如何更改默认字符集

1、步骤

1、sudo -i

2、cd /etc/mysql/mysql.conf.d/

3、cp -p mysqld.cnf mysqld.cnf.bak

4、vi mysqld.cnf

[mysqld]

character_set_server = utf8

5、/etc/init.d/mysql restart | reload

8、客户端把数据存储到数据库服务器上的过程

1、连接到数据库

2、选择库

3、创建/修改表

4、断开连接

9、名词

DB DBMS(MySQL、Oracle...) DBS(数据库系统)

10、数据类型

1、数值类型

1、整型

1、int(4个字节)

2、tinyint(1个字节) 有符号、无符号unsigned

2、浮点型

1、float(4个字节,最多显示7个有效位)

2、double(8个字节,最多显示15个有效位)

3、decimal(M+2个字节,最多显示28个有效位)

2、字符类型

1、char(定长,浪费存储空间,但是性能高)

2、varchar(变长,节省存储空间,但是性能低)

3、枚举类型

1、enum(最多有65535个不同值)

2、set(最多有64个不同值)

## 在插入记录时 "值1,值2,..."

4、日期时间类型

1、year

2、date

3、time

4、datetime # 不给值默认返回NULL

5、timestamp # 不给值默认返回系统当前时间

MySQL-Day02笔记

1、字符类型的宽度和数值类型的宽度的区别

1、数值类型的宽度仅仅为显示宽度,只用于select查询显示,和占用的存储空间大小无关,可用zerofill查看效果

2、字符类型的宽度超过则无法存储

2、where条件子句(配合查询、修改、删除操作)

1、语法格式

select * from 表名 where 条件;

3、表记录管理

1、删除表记录

1、delete from 表名 where 条件;

2、注意

delete语句后如果不佳where条件子句,会将表中所有记录全部删除

2、更新表记录

1、update 表名 set 字段名1=值1,字段名2=值2,... where 条件;

2、注意

update语句后如果不加where条件子句会将表中所有记录全部更改

3、练习

1、查找所有蜀国人的信息

2、查找女英雄信息,只显示姓名、性别和国家

3、把曹操的国籍改为蜀国

4、把魏延的性别改为女,国籍改为 泰国

5、把id为2的记录的姓名改为 司马懿,性别改为 男,国家改为 魏国

6、删除所有的泰国人

7、删除所有的英雄记录

4、运算符操作

1、数值比较&字符比较

1、数值比较运算符:=、!=、>、>=、

2、字符比较运算符:=、!=

3、练习

1、找出攻击力高于150的英雄的名字和攻击力值

2、找出防御力不等于100的英雄信息

2、逻辑比较

1、运算符:

and (两个或者多个条件同时满足)

or (两个或者多个条件有一个满足就可以)

2、练习

1、找出攻击值大于200的蜀国英雄的名字和攻击值

2、查找蜀国和魏国的英雄信息

3、将吴国英雄中攻击值为110的英雄的攻击值设置为100,防御值设置为60

3、范围内比较

1、运算符

between and、 in 、not in

2、语法

between 值1 and 值2

in(值1,值2,...,值N)

not in(值1,值2,...,值N)

3、练习

1、查找攻击值在100-200之间的蜀国英雄信息

2、找到蜀国和吴国以外国家的女英雄信息

4、匹配空、非空

1、空 :is null

2、非空 :is not null

3、示例

1、查找姓名为NULL的蜀国女英雄信息

2、查找姓名为""的英雄的id、姓名和国家

4、注意

1、null :空值,必须用 is 或者 is not 去匹配

2、"" :空字符串,用 = 或者 != 去匹配

5、模糊比较

1、where 字段名 like 表达式;

2、表达式

1、_ : 匹配单个字符

2、% : 匹配0到多个字符

3、示例

1、select name from sanguo where name like "_%_";

# 匹配名字中至少有两个字的英雄

2、select name from sanguo where name like "%";

# NULL不会被统计

3、select name from sanguo where name like "___";

# 匹配名字为三个字的英雄

4、select name from sanguo where name like "赵%";

# 匹配姓赵的英雄

6、正则匹配查询 regexp

1、where 字段名 regexp "正则表达式";

2、正则表达式符号

^ : 以...开头

$ : 以...结尾

. : 匹配任意一个字符

[]: 包含...内容

[0-9]:匹配带数字的

[a-z]:匹配带小写字母的

[A-Z]

* : 星号前面的字符出现0个或者多次 "^赵.*"

3、示例

1、select name from sanguo where name regexp "[0-9]"; # 匹配名字中带数字的

2、select name from sanguo where name regexp "^[0-9]"; # 匹配名字中以数字开头的记录

3、select name from sanguo where name regexp "[0-9]$"; # 匹配名字中以数字结尾的记录

4、select name from sanguo where name regexp "^司.*懿$"; # 匹配以 司 开头,以 懿 结尾的记录

5、select name from sanguo where name regexp "^...$"; # ... ... ...

5、SQL查询

1、总结(执行顺序)

3、select ... 聚合函数 from 表名

1、where ...

2、group by ...

4、having ...

5、order by ...

6、limit ...

2、order by

1、作用:给查询的结果进行排序

2、语法格式:order by 字段名 排序方式;

3、排序方式

1、ASC(默认) : 升序

2、DESC : 降序

4、示例

1、将英雄按防御值从低到高排序

select * from sanguo order by fangyu asc;

2、将蜀国英雄按攻击值从高到低排序

select * from sanguo where country = "蜀国" order by gongji desc;

3、将魏蜀两国的男英雄中名字为三个字的英雄按防御值升序排列

select * from sanguo where country in("魏国","蜀国") and sex="男" and name like "___" order by fangyu asc;

3、limit(永远放在SQL语句的最后写)

1、作用:限制显示查询记录的个数

2、用法

1、limit n :-->显示n条记录

2、limit m,n :-->从第(m+1)条开始,显示n条记录

limit 4,5 :显示 第5名-第9名

## m的值是从0开始计数的

3、示例

1、查找防御值倒数第2名到倒数第4名的蜀国英雄记录

select * from sanguo where country="蜀国" order by fangyu asc limit 1,3;

2、查找攻击值前3名且名字不为空值的蜀国英雄的姓名、攻击值和国家

select name,gongji,country from sanguo where name is not null and country="蜀国" order by gongji desc limit 3;

4、聚合函数

1、分类

1、avg(字段名) : 求字段的平均值

2、sum(字段名) : 求和

3、max(字段名) : 求最大值

4、min(字段名) : 求最小值

5、count(字段名):统计该字段记录的个数

2、示例

1、攻击力最强值是多少

select max(gongji) as best from sanguo;

2、统计一下id,name两个字段分别有多少条记录

select count(id),count(name) from sanguo;

# 空值NULL不会被统计,空字符串""会被统计

3、统计蜀国英雄中攻击值大于200的英雄的数量

select count(*) from sanguo where country="蜀国" and gongji>200;

5、group by(先分组,再聚合)

1、作用 :给查询的结果进行分组

2、示例

1、统计sanguo表中一共有几个国家

select country from sanguo group by country;

2、计算所有国家的平均攻击力

select country,avg(gongji) from sanguo group by country;

执行过程:

1、先分组(此时未去重) group by country

2、再聚合(求每组的平均攻击值)

3、去重

3、查找所有国家中 英雄数量最多的 前2名 的国家名称及英雄数量

select country,count(*) as numbers from sanguo group by country order by numbers desc limit 2;

3、注意

1、group by之后的字段名必须要为select之后的字段名

2、如果select之后的字段没有在group by语句之后,则必须要对该字段进行聚合处理(聚合函数)

6、having

1、作用 :对查询的结果进行进一步筛选

2、示例

1、找出平均攻击力大于105的国家的前2名,显示国家名称和平均攻击力

select country,avg(gongji) as pjgj from sanguo group by country having pjgj > 105 order by pjgj desc limit 2;

3、注意

1、having语句通常与group by语句联合使用,用来过滤由group by语句返回的记录集

2、having语句的存在弥补了where条件子句不能与聚合函数联合使用的不足,where操作的是表中实际存在的字段,having操作的是聚合函数生成的显示列

7、distinct

1、作用:不显示字段的重复值

2、示例

1、sanguo表中一共有哪些个国家

select distinct country from sanguo;

2、计算蜀国一共有多少个英雄

select count(distinct name) from sanguo where country = "蜀国";

3、注意

1、distinct处理的是distinct和from之间的所有字段,所有字段的值必须完全相同才可以去重

2、distinct不能对任何字段做聚合处理

8、查询表记录时可以做数学运算

1、运算符

+ - * / %

2、示例

1、查询时显示所有英雄的攻击力 * 10

select name,gongji*10,country from sanguo;

6、约束

1、作用

1、为了保证数据的完整性、一致性、有效性,可以限制无效的数据插入到数据表中

2、约束分类

1、默认约束(default)

1、作用

在插入记录时,如果不给该字段赋值,则使用默认值

2、格式

字段名 数据类型 default 默认值,

2、非空约束

1、作用

不允许该字段的值有空值NULL记录

2、格式

字段名 数据类型 not null,

7、索引

1、定义

对数据库中表的一列或者多列的值进行排序的一种结构(MySQL中索引用Btree方式)

2、索引的优点

可以加快数据的检索速度

3、索引的缺点

1、当对表中的数据进行增加、修改、删除的时候,索引需要动态维护,降低了数据的维护速度

2、索引需要占用物理存储空间(数据库目录/var/lib/mysql)

4、索引示例

1、运行 insert_.py 文件,插入100万条记录

2、开启性能分析

show variables like "%pro%";

set profiling = 1;

3、执行查询语句

select name from t1 where name="lucy99999";

4、查看性能分析结果

show profiles;

5、在name字段创建索引

create index name on t1(name);

6、执行查询语句

select name from t1 where name="lucy99999";

8、查看性能分析结果

show profiles;

9、关闭性能分析

set profiling = 0;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值