表的深入学习
语法:
1.修改表名
alter table 表名 rename 新表名;
2.增加字段
atler table 表名 add 字段名 数据类型 完整性约束条件,
add 字段名 数据类型 完整性约束条件;
3.删除字段
alter table 表名 drop 字段名;
4.修改字段
alter table 表名 modify 字段名 数据类型 完整性约束条件;
alter table 表名 change 旧字段名 新字段名 旧数据类型 完整性约束条件;
alter table 表名 change 旧字段名 新字段名 新数据类型 完整性约束条件;
 
5. 修改字段排列顺序/在增加的时候指定字段位置
alter table 表名 add 字段名 数据类型 完整性约束条件 ... first;
alter table 表名 add 字段名 数据类型 完整性约束条件...
after 字段名 ;
alter table 表名 change 字段名 旧字段名 新字段名 新数据类型 完整性约束条件...;
alter table 表名 modify 字段名 数据类型 完整性约束条件 ... after 字段名;
 
数据操作 ---增加数据
 
insert into stu values(1,"hzp",18,190,200501,"1");
#插入数据
#语法一:插入完整数据(顺序插入)
insert into 表明(字段1,字段2,字段3,...,字段n) values(
值1,值2,值3,...,值n),...;
insert into 表名 values (值1, 值2 , 值3,... ,值n);
 
语法 二 : 指定字段插入数据
insert into 表名 (字段1,字段2) values (值1,值2);
 
注意:
完整插入和指定字段插入时字段数量与值的数量必须对应,非空字段必须有值。并且值类型要与字段类型一致。
 
1.整条的,一个字段都不落
insert into 表名 (字段名....所有字段)values(...),(...);
insert into 表名 values (....),(...);
2.插入非完整数据
insert into 表名(字段1,字段2) values (字段1的值,字段2的值);
 
#更新数据
update 表名 set
字段1 = 值1,
字段2 = 值2,
where condition;
 
update goods set
amount = 200
where name = "小皮鞭";
 
数据操作 ---查询数据
#单表查询语法:
select distinct 字段 1, 字段2, .....from 表名
where 条件
group by 字段
having 筛选
order by 字段
limit 限制条数
#先了解:select 字段 ...from 表名 where 条件;
1).from 表名 :先找到表
2)where 条件: 根据条件筛选数据
3).select 字段: 显示筛选出的数据的指定字段
 
# 关键字执行优先级
from > where > group by > select > distinct >having > order by >limit
(从哪里分组选择, 去重有排序限制)
 
# 说明:
1.from 先找到某张表
2.用where指定的条件进行查找
3.group by 对查找找到的结果进行分组,如果没有group by 则作为一组
4.select 出指定的字段并去重
5.将结果进行order by 排序
6.限制结果的显示条数
 
1.简单查询基础:
(1) .select 字段 from 表 where 条件;
- 字段可以任选
- 全部字段可以使用* 代替
-字段可以起别名
- 条件可以使用比较运算和逻辑运算
(2).比较运算符:
大于 :>
小于:<
大于等于 :>=
小于等于:<=
不等于 :!=
(3)。逻辑运算符:
and
or
not
(4).几种常见情形:
1)。等值查询:
select * from stu where id = 1;
查询ID为1的学生的所有字段信息
2)条件比较查询:
select * from stu where id >3;
查询 Id 大于3的所有学生的所有学生的信息
3).比较运算与逻辑运算查询:
select * from stu where id >5 and height >170;
查询id 大于5 并且 身高在170 都有所有学生的信息
4).between ...and 的使用
select * from stu where height between 170 and 180;
查询身高在170和180之间的所有学生信息
5)成员运算:
select * from stu where id in (1,2,3,4);
查询 ID值为 1,2,3,4的所有学生信息
6) 空与非空判断:
select * from stu where height is null ;
查询身高数据为空的所有学生信息
select * from stu where height is not null;
查询身高数据不为空的所有学生信息
 
2.排序
(1) 语句示例:
select * from stu order by height desc;
select 字段 from 表名 order by(要排序的字段名)升序方法;
(2).说明:
1).from stu 指定从stu 中查找
2).select * 指定显示记录的所有字段信息
3).order by 代表排序为依据身高升序,desc指定排序为从大到小排序;asc为小到大排序。
 
3.分页
(1)语句示例 :
select * from stu limit 0,3;
 
(2).说明:
1).limit m,n 代表从第m条开始,向后偏移n条(m称作为起始位置,n称作为偏移量)
2)。分页使用数据量较大时的部分查询,提高查询效率。
 
4.分组:
(1).语句示例:
select * from stu where height >150 group by gender;
 
(2)说明:
1).group by 为分组, 查询时会根据分组查询出分组字段的第一条数据,所以实际使用意义不大。
2)。group by 与 count()函数配合使用, 可以查询出指定分类下的数据条数,示例如下:
select gender ,count (* )from stu group by gender;
3).group_concat()结合group by使用: group_contcat() 可以将分组的数据的指定字段放在一起
select gender , group_concat (name) as "name" from stu group by gender;
 
5.过滤:
(1) 语句示例:
select gender ,group_concat(age) as age , group_count(name ) as name ,count (*)
from stu
where height >120
group by gender;
select gender,group_concat (age) as age , group_concat (name) as name ,
count (*) as total
from stu
where height >120
group by gender
having total >2;
 
(2) .说明:
1)。having用于筛选查询结果
2)。where也可以用于查询结果的筛选,但由于执行顺序为where > group by >having , 即where不能使用group by 后 的字段,故使用having 来弥补group by查询结果的筛选功能
 
6.聚合函数
(1)聚合函数有:
max(): 最大值
min(): 最小值
count():统计计数
sum():求和
avg():平均值
 
(2)语句示例:
1)。select max(age) from stu ; #查询学生中最大的年龄
2).select min(age) from stu; #查询学生中最小的年龄
3).select count(*) from stu;# 查询学生总数
4).select sum (age) from stu ; #查询学生年龄的总和
5)。select avg(age) from stu ; #查询所有学生年龄的平均值。
 
7.模糊查询
(1).like 模糊查询:使用like关键配合通配符进行模糊查询
1).语句示例:select * from stu where name like "1%"
2).通配符:%(任意个任意字符),_(任意一个字符),[...](字符组),[!...]或[^...](非字符组)
(2).正则模糊查询:利用正则进行模糊查询
1)。语句示例:select * from stu where name regexp '1.*";
 
1.子查询:
语句中嵌套其他查询语句,其中的一个查询语句的查询结果作为另一个语句的一部分使用
#子查询分类
 
#子查询简单案例(引入)
select * from stu where max(age); #查询年龄最大的学生的所有信息,发生错误
 
思路: 1)先查询出学生中最大的年龄值
2)将该年龄作为筛选条件嵌入到另一条查询语句 中
#实现:
select * from stu where age=(select max(age) from stu );
 
#子查询数据准备:
class 表:id name
student 表:id,name ,age ,height ,cls_id
insert into class values (1,"2005A"),(2,"2004A"),(3,"2003A"),(4,"2002A");
insert into student values
(1,"1cj",20,170,1),
(2,"1cc",20,175,2),
(3,"1qq",18,165,3),
(4,"hzp",20,190,4),
(5,"1fz",18,175,1),
 
子查询详解:
1,简单:
(1)。语句示例:select* from stu where age=
(select max(age) from stu);
(2).说明;先查询出stu表中最大年龄的学生信息
2.in关键字:
(1)语句示例:select name from class where id in
(select cls_id from student );
(2)说明:先查询出学生表中所有的学生的id,再查询出
班级表中的所有班级名称
3.any, some 关键字:
(1)语句示例:select * from student where age <
any (select age from student where height>175);
(2)说明:查询字句是筛选出身高大于175的所有学生的年龄,然后再从学生表中筛选出年龄大于查询子句结果中的任何年龄的数据。
select age from student where height > 175: 175身高以上学生的年龄 -----》20
 
4.all 关键字 :
(1)语句示例:
select * from student where student where height >all (select height from student where age <=18);
(2)说明:先查询出studet 表中的年龄小于等于18的学生的身高,在查询student表中的身高大于任何以上身高结果的所有数据。