学习笔记☞ MySQL(二)

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, 字段名2=值2, ... where 条件;
        2、注意
            update 语句后如果不加where条件子句会将表中所有记录全部更改

    3、练习

        1、查找所有蜀国人的信息
        2、查找女英雄信息,只显示姓名、性别、国家
        3、把曹操的国籍改为蜀国
        4、把魏延的性别改为女,国籍改为泰国
        5、把id为2的记录的姓名改为司马懿,性别改为男,国家改为魏国
        6、删除所有泰国人
        7、删除所有英雄记录
'''使用以下创建库和表,并插入内容
create database MOSHOU;
use MOSHOU;
create table hero(
id int,
name char(15),
sex enum("男","女"),
country char(10)
)default charset=utf8;
insert into hero values
(1,"曹操","男","魏国"),
(2,"小乔","女","吴国"),
(3,"诸葛亮","男","蜀国"),
(4,"貂蝉","女","东汉"),
(5,"赵子龙","男","蜀国"),
(6,"魏延","男","蜀国");
'''

select * from hero where country = '蜀国';
select name, sex, country from hero where sex = '女';
update hero set country = '蜀国' where name = '曹操';
update hero set sex = '女', country = '泰国' where name = '魏延';
update hero set name = '司马懿', sex = '男', country = '魏国' where id = 2;
delete from hero where country = '泰国';
delete from hero

4、运算符操作

    1、数值比较&字符比较

        1、数值比较运算符: = 、!= 、> 、>= 、< 、<=
        2、字符比较运算符:= 、 !=
        3、练习
            1、找出攻击力高于150的英雄的名字和攻击力

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

#1          
select name,gongji from sanguo where gongji>150;
#2
select * from sanguo where fangyu != 100;

    2、逻辑比较

        1、运算符
            and(两个或多个条件同时满足)
            or(两个或多个条件有一个满足就可以)
        2、练习:
            1、找出攻击力大于200的蜀国英雄的名字和攻击值
            2、查找蜀国和魏国的英雄信息           

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

#1
select name,gongji from sanguo where gongji > 200 and country = '蜀国';
#2
select * from sanguo where country = '蜀国' or country = '魏国';
#3
update sanguo set gongji = 100, fangyu = 60 where country = '吴国' and gongji = 110;

    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、找到蜀国和吴国以外国家的女英雄信息
            3、找到编号为1,3或5的蜀国英雄和貂蝉的编号、姓名和国家
select * from sanguo where gongji between 100 and 200 and country = '蜀国';
select * from sanguo where country not in('蜀国','吴国') and sex='女';
select id,name,country from sanguo where id in(1,3,5) and country='蜀国' or name='貂蝉';           

    4、匹配空和非空

        1、空:is null
        2、非空:is not mull
        3、示例
            1、查找姓名为null的蜀国男英雄信息
            2、查找姓名为‘’的英雄的id,姓名,国家
select * from sanguo where name is null and country = '蜀国' and sex='男';
select id,name,country from sanguo where name='';           
        4、注意
            1、NULL:空值,必须用 is 或 is nor 去匹配
            2、''  :空字符串,用 = 或 != 去匹配

    5、模糊比较

        1、where 字段名 like 表达式;
        2、表达式
            1、_:匹配单个字符
            2、%:匹配多个字符
        3、示例
1、select name from sanguo where name like '_%_';    # 匹配名字中最少有2个字的英雄
2、select name from sanguo where name like '%';      # 匹配名字中最少有1个字的英雄
# NULL 不会被统计
3、select name from sanguo where name like '___';     # 匹配名字中有3个字的英雄
4、select name from sanguo where name like '赵%';     # 匹配名字中姓赵的英雄          

    6、正则匹配查询 regexp

        1、where 字段名 regexp '正则表达式';
        2、正则表达式符号
            ^ :以...开头
            $ :以...结尾
            . :匹配任意一个字符
            []:包含...内容
                [0-9]  匹配带数字的
                [a-z]  匹配带小写字母的
                [A-Z]  匹配带大写字母的
            * :匹配星号前面的字符出现0次或多次
                '^赵.*'
        3、示例
select name from sanguo where name regexp '[0-9]';      #匹配名字中带数字的
select name from sanguo where name regexp '^[0-9]';     #匹配名字select name from sanguo where name regexp '[0-9]$';     #匹配名字中以数字结尾的记录
select name from sanguo where name regexp '^司.*懿$';    #匹配名字中以司开头,以懿结尾的
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、将英雄按防御值从低到高排序
            2、将蜀国英雄按攻击值从高到低排序
            3、将魏蜀两国的男英雄中名字为三个字的英雄按防御值升序排序
#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 ;           

    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、查找攻击值前3名且名字不为空值的蜀国英雄的姓名、攻击值和国家

# 1
select * from sanguo where country='蜀国' order by fangyu limit 1,3;
# 2
select name,gongji,country from sanguo where country='蜀国' and name is not null order by gongji desc limit 3;

    4、聚合函数

        1、分类
            1、avg(字段名)      :求字段的平均值
            2、sum(字段名)      :求字段的和
            3、max(字段名)      :求字段的最大值
            4、min(字段名)      :求字段的最小值
            5、count(字段名)    :统计该字段记录的个数  # 字段值NULL不会被统计
        2、示例
            1、攻击力最强值是多少
select max(gongji) 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 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;

select distinct name,country from sanguo;#当name和country同时重复会去重
            2、计算蜀国一共有多少英雄
select count(distinct name)from sanguo where country='蜀国';
        3、注意
            1、distinct处理的是地下停车他和from之间的所有字段,所有字段的值必须完全相同才可以去重
            2、distinct不能对任何字段做聚合处理

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

        1、计算符
            + - * / %
        2、示例
            1、查询时所有英雄的攻击力 * 10
select name,gongji *10 country from sanguo;

6、约束

    1、作用

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

    2、约束的分类

        1、默认约束(default)
            1、作用
                在插入记录时,如果不给该字段赋值,则使用默认值
            2、格式
                字段名 数据类型 default 默认值,
                    create table day1(
                    id int,
                    name varchar(20),
                    sex enum('m','f','secret')
                    default 'secret');
        2、非空约束
            1、作用
                不允许该字段的值有空值null记录
            2、格式
                字段名 数据类型 not null,
                     create table day1(
                     id int,
                     name varchar(20),
                     sex enum('m','f','s
                     default 'secret');

7、索引

    1、定义

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

    2、索引的优点

        可以加快数据的检索速度

    3、索引的缺点

        1、当对表中数据进行增加、修改、删除的时候,索引需要动态维护,降低了数据的维护速度
        2、索引需要占用物理存储空间

    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';
        7、查看性能分析结果
show profiles;
        8、关闭性能分析
set profiling = 0



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值