2021-07-29

更改表名
alter table 表名 rename 新表名;
如 alter table teacher rename t_teacher;


更改字段名
alter table 表名 change 列名 新列名 数据类型; 
更改表的列名 和 数据类型 当然数据类型可以不改,但是必须得写,
如 alter table t_teacher change name teacher_name varchar(20); 


添加字段
alter table 表名add 列名类型;
如 alter table t_teacher add birthday datetime; 默认添加到尾部
alter table t_teacher add birthday datetime after teacher_name; 把列添加到指定列的后面
alter table t_teacher add sex2 char(2) first; 添加到第一列,需要把表关掉,刷新一下,再打开才能显示出来

删除字段
alter table 表名 drop 列名;
如 alter table t_teacher drop birthday;

更改字段类型(尽量不要更改)
alter table 表名 modify 列名 新数据类型; 
如 alter table t_teacher modify sex2 varchar(20);
alter table 表名 modify 列名 数据类型 comment '该列的注释说明';  更改类型的同时,还能添加注释说明


主键
创建表语句时  primary key (id,name)
创建表完成之后  语法 :  alter table 表名 add primary key(列名,列名...);

主键自增
建表时   id int auto_increment
建表完成  语法 : alter table 表名modify 主键列名 类型 auto_increment;

设置自增的起始值
语法 : alter table 表名auto_increment=值; 


外键
创建表时添加外键
create table teacher(
    id int ,
    name varchar(20),
    primary key (id)
);
create table student (
    id int ,
    name varchar(20),
    teacher_id int ,
    primary key (id),
    foreign key (teacher_id) references teacher(id)
);
引用student中添加外键列,指向teacher表,所以必须先创建teacher表才行
测试语句
添加一个讲师
insert into  teacher (id,name) values(1,'张老师');
添加一个学生小明,学生通过teacher_id可以指向张老师
insert into  student (id,name,teacher_id) values(1,'小明',1);
添加一个学生小红,teacher_id没有设置值
insert into  student (id,name) values(2,'小红');
添加一个小黑,teacher_id指向一个不存在的讲师,报错
insert into  student (id,name,teacher_id) values(3,'小黑',2);

创建完表时添加外键
语法 : alter table 表名 add foreign key (外键列列名) references 指向的表名 (主键列列名);

唯一约束
创建时       unique(id)
创建完     alter table temp1 add unique (id);


非空约束not null 与默认值default
创建表时`name` varchar(30) default  'abc',
    sex varchar(10) not null default '男'
创建完  alter table temp3 modify sex varchar(10) not null  default '男';

六大约束
and
or
between ..  and....     在...之间
in    在指定数据中 select * from student where id in (1,3,10,20);
模糊查询    % 匹配任意个数的任意字符 
 把name中,把姓张的查询出来
select * from student where  name like '张%';

                  _ 匹配单个任意字符
把 name中,姓名有两个字的查询出来
select * from student where  name like '__';

Order by  排序
select 列限定 from 表限定 order by 列名 asc/desc;
Asc : 升序
Desc : 降序
如 : 查询所有学生信息,以成绩降序
select * from student order by score desc;
如 : 查询所有学生信息,按成绩降序,如果成绩相同,按照id升序
select * from  student order by score desc , id asc;

Limit限制条数,通常和order by一起使用,因为我们使用排序之后,再去获取前几条数据,比较有价值,比如成绩前三名
语法 : 
select 列限定 from 表限定 limit 条数;
select 列限定 from 表限定 limit 开始值(不包含) ,条数;
如 : 查询学生表,分数前三名的信息
select * from  student order by score desc limit 3;
如 : 查询学生表,分数第二名和第三名
select * from  student order by score desc limit 1,2;

组函数count(*) : 总条数
max(字段名) : 最大值
min(字段名) : 最小值
avg(字段名) : 平均值
sum(字段名) : 总和
如 : 查看学生表共有多少学生
select  count(*)  from   student;
如 : 查看学生表中分数大于90分的有多少学生
select  count(*)  from   student where score > 90;


Group by
select  count(*),max(字段名),min(字段名)... from 表名 group by 字段名;
select teacher_id, count(*) as stu_count  from student group by teacher_id;
如 : 查询每个老师带的学生中的最高分数
select teacher_id, count(*) as stu_count,max(score) as stu_max_score from student group by teacher_id;
如 : 查询每个老师所带学生的总成绩与平均分
select teacher_id, sum(score) as sum,avg(score) as avg from student group by teacher_id;


Having
select teacher_id, avg(score) as avg from student group by teacher_id having avg > 60;


子查询
①select后面
select 字段名,(查询语句) from 表名;
查询每个老师的学生的 最大分数,最小分数,平均分数,分数总和,学生人数,老师名字
select max(score),min(score),sum(score),avg(score),count(*),(
        select name from teacher where id=teacher_id 
        ) as teacher_name from student group by teacher_id ;


②from后面使用子查询 对成绩划分等级, score<60 ,评级C 并且是差,score>=60 且 score<80 评级B并且是良,score>=80 评级是A并且是优
select *,
case rank
when 'A' then '优'
when 'B' then '良'
when 'C' then '差'
end rank_ch
from (
select *,
case 
when score < 60 then 'C' 
when score >=60 and score <80 then 'B' 
when score >=80 then 'A' 
end as rank 
from student
) a;

③where后面
 在不知道teacher_id 和 老师名字的对应关系的情况下,想查询出张老师下面的所有学生信息
select * from student where teacher_id in (
select id from teacher where name='张老师'
);

上一篇:深拷贝与浅拷贝的区别


下一篇:Java学习笔记(No.16)