1、表字段的操作 1、语法:alter table 表名 执行动作; 2、添加字段(add) 1、添加到末尾 alter table 表名 add 字段名 数据类型; 2、添加到第一列 alter table 表名 add 字段名 数据类型 first; 3、添加到指定位置 alter table 表名 add 字段名 数据类型 after 字段名; 3、删除字段(drop) alter table 表名 drop 字段名; 4、修改字段数据类型(modify) alter table 表名 modify 字段名 新的数据类型; 5、修改字段名(change) alter table 表名 change 旧字段名 新字段名 数据类型; 6、修改表名(rename) alter table 表名 rename 新表名; 2、表记录的管理 1、删除表记录 1、delete from 表名 where 条件; 2、注意 delete语句后如果不加where条件子句会将表中所有记录全部删除 3、示例 create table t4( id int(3) zerofill, name varchar(20), sex enum("boy","girl") ); insert into t4 values (1,"Lucy","girl"), (2,"Tom","boy"), (3,"Bob","boy"); select * from t4; 2、更新表记录 1、update 表名 set 字段名=值1,字段名=值2,...,where 条件; 2、注意 update语句后如果不加where条件会将表中所有的值修改 3、练习(见建表脚本MOSHOU.hero.txt) 1、查找所有蜀国人的信息 select * from hero where country="蜀国"; 2、查找女英雄的姓名、性别和国家 select name,sex,country from hero where sex="女"; 3、把曹操的国籍改为蜀国 update hero set country="蜀国" where name="曹操"; 4、把魏延的性别改为 女 ,国籍改为 泰国 5、把id为2的记录的姓名改为司马懿,性别为男,国家为魏国 6、删除所有的泰国人 7、将表中所有的记录的国家改为吴国 8、删除所有英雄的信息 3、运算符操作(配合查询、修改、删除) 1、数值比较&字符比较 1、数值比较运算符:=、!=、>、>=、<、<= 2、字符比较运算符:=、!= 3、练习 1、找出攻击力高于150的英雄的名字和攻击力的值 2、找出防御力值不是66的英雄信息 2、逻辑比较 1、运算符:and(多个条件同时满足) or(多个条件有一个满足即可) 2、练习 1、找出攻击值大于200的蜀国英雄的名字、攻击值及国家 2、将吴国英雄中攻击值为110的英雄的攻击值设置为100,防御值设置为60 3、查找蜀国和魏国的英雄信息 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的蜀国英雄和貂蝉的编号、姓名、国家 4、匹配空、非空 1、空:is null 2、非空:is not null 3、练习 1、查找姓名为空值(NULL)的蜀国男英雄信息 2、查找姓名为空字符串("")的英雄信息 4、注意 1、NULL :空值,必须用is或者is not去匹配 2、"" :空字符串,用 = 或者 != 去匹配 5.模糊比较 1.语法 字段名 like 表达式 2. 表达式 1. _ :匹配单个字符 2. %:匹配0到多个字符 3. 练习 1 select id, name, from sanguo where name like '_%_'; 匹配名字中至少有两个字符 2. select id,name, from sanguo where name like '%'; 匹配所有的 3.select id, name from sanguo where name like '___'; 匹配名字中至少有3个字符的 4. select id, name from sanguo where name like '赵%'; 4. SQL查询 1. 总结(执行顺序) 3. select ...聚合函数 from ... 1 . where... 2. group by... 4. having... 5. order by... 6. limit... 2. order by 1. 作用: 给查询的结果进行排序 2. 排序方法 1. ASC(默认):升序 2. DESC: 降序 3. 语法格式 order by 字段名 排序方法 4. 练习 1.将英雄信息按防御值从低到高排序 select * from sanguo order by fangyu ASC 2.将蜀国英雄信息按攻击值从高到低排序 select * from sanguo where country='蜀国' order by gongji DESC 3 将蜀国两国的男英雄的名字为三个字的英雄按防御力升序排列 3.limit(永远在SQL语句的最后写) 1.作用: 限制显示查询记录的条数 2.用法 1.limit n-->显示几条记录 2.limit m,n m->从第几条记录开始显示,n表示显示几条 m的值是从0开始计数,3则是表示从第四条记录开始 3 练习 1. 查找攻击值前三名且名字不为空值的蜀国英雄的姓名,攻击值和国家 select name,gongji country from sanguo where name is not null and country ='蜀国 order by gongji desc limit 3; 2. 查找防御值倒数第二名到倒数第四名的蜀国英雄记录 select * from sanguo where country='蜀国' order by fangyu asc limit 1, 3; 4. 聚合函数 1.分类 1.avg(字段名) : 求字段的平均值 2. sum(字段名) : 求字段的和 3. max(字段名) :求字段的最大值 4. min(字段名) :求字段的最小值 5.count(字段名) :统计该字段的记录个数 2.练习 1. 攻击力最强值是多少? select max(gongji) from sanguo; 2, 统计一下啊表中id,name字段分别有多少条记录 select count(id), count(name) from sanguo; ##空值NULL不会被统计,空字符串""会被统计 3.计算一下蜀国英雄的总攻击力 select sum(gongji) from sanguo where country ='蜀国'; 4.统计蜀国英雄中攻击力大于200的英雄 select count(*) from sanguo where country='蜀国' and gongji>200; 5. group by 1. 作用:给查询的结果进行分组 2. 练习 1. 查询三国表中一共有几个国家 select country from sanguo group by country 2. 计算各个国家的平均攻击力 select country avg(gongji) from sanguo group by country 3. 查找所有国家中英雄数量最多的前两名的国家名称和英雄数量 select country,count(*) from sanguo group by country order by desc limit 2; 3.注意 1. group by 之后的字段名必须要为select之后的字段名相同 2.如果select之后的字段和group by 之后的字段名不一致,则必须要对该字段名进行聚合处理(聚合函数) 6. having 语句 1.作用: 对查询的语句进行进一步的删选 2.练习 1.找出平均攻击力大于105的国家的前两名,显示国家名和平均攻击力 select country, avg(gongji) from sanguo group by country having avg(gongji) >105 order by avg(gongji) 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 处理的是di'stinct 与 from 之间的所有字段,全部相同才能去重 2. distinct 不能对任何字段做聚合处理 8. 查询表记录时做数学运算 1. 运算符 +, -, * ,/. % 2. 练习 1. 查询显示所有英雄的攻击力全部 乘以10 select id, name, country, gongji*10 as xgj from sanguo 2 查询时显示所有英雄的防御力+5 select id, name, country, gongji+5 as xgj from sanguo 5. 约束 1.作用 为了保证数据的完整型, 可以限制无效的数据插入到数据表中 2. 约束分类 1.默认约束(default) 1 作用: 在插入记录时,如果不给该字段赋值,则使用默认值 2 格式: 字段名, 数据类型 default值 2,非空约束(not null) 1.作用:不允许该字段的值有NULL记录 2.格式 :字段名 数据类型 not null 6. 索引 1.定义 对数据库中表的一列或者多列的值进行排序的一种结构 (MySQL中用BTREE方式) MySQL 中支持分三层 2. 优点 1. 可以加快数据的检索速度 3. 缺点 1. 当你对表中的数据进行增加修改和删除的时候索引也要动态维护,降低了数据的维护速度; 2. 索引需要占用物理空间 4. 索引类型 1. 普通索引(index) 1. 使用规则 1 一个表中可以有多个index字段 2. 字段的值可以有重复,且可以为NuLL值 3. 经常把做查询条件的字段设置为index字段 4 index字段的key标志是MUL 2 创建index 1. 创建表时创建 index(字段名1), index(字段名2) 2. 在已有表中创建index create index 索引名(字段名) on 表名(字段名) 3.注意 索引名一般和字段名相同 3. 查看普通索引 1. desc 表名; -->查看key标志为MUL 2. show index from 表名 4. 删除普通索引 drop index 索引名 on 表名 注意: 删除索引只能一个一个删除 2. 唯一索引 3. 主键索引 4. 外键索引