快捷搜索:
来自 网络数据库 2019-06-17 08:33 的文章
当前位置: 67677新澳门手机版 > 网络数据库 > 正文

认知mysql(2)

 

认识mysql第三篇,发出的内容适合初学者,如果能持续关注我的博客,可以全面的掌握mysql的常用知识,后续我也会陆续发出python相关的知识,关注我,和我一共进步吧!

每页显示n条记录,显示第m页 :limit (m-1)*n,n
4、聚合函数
1、分类
avg(字段名) : 求该字段平均值
sum(字段名) : 求和
max(字段名) : 最大值
min(字段名) : 最小值
count(字段名) : 统计该字段记录的个数
2、示例
1、攻击力最强值是多少
select max(gongji) from MOSHOU.sanguo;
2、统计id 、name 两个字段分别有几条记录
select count(id),count(name) from sanguo;
## 空值 NULL 不会被统计,""会被统计

      2、计算每个国家的平均攻击力
      select country,avg(gongji) from sanguo
      group by country;
    3、查找所有国家中英雄数量最多的前2名的 国家名称和英雄数量
      select country,count(id) as number from sanguo
      group by country
      order by number desc
      limit 2;
3、注意
  1、group by之后的字段名必须要为select之后的字段名
  2、如果select之后的字段名和group by之后的字段不一致,则必须对该字段进行聚合处理(聚合函数)
  3、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、where只能操作表中实际存在字段,having可操作由聚合函数生成的显示列
4、distinct
  1、作用 :不显示字段重复值
  2、示例
1、表中都有哪些国家
  select distinct country from sanguo;
2、计算蜀国一共有多少个英雄
  select count(distinct id) from sanguo
  where country="蜀国";
3、注意
  1、distinct和from之间所有字段都相同才会去重
  2、distinct不能对任何字段做聚合处理
5、查询表记录时做数学运算
1、运算符
   - * / %
2、示例
1、查询时所有英雄攻击力翻倍
select id,name,gongji*2 as gj from sanguo;

4、查找7月30日10:00-12:00充值的信息
select * from t7
where
date(shijian)="2018-07-31" and
time(shijian)>="10:00:00" and
time(shijian)<="12:00:00";
4、日期时间运算
1、语法格式
select * from 表名
where 字段名 运算符 (时间-interval 时间间隔单位);
时间间隔单位:
1 day | 2 hour | 1 minute | 2 year | 3 month
2、练习
1、查询1天以内的记录
select * from t7
where shijian > (now()-interval 1 day);
age > 20
2、查询1年以前的记录
select * from t7
where shijian < (now()-interval 1 year);
3、查询1天以前,3天以内的记录
select * from t7
where
shijian < (now()-interval 1 day) and
shijian > (now()-interval 3 day);
5、表记录管理
1、删除表记录
1、delete from 表名 where 条件;
2、注意
delete语句后如果不加where条件,所有记录全部清空
2、更新表记录
1、update 表名 set 字段1=值1,字段2=值2,... where 条件;
2、注意
必须加where条件
3、练习(表hero)
1、查找所有蜀国人的信息
select * from hero where country="蜀国";
2、查找所有女英雄的姓名、性别和国家
select name,sex,country from hero
where sex="女";
3、把id为2的记录改为典韦,性别男,国家魏国
update hero set name="典韦",sex="男",country="魏国" where id=2;
4、删除所有蜀国英雄
delete from hero where country="蜀国";
5、把貂蝉的国籍改为魏国
update hero set country="魏国"
where name="貂蝉";
6、删除所有表记录
delete from hero;
4、运算符操作
1、数值比较/字符比较
1、数值比较 := != > >= < <=
2、字符比较 := !=
3、练习
1、查找攻击力高于150的英雄的名字和攻击值
select name,gongji from sanguo where gongji>150;
2、将赵云的攻击力设置为360,防御力设置为68
update sanguo set gongji=360,fangyu=68
where name="赵云";
2、逻辑比较
1、and (两个或多个条件同时成立)
2、or (任意一个条件成立即可)
3、练习
1、找出攻击值高于200的蜀国英雄的名字、攻击力
select name as n,gongji as g from sanguo
where gongji>200 and country="蜀国";
2、将吴国英雄中攻击值为110的英雄的攻击值改为100,防御力改为60
update sanguo set gongji=100,fangyu=60
where country="吴国" and gongji=110;
3、查找蜀国和魏国的英雄信息
select * from sanguo
where country="蜀国" or country="魏国";
3、范围内比较
1、between 值1 and 值2
2、where 字段名 in(值1,值2,...)
3、where 字段名 not in(值1,值2,...)
4、练习
1、查找攻击值100-200的蜀国英雄信息
select * from sanguo
where gongji between 100 and 200 and
country="蜀国";
2、找到蜀国和吴国以外的国家的女英雄信息
select * from sanguo
where country not in("蜀国","吴国")
and sex="女";
3、找到id为1、3或5的蜀国英雄 和 貂蝉的信息
select * from sanguo
where
(id in(1,3,5) and country="蜀国") or name="貂蝉";
4、匹配空、非空
1、空 :where name is null
2、非空:where name is not null
3、示例
1、姓名为NULL值的蜀国女英雄信息
select * from sanguo
where
name is null and country="蜀国" and sex="女";
2、姓名为 "" 的英雄信息
select * from sanguo where name="";
4、注意
1、NULL :空值,只能用 is 或者 is not 去匹配
2、"" :空字符串,用 = 或者 != 去匹配
5、模糊比较
1、where 字段名 like 表达式
2、表达式
1、_ : 匹配单个字符
2、% : 匹配0到多个字符
3、示例
select name from sanguo where name like "_%_";
select name from sanguo where name like "%";
## NULL不会被统计,只能用is、is not去匹配
select name from sanguo where name like "___";
select name from sanguo where name like "赵%";
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 字段名 ASC/DESC
3、升序:ASC(默认)
降序:DESC
4、示例
1、将英雄按防御值从高到低排序

