Mysql 查询命令总结

drop database if exists SRS;
create database SRS default charset utf8;

– 切换到SRS

use SRS;

– 创建学院表

create table tb_college
(
collid int not null auto_increment comment '学院编号',
collname varchar(50) not null comment '学院名称',
collmaster varchar(20) not null comment '院长姓名',
collweb varchar(511) default '' comment '学院网站',
primary key (collid)
);

– 添加唯一性约束

alter table tb_college add constraint uni_college_collname unique (collname);
-- alter table tb_college drop index uni_college_collname;

– 创建学生表

create table tb_student
(
stuid int not null comment '学号',
stuname varchar(20) not null comment '学生姓名',
stusex bit default 1 comment '性别',
stubirth date not null comment '出生日期',
stuaddr varchar(255) default '' comment '籍贯',
collid int not null comment '所属学院编号',
primary key (stuid)
);

– 添加外键约束

alter table tb_student add constraint fk_student_collid 
foreign key (collid) references tb_college (collid);

– 创建教师表

create table tb_teacher
(
teacherid int not null comment '教师工号',
tname varchar(20) not null comment '教师姓名',
ttitle varchar(10) default '' comment '职称',
collid int not null comment '所属学院编号'
);

– 添加主键约束

alter table tb_teacher add constraint pk_teacher 
primary key (teacherid);

– 添加外键约束

alter table tb_teacher add constraint fk_teacher_collid 
foreign key (collid) references tb_college (collid);

– 创建课程表

create table tb_course
(
courseid int not null comment '课程编号',
cname varchar(50) not null comment '课程名称',
ccredit tinyint not null comment '学分',
tid int not null comment '教师工号',
primary key (courseid)
);

– 添加外键约束

alter table tb_course add constraint fk_course_tid 
foreign key (tid) references tb_teacher (teacherid);

– 创建学生选课表

create table tb_score
(
scid int not null auto_increment comment '选课编号',
sid int not null comment '学号',
cid int not null comment '课程编号',
selectdate datetime comment '选课时间日期',
score decimal(4,1) comment '考试成绩',
primary key (scid)
);

– 添加检查约束(MySQL中检查约束不生效)

alter table tb_score add constraint ck_score_score 
check (score between 0 and 100);

– 添加外键约束

alter table tb_score add constraint fk_score_sid 
foreign key (sid) references tb_student (stuid);
alter table tb_score add constraint fk_score_cid 
foreign key (cid) references tb_course (courseid);

– 插入学院数据

insert into tb_college 
(collname, collmaster, collweb) values 
('计算机学院', '左冷禅', 'http://www.abc.com'),
('外国语学院', '岳不群', 'http://www.xyz.com'),
('经济管理学院', '风清扬', 'http://www.foo.com');

– 插入学生数据

insert into tb_student 
(stuid, stuname, stusex, stubirth, stuaddr, collid) values
(1001, '向问天', 1, '1990-3-4', '四川成都', 1),
(1002, '任我行', 1, '1992-2-2', '湖南长沙', 1),
(1033, '任盈盈', 0, '1989-12-3', '湖南长沙', 1),
(1572, '余沧海', 1, '1993-7-19', '四川成都', 1),
(1378, '岳灵珊', 0, '1995-8-12', '四川绵阳', 1),
(1954, '林平之', 1, '1994-9-20', '福建莆田', 1),
(2035, '令狐冲', 1, '1988-6-30', '陕西咸阳', 2),
(3011, '林震南', 1, '1985-12-12', '福建莆田', 3),
(3755, '龙傲天', 1, '1993-1-25', '广东东莞', 3),
(3923, '向天问', 0, '1985-4-17', '四川成都', 3),
(2177, '隔壁老王', 1, '1989-11-27', '四川成都', 2);

– 插入老师数据

insert into tb_teacher 
(teacherid, tname, ttitle, collid) values 
(1122, '张三丰', '教授', 1),
(1133, '宋远桥', '副教授', 1),
(1144, '杨逍', '副教授', 1),
(2255, '范遥', '副教授', 2),
(3366, '韦一笑', '讲师', 3);

– 插入课程数据

insert into tb_course
(courseid, cname, ccredit, tid) values 
(1111, 'Python程序设计', 3, 1122),
(2222, 'Web前端开发', 2, 1122),
(3333, '操作系统', 4, 1122),
(4444, '计算机网络', 2, 1133),
(5555, '编译原理', 4, 1144),
(6666, '算法和数据结构', 3, 1144),
(7777, '经贸法语', 3, 2255),
(8888, '成本会计', 2, 3366),
(9999, '审计', 3, 3366);

– 插入选课数据

insert into tb_score 
(sid, cid, selectdate, score) values 
(1001, 1111, now(), 95),
(1001, 2222, now(), 87.5),
(1001, 3333, now(), 100),
(1001, 4444, now(), null),
(1001, 6666, now(), 100),
(1002, 1111, now(), 65),
(1002, 5555, now(), 42),
(1033, 1111, now(), 92.5),
(1033, 4444, now(), 78),
(1033, 5555, now(), 82.5),
(1572, 1111, now(), 78),
(1378, 1111, now(), 82),
(1378, 7777, now(), 65.5),
(2035, 7777, now(), 88),
(2035, 9999, now(), 70),
(3755, 1111, now(), 72.5),
(3755, 8888, now(), 93),
(3755, 9999, now(), null);

– 删除数据

delete from tb_student where stuid=2177;

– 更新数据

update tb_score set score=null where sid=1002 and cid=1111;

– 查询(DQL)

select * from tb_student;
select * from tb_teacher;

– 投影和别名

select stuid, stuname, stusex from tb_student;
select stuid as 学号, stuname as 姓名, stusex as 
性别 from tb_student;
select stuid as 学号, stuname as 姓名, case stusex 
when 1 then '男' else '女' end as 性别 from tb_student;
select stuid as 学号, stuname as 姓名, 
if(stusex, '男', '女') as 性别 from tb_student;
select stuid+500 as 学号, stuname as 姓名, 
if(stusex, '男', '女') as 性别 from tb_student;

– 添加组合

select concat(tname,ttitle) as 全称 from tb_teacher;

– 筛选 <>–>不等于

select * from tb_student where stuid=1001;
select stuid as 学号, stuname as 姓名, 
stuaddr as 籍贯 from tb_student where 
stuid>1001 and stuid<2000;

– 模糊

select stuid, stuname from tb_student 
where stuname like '林%' or stuname like'龙%';
-- 查姓林名为两个字的名字
select stuid, stuname from tb_student 
where stuname like '林_';
-- 查询姓林名为两个字的名字
select stuid, stuname from tb_student 
where stuname like '林__';
-- 查询为天字的名字
select stuid, stuname from tb_student 
where stuname like '%天%';

– 排序 默认是升序 desc降序

select * from tb_student order by stubirth desc;
select * from tb_student order by  stusex asc, 
stubirth desc;select * from tb_student where 
stubirth between '1990-1-1' and '1999-12-31' 
order by stusex asc, stubirth desc;

– 聚合函数(max/min/sum/avg/count)(数据库通用)

select count(stuid)from tb_student;
select avg(score) from tb_score where cid=1111;
select sum(score) from tb_score where cid=1111;
select max(score) from tb_score where cid=1111;
select min(score) from tb_score where cid=1111;
select max(stubirth) from tb_student;

– 分组查询

select case stusex when 0 then '女' else '男' 
end as 性别, count(stusex) as 人数 from tb_student 
group by stusex;select case stusex when 0 then '女' 
else '男' end as 性别, min(stubirth) as 出生日期 from 
tb_student group by stusex;select cid, avg(score) from 
tb_score group by cid;

– 查询每个学生的学号和平均成绩

select sid, avg(score) from tb_score group by sid;
-- 分组后做删选加having,where分组前删选,order by 排序
select sid, avg(score) as avg from tb_score where 
sid between 1000 and 1999 group by sid 
having avg>=80 order by avg desc;

– 查询年龄最大的3名学生的信息,limit 3限制前3个

select * from tb_student order by stubirth limit 3;

– offset 跳过前4行,看后3个5,6,7

select * from tb_student order by stubirth limit 3 offset 4;

– 跳过前3行,看后4个5,6,7, 8(简写)

select * from tb_student order by stubirth limit 3,4;

– 查询每个学生的学号和平均成绩

select sid, avg(score) as avg from tb_score group by 
sid order by avg desc;

– 查询平均成绩大于等于80分的学生的学号和平均成绩

select sid, avg(score) as avg from tb_score where sid 
between 1000 and 1999 group by sid having avg>=80 
order by avg desc;

– 分页查询
– 查询年龄最大的3名学生的信息

select * from tb_student order by stubirth limit 3;
select * from tb_student order by stubirth limit 3 offset 3;
select * from tb_student order by stubirth limit 3,3
select * from tb_student order by stubirth limit 6,4;

– 子查询(把一个查询的结果作为另外一个查询的一部分来使用)
– 查询年龄最大的学生的姓名

select stuname from tb_student where stubirth=
(select min(stubirth) from tb_student);
select stuname from tb_student where stubirth=
(select max(stubirth) from tb_student);
select stuname from tb_student where stuid in 
(select sid from tb_score where score=(select max(score) 
from tb_score where cid=(select courseid from tb_course 
where cname='Python程序设计')) and cid=(select courseid 
from tb_course where cname='Python程序设计'));

– 查询选了三门及以上的课程的学生姓名

select stuname from tb_student where stuid in 
(select sid from tb_score group by sid having 
count(sid)>=3);

– 查询课程名称、学分、授课老师的名字和职称
– 笛卡尔积
– 连接查询

select cname, ccredit, tname, ttitle from tb_course, 
tb_teacher where tid=teacherid;

– 内连接

select cname, ccredit, tname, ttitle from tb_course 
inner join tb_teacher on tid=teacherid;

– 查询学生姓名和所在学院名称

select stuname, collname from tb_student t1, 
tb_college t2 where t1.collid=t2.collid;
select stuname, collname from tb_student t1 
inner join tb_college t2 on t1.collid=t2.collid;

– 查询学生姓名、课程名称以及考试成绩
– 和null作比较时不能使用=和<>
– 要使用is null或者is not null来进行判断

select stuname, cname, score from tb_student, 
tb_course, tb_score where stuid=sid and courseid=cid 
and score is not null;
select stuname, cname, score from tb_student 
inner join tb_score on stuid=sid inner join 
tb_course on courseid=cid where score is not null;

– 查询选课学生的姓名和平均成绩

– 查询每个学生的姓名和选课数量
– 左外连接 左表不满足连表条件的记录也要查询出来
– 对于不满足条件的列补上null
– MySQL不支持全外连接(full outer join)

select stuname as 姓名, ifnull(total, 0) as 选课数量 
from tb_student left outer join (select sid, count(sid)
 as total from tb_score group by sid) tb_temp on stuid=sid;

猜你喜欢

转载自blog.csdn.net/zhang_qings/article/details/81318537