-- 学生表对应是班级表,关系为一对多
alter table student add FOREIGN key(sid) REFERENCES classes(cid);

create table stu_cour(
        scid int(10) primary key,
        sno int(10),
        cno int(10),
        score int(255)
)

alter table stu_cour add FOREIGN key(sno) REFERENCES student(sid);
alter table stu_cour add FOREIGN key(cno) REFERENCES classes(cid);

-- 查询每个学生班级信息
select * from student,classes;

insert into classes values(2,"2班",2);
insert into classes values(3,"3班",3);
insert into classes values(4,"4班",4);
insert into classes values(5,"5班",5);
insert into classes values(6,"6班",6);
insert into classes values(7,"7班",7);

insert into cource values(2,'web');
insert into cource values(3,'c');
insert into cource values(4,'mysql');
insert into cource values(5,'c++');
insert into cource values(6,'c#');
insert into cource values(7,'vb');

insert into student values(2,'李四','男','1998-07-23',2);
insert into student values(3,'王五','男','1998-06-15',2);
insert into student values(4,'田七','男','1998-08-19',2);
insert into student values(5,'王麻子','男','1998-11-11',2);
insert into student values(6,'李梅','男','1999-03-12',2);
insert into student values(7,'李强','男','1999-05-01',2);

insert into stu_cour values(1,1,1,88);
insert into stu_cour values(2,2,2,78);
insert into stu_cour values(3,3,3,56);
insert into stu_cour values(4,4,4,79);
insert into stu_cour values(5,5,5,58);
insert into stu_cour values(6,6,6,69);
insert into stu_cour values(7,7,7,97);

-- 内连接
-- select * from student 表1 inner join 表2 on 关联条件
select * from student inner join classes on cno=sid;

-- 查询学生姓名:选课名称 选课成绩 涉及到三张表
select s.sname,c.cname,sc.score
from student s,cource c,stu_cour sc
where sc.sno=s.sid and sc.cno = c.cid;

-- 内连接 查询三张表
select s.sname,c.cname,sc.score
from student s 
inner join stu_cour sc on sc.sno = s.sid
inner join cource c on sc.cno = c.cid;

-- 查询班级的信息
-- 使用左外键链接 左边的是主表,主表一般情况下显示所有内容
select * from classes c
left OUTER join student s
on c.cid = s.sid;

-- 右外查询
select * from classes c
right outer join student s
on c.cid = s.sid;

-- 子查询
-- 查询生日比李四大的学生

-- 先查询出李四的生日
select * from student where sname ='李四';
-- 其次查询比李四大的学生
select * from student where birthday < '1998-07-23';
-- 最后
select * from student where birthday <(select birthday from student where sname ='李四');

-- 查询生日比李四大的学生的班级信息
select * from student s,classes c where birthday < (select birthday from student where sname='李四') and s.sid=c.cid;

-- 查询与李四同一个班级的学生的信息
-- 1、先查李四是哪个班级的学生 
select cno from student where sname = '李四';

-- 2、查询2班班级信息
select * from classes where cid = 2;

-- 3、合起来查询
select * from classes where cname = (select cno from student where sname ='李四');

-- 查询成绩高于2号课程的所有人的成绩的学生信息
-- 查询2号课程最高成绩
select max(score) from stu_cour where cno = 2;
-- 查询成绩高于56分的学生的信息
select * from student s,stu_cour sc where s.sid=sc.sno and sc.score>78;
-- 合起来
select * from student s,stu_cour sc
where s.sid=sc.sno and sc.score>
(select max(score) from stu_cour where cno=2);

drop table if exists employee;
create table employee(
id bigint not null auto_increment,
number varchar(20) not null,
name varchar(50),
job varchar(50),
leader_NO varchar(20),
hire_date date,
salary decimal(7,2),
bonus decimal(7,2),
level integer default 0 comment '职位级别,9最高',
department_NO varchar(20),
primary key(id)
);
drop table if exists department;
create table department(
id bigint not null auto_increment,
number varchar(20) unique not null,
name varchar(50),
location varchar(50),
super_NO varchar(20),
primary key(id)
);

insert into department values
 (0, 'D2019050001', '清华集团', '北京', null), (0, 'D2019050002', '集团总部', '北京','D2019050001'),
(0, 'D2019060001', '成都中心', '成都', 'D2019050001'), (0, 'D2019060002', '武汉中心', '武汉','D2019050001'),
(0, 'D2019090001', '上海中心', '上海', 'D2019050001'), (0, 'D2020010001', '广州中心', '广州','D2019050001'),
(0, 'D2019090011', '财务部', '上海', 'D2019090001'),(0, 'D2020020012', '行政部', '上海','D2019090001'),
(0, 'D2019060011', '财务部', '成都', 'D2019060001'), (0, 'D2019060012', '技术部', '成都','D2019060001'),
(0, 'D2019060013', '网络部', '成都', 'D2019060001'), (0, 'D2019060014', '市场部', '成都', 'D2019060001');

insert into employee values(0,'E2018010001','吴所为','总经理', null,'2018-01-01',2800,4000,9,'D2019060001');
insert into employee values(0,'E2018070003','韩金龙','总经理', null,'2018-07-01',2800,4000,8,'D2019090001');
insert into employee values(0,'E2018060002','王黎明','总经理', null,'2018-06-01',2800,4000,8,'D2019060002');
insert into employee values(0,'E2018020002','龚爱国','总经理', null,'2018-02-01',2800,4000,8,'D2020010001');
insert into employee values(0,'E2019050001','马金花','财务总监', 'E2018010001','2019-01-01',3800,500,6,'D2019060011');
insert into employee values(0,'E2019050018','李昌贵','财务专员', 'E2019050001','2019-04-21',2800,800,4,'D2019060011');
insert into employee values(0,'E2019100011','王建国','网络管理员', 'E2018010001','2019-10-01',3200,null,5,'D2019060013');
insert into employee values(0,'E2019110004','黎锦熙','网络管理员', 'E2019100011','2019-11-01',3200,null,5,'D2019060013');
insert into employee values(0,'E2020020023','繁茂森','销售专员', 'E2019060005','2020-02-01',2800,0,4,'D2019060014');
insert into employee values(0,'E2019060005','张善民','销售经理', 'E2018010001','2019-06-01',2800,500,6,'D2019060014');
insert into employee values(0,'E2019060009','廖云龙','技术总监', 'E2018010001','2019-06-01',4800,2000,7,'D2019060012');
insert into employee values(0,'E2019120021','刘盛会','研发工程师', 'E2019060009','2019-12-11',4800,500,5,'D2019060012');
insert into employee values(0,'E2019020001','马明全','高级工程师', 'E2019060009','2019-02-01',4800,1000,6, 'D2019060012');
insert into employee values(0,'E2019120015','李意','行政专员', 'E2018070003','2019-12-20',2800,500,4,'D2019090001');
insert into employee values(0,'E2019020017','刘六一','财务总监', 'E2018070003','2019-02-16',3800,1000,6,'D2019090011');
insert into employee values(0,'E2020020012','陈超','研发工程师', 'E2019060009','2020-02-18',4200,500,5,'D2019060012');

-- 多表查询练习:
-- 1.列出所有员工的姓名及其直接上级的姓名。
-- 分析:列:员工姓名    上级姓名
--       表:employee e   ,employee  m
-- 条件:员工的leader_NO   =    上级的number
select e.`name`'雇员',m.`name` '领导'
from employee e,employee m
where e.leader_NO = m.number;

-- 2.列出受雇日期早于直接上级的所有员工的编号、姓名、部门名称。
-- 列:e.number e.name d.NAME
-- 表:employee e, employee m,department d
-- 条件:e.hire date < m.hire.date
-- 先不查部门名称,直接先查部门编号
select e.number,e.`name`,e.department_NO
from employee e,employee m
where e.leader_NO = m.number and e.hire_date < m.hire_date;
-- (2)在1的基础上在联查部门表
select e.number,e.`name`,d.`name`
from employee e,employee m,department d
where e.leader_NO = m.number and e.hire_date < m.hire_date AND
e.department_NO = d.number;

-- 3.列出部门名称和这些部门的员工信息,同时列出那些没有员工的部门。
-- 列: *
-- 表:employee e,department d
select *
from employee e right outer join department d
on e.department_NO = d.number;

-- 4.列出在财务部工作的员工的姓名,假定不知道财务部的部门编号。
-- 列:e.name
-- 表:employee e, department d
-- 条件:  e.department no IN (select * from department where name = '财务部');
select *
from employee e
where e.department_NO in(select number from department where `name` = '财务部');

-- 5.列出薪金高于公司平均薪金的所有员工信息,所在部门名称,上级领导。
-- 列:*
-- 表:employee e
-- 条件:salary >(查询出公司的平均薪资)
-- (1)先查询出公司中的平均工资3437.50
select avg(salary) from employee;
-- (2)再根据题目的需求的列联合查询员工的信息和部门的信息
select *
from employee e 
left outer join employee m
on e.leader_NO = m.number 
left outer join department d
on d.number = e.department_NO;
(3)组合第一步的条件到第二步中
select e.*,d.`name` as '部门名称',m.`name` as '上级领导'
from employee e 
left outer join employee m
on e.leader_NO = m.number 
left outer join department d
on d.number = e.department_NO
where e.salary > (select avg(salary) from employee);

-- 6.列出与陈超从事相同工作的所有员工及部门名称。
-- 列:e.* d.name
-- 表:employee e department d
-- 条件 job=(查询出陈超的工作)
select e.*,d.`name`
from employee e left outer join department d
on e.department_NO = d.number
where job = (select job from employee where name="陈超");

-- 7.查出至少有一个员工的部门。显示部门编号、部门名称、部门位置、部门人数。
-- 列:
-- 表:department d employee e
-- 条件:e.number = d.number
select * 
from department d,(select department_NO ,count(*) cnt from employee group by department_NO) z1
where d.number = z1.department_NO;

-- 8.列出薪金高于在财务部工作员工平均薪金的员工姓名和薪金、部门名称。
-- 列:
-- 表:employee ee,department dd
-- 条件:ee.salary>avg(财务部薪资)
-- (1)查询财务部工作员工的平均薪资3466.67
select avg(e.salary)
from employee e,department d
where e.department_NO = d.number
and d.`name` = '财务部';
-- (2)按要求查询
select ee.`name` ename,ee.salary,dd.`name` dname
from employee ee left join department dd
on ee.department_NO = dd.number
where ee.salary >(select avg(e.salary)
from employee e,department d
where e.department_NO = d.number
and d.`name` = '财务部');

MySQL查询(2022-02-24)相关推荐

  1. Mysql 查询当前时间24小时内的数据

    记录一下mysql查询24小时内的sql语句 where time >=(NOW() - interval 24 hour)

  2. 2022.02.24

    老铁们,游戏我这周估计是完不成了,本身没有什么积累,卡组差很多,每次都被主流卡牌吊打,这个当日常任务吧. 早晨:小说 中午:看书 晚上:游戏 大晚上:运动,持续的运动坚持 今天基本是在会议培训中度过, ...

  3. Mysql 查询前24小时、3条离当前时间最近的记录

    Mysql 查询以当前时间往后的24小时内的数据  register_date >=(NOW() - interval 24 hour) 例如: select * from sys_user W ...

  4. MySQL 查询最好的前/后3条

    MySQL 查询前/后3条 1 查询SQL 2 学生表 3 成绩表 1 查询SQL select a.`subject`,a.score,s.`name` from score a left join ...

  5. 使用Apache Spark让MySQL查询速度提升10倍以上

    作者:Alexander Rubin 链接:http://coyee.com/article/11012-how-apache-spark-makes-your-slow-mysql-queries- ...

  6. mysql查询字段变慢,MySQL Query IN()子句在索引列上变慢

    我有一个由PHP脚本生成的MySQL查询,该查询将如下所示: SELECT * FROM Recipe_Data WHERE 404_Without_200 = 0 AND Failures_With ...

  7. JavaWeb 2022.9.24

    JavaWeb 2022.9.24 Java web 1.基本概念 1.1.前言 web开发 web,网页的意思 静态web heml.css 提供给所有人看的数据始终不会发生变化! 动态web 淘宝 ...

  8. 网上搜集的MySQL查询语句大全集锦(经典珍藏)

    原文地址为: 网上搜集的MySQL查询语句大全集锦(经典珍藏) SQL查询语句大全集锦 MYSQL查询语句大全集锦 1:使用SHOW语句找出在服务器上当前存在什么数据库: mysql> SHOW ...

  9. ElasticSearch + Kibana + logstash+ik结合springboot代码实现,比较ES和传统Mysql查询效率

    开发环境:Win10 开发环境:STS 概要:此篇文章主要是传统的Mysql查询和ES查询两种方式的效率比较,以及代码实现,另外使用logstash进行mysql数据的同步也可以直接理解为" ...

  10. mysql 查询日志介绍

    MySQL查询日志介绍 MySQL的查询日志记录了所有MySQL数据库请求的信息.无论这些请求是否得到了正确的执行.默认文件名为hostname.log.默认情况下MySQL查询日志是关闭的.生产环境 ...

最新文章

  1. curl模拟post请求
  2. apply_async多进程
  3. string s.substr()的用法
  4. 吴恩达深度学习笔记9-Course3-Week2【机器学习策略(ML Strategy)2】
  5. 【Linux】一步一步学Linux——lnstat命令(189)
  6. iOS10 权限访问崩溃
  7. spring的钩子_高级java开发必须掌握的Spring接口——SmartLifecycle
  8. 金额转换,阿拉伯数字的金额转换成中国传统的形式如:(¥1011)-(一千零一拾一元整)输出。...
  9. 密码强弱提示(27)
  10. php输出excel表格乱码和第一个0不显示的解决方法(详细)
  11. Java 4.表达式
  12. 区块链Hyperledger Fabric背书过程中链码是并行还是串行?
  13. c语言 面试前必备基础知识
  14. Python爬虫爬取网页数据
  15. overscroll-behavior
  16. writeup-khaleesi
  17. 经典解析23 种设计模式
  18. Python随记(28)爬取碧蓝航线的立绘(狗头)
  19. 网站优化有哪些技巧,网站优化实用简易教程
  20. sqlserver 属性 TextHeader 不可用于 StoredProcedure“[dbo].[x]”该对象可能没有此属性,也可能是访问权限不足而无法检索。 该文本已加密。

热门文章

  1. 机顶盒中间件与API
  2. 如何抓取无线网络数据包
  3. javascript转帖备忘
  4. Google Interview University | 坚持完成这套学习手册,你就可以去 Google 面试了
  5. opencv 打开和保存视屏(python版)
  6. 工业通讯 | KEBA 控制器通过 NT50 连接西门子 PLC
  7. django框架加入simditor富文本编辑器,使用mako进行渲染
  8. 解决安卓UVCCamera YUY2格式花屏,MTK无法出视频等问题
  9. 研究生阶段的大数据专业都学习什么科目?
  10. 美国计算机phd毕业需要几篇论文,美国计算机博士申请