r -> 4
w -> 2
x -> 1
chmod 644 文件名 rw-r--r--
5、Excel表格如何转化为CSV文件
1、打开Excel文件 -> 另存为 -> CSV(逗号分隔)
6、更改文件编码格式
1、用记事本/编辑器 打开,文件->另存为->选择编码
5、数据导出
1、作用
将数据库中表的记录导出到系统文件里
2、语法格式
select ... from 表名
into outfile "/var/lib/mysql-files/文件名"
fields terminated by "分隔符"
lines terminated by "n";
3、把MOSHOU库下的sanguo表英雄的姓名、攻击值、国家导出来,sanguo.txt
select name,gongji,country from MOSHOU.sanguo
into outfile "/var/lib/mysql-files/sanguo.txt"
fields terminated by " "
lines terminated by "n";
$ sudo -i
$ cd /var/lib/mysql-files/
$ ls
$ cat sanguo.txt
4、将mysql库下的user表中 user、host两个字段的值导出到 user.txt
select user,host from mysql.user
into outfile "/var/lib/mysql-files/user.txt"
fields terminated by " "
lines terminated by "n";

select * from sanguo
where
(country="魏国" or country="蜀国") and name like "___"
order by fangyu;
3、limit (永远放在SQL语句的最后写)
1、作用 :限制显示查询记录的个数
2、用法
1、limit n -> 显示 n 条记录
2、limit m,n
m 表示 从第m 1条记录开始显示,显示 n 条
limit 2,3 : 第 3、4、5 三条记录
3、示例
1、在蜀国英雄中,查找防御值倒数第二名至倒数第四名的英雄的记录
select * from sanguo
where country="蜀国"
order by fangyu asc
limit 1,3;
2、在蜀国英雄中,查找攻击值前3名且名字不为 NULL 的英雄的姓名、攻击值和国家
select name,gongji,country from sanguo
where
country="蜀国" and name is not NULL
order by gongji DESC
limit 3;
4、分页
每页显示5条记录,显示第4页的内容

3、索引
  1、定义
  对数据库表的一列或多列的值进行排序的一种结构(Btree方式)
  2、优点
  加快数据检索速度
3、缺点
  1、占用物理存储空间
  2、当对表中数据更新时,索引需要动态维护,降低数据维护速度
4、索引示例
  1、开启运行时间检测 :set profiling=1;
  2、执行查询语句
  select name from t1 where name="lucy99999";
3、查看执行时间
  show profiles;
4、在name字段创建索引
  create index name on t1(name);
5、再执行查询语句
  select name from t1 where name="lucy88888";
6、查看执行时间
  show profiles;
5、索引
1、普通索引(index)
1、使用规则
1、可设置多个字段
2、字段值无约束
3、key标志 :MUL
2、创建index
1、创建表时
  create table 表名(...
  index(字段名),index(字段名));
2、已有表
  create index 索引名 on 表名(字段名);
  create index name on t3(name);
3、查看索引
  1、desc 表名; --> KEY标志为:MUL
  2、show index from 表名G;
  4、删除索引
  drop index 索引名 on 表名;
2、唯一索引(unique)
  1、使用规则
    1、可设置多个字段
    2、约束 :字段值不允许重复,但可为 NULL
    3、KEY标志 :UNI
    2、创建
    1、创建表时创建
    unique(字段名),
    unique(字段名)
2、已有表
  create unique index 索引名 on 表名(字段名);
3、查看、删除 同普通索引
3、主键索引(primary key)
自增长属性(auto_increment,配合主键一起使用)
1、使用规则
1、只能有一个主键字段
2、约束 :不允许重复,且不能为NULL
3、KEY标志 :PRI
4、通常设置记录编号字段id,能唯一锁定一条记录
2、创建
1、创建表时
  (id int primary key auto_increment,
  )auto_increment=10000;##设置自增长起始值
已有表添加自增长属性:
  alter table 表名 modify id int auto_increment;
已有表重新指定起始值:
  alter table 表名 auto_increment=20000;
2、已有表
  alter table 表名 add primary key(id);
3、删除
1、删除自增长属性(modify)
  alter table 表名 modify id int;
2、删除主键索引
  alter table 表名 drop primary key;
4、外键索引
4、数据导入
1、作用 :把文件系统的内容导入到数据库中
2、语法
load data infile "/var/lib/mysql-files/文件名"
into table 表名
fields terminated by "分隔符"
lines terminated by "n";
3、将scoretable.csv文件导入到数据库的表中
1、在数据库中创建对应的表
create table scoretab(
id int,
name varchar(15),
score float(5,2),
number bigint,
class char(7)
);
2、把文件拷贝到数据库的默认搜索路径中
1、查看默认搜索路径
  show variables like "secure_file_priv";
  /var/lib/mysql-files/
2、拷贝文件
  sudo cp ~/scoretable.csv /var/lib/mysql-files/
3、执行数据导入语句
load data infile "/var/lib/mysql-files/scoretable.csv"
into table scoretab
fields terminated by ","
lines terminated by "n";
4、文件权限
rwxrw-rw- 1 tarena tarena scoretable.csv
所有者 所属组
rwx : tarena用户
rw- : 同组其他用户
rw- : 其他组的其他用户(mysql用户)

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

本节完!

本文由67677新澳门手机版发布于网络数据库,转载请注明出处:认知mysql(2)

关键词: