数据准备:


## 学院表
create table department(
d_id int primary key auto_increment,
d_name varchar(20) not null
);
insert into department(d_name ) values('计算机学院'),('外语学院');
insert into department(d_name ) values('机械学院'),('建工学院'),('艺术学院');

## 学生表
create table student(
s_id int primary key auto_increment,
s_name varchar(20) not null,
dept_id int ,
foreign key(dept_id) references department(d_id)
);
insert into student(s_name,dept_id ) values('佳能',2),('lucky',3);
insert into student(s_name,dept_id ) values('张三',1),('李四',1);
insert into student(s_name,dept_id ) values('张三丰',2),('小明',3),('小红',2);
insert into student(s_name) values('安迪'),('杰克');

## 学生详情
create table student_detail(
id int primary key, #学号
age int ,
sex char(4),
address varchar(20),
foreign key(id) references student(s_id)
);
insert into student_detail value(4,18,'女','北京');
insert into student_detail value(2,20,'男','湖南长沙');
insert into student_detail value(3,19,'男','广东佛山');
insert into student_detail value(1,21,'男','湖南长沙');
insert into student_detail value(5,17,'女','四川成都');
insert into student_detail value(6,23,'女','湖北武汉');

## 课程表
create table `cours`(
c_id int primary key auto_increment,
c_name varchar(20),
dept_id int not null, # 课程所属学院
foreign key(dept_id) references department(d_id)
);
insert into cours(c_name ,dept_id) values('python',1),('英语',2);
insert into cours(c_name ,dept_id) values('java',1),('工程造价',4);
insert into cours(c_name ,dept_id) values('机械设计',3),('土木',4);

课表

create table `select`(
s_id int,
c_id int,
primary key(s_id,c_id),
foreign key(s_id) references student(s_id),
foreign key(c_id) references cours(c_id)
);
insert into `select` values(2,4),(3,2),(1,1);
insert into `select` values(2,1),(4,2),(3,1);
insert into `select` values(2,3),(4,1),(2,2);


############################ Mysql 单表查询 ############################


############################  Mysql 子查询  ############################


############################ Mysql 关联查询 ############################

测试案例:


1 查出学生详情表性别为男,并同时年龄大于18的

select * from  student_detail where sex='男' and age>18;

2 根据上述的结果,查出学生表对应的 姓名, 年龄,家庭住址

select s.s_name,stu.age,stu.address from student s
left join student_detail stu on s.s_id = stu.id
where stu.sex='男' and stu.age > 18 ;

-----------------------------------------------------------------------------------

## 也可以使用子查询的方法
select s.s_name,stu.age,stu.address from student s
left join student_detail stu on s.s_id = stu.id
where s.s_id in ( select id from student_detail where sex='男' and age>18 ) ;

3 将学生详情,通过性别进行分组, 统计出各组的人数,并得出每组的年龄的平均值

select sex, count(id),avg(age) from student_detail group by( sex );

4.作为学生,选完课希望看到: 学生姓名, 所选课程名,开课学院

select s.s_name, c.c_name , d.d_name from `select` se
left join student s on se.s_id = s.s_id
left join cours c on se.c_id = c.c_id
left join department d on d.d_id = c.dept_id
where s.s_id =2;

Mysql 单表查询 子查询 关联查询的更多相关文章

  1. Mysql 单表查询-排序-分页-group by初识

    Mysql 单表查询-排序-分页-group by初识 对于select 来说, 分组聚合(((group by; aggregation), 排序 (order by** ), 分页查询 (limi ...

  2. MySQL单表多字段模糊查询

    今天工作时遇到一个功能问题:就是输入关键字搜索的字段不只一个字段,比如 我输入: 超天才 ,需要检索出 包含这个关键字的 name . company.job等多个字段.在网上查询了一会就找到了答案. ...

  3. python 3 mysql 单表查询

    python 3 mysql 单表查询 1.准备表 company.employee 员工id id int 姓名 emp_name varchar 性别 sex enum 年龄 age int 入职 ...

  4. Mysql 单表查询where初识

    Mysql 单表查询where初识 准备数据 -- 创建测试库 -- drop database if exists student_db; create database student_db ch ...

  5. MYSQL单表可以存储多少条数据???

    MYSQL单表可以存储多少条数据??? 单表存储四千万条数据,说MySQL不行的自己打脸吧. 多说一句话,对于爬虫来说,任何数据库,仅仅是存储数据的地方,最关心的是 能否存储数据和存储多少数据以及存储 ...

  6. MySQL单表数据不超过500万:是经验数值,还是黄金铁律?

    今天,探讨一个有趣的话题:MySQL 单表数据达到多少时才需要考虑分库分表?有人说 2000 万行,也有人说 500 万行.那么,你觉得这个数值多少才合适呢? 曾经在中国互联网技术圈广为流传着这么一个 ...

  7. MySQL单表最大记录数不能超过多少?

    MySQL单表最大记录数不能超过多少? 很多人困惑这个问题.其实,MySQL本身并没有对单表最大记录数进行限制,这个数值取决于你的操作系统对单个文件的限制本身. 从性能角度来讲,MySQL单表数据不要 ...

  8. MySQL单表数据不要超过500万行:是经验数值,还是黄金铁律?

    本文阅读时间大约3分钟. 梁桂钊 | 作者 今天,探讨一个有趣的话题:MySQL 单表数据达到多少时才需要考虑分库分表?有人说 2000 万行,也有人说 500 万行.那么,你觉得这个数值多少才合适呢 ...

  9. mySQL单表限制大小

    MySQL单表大小的限制在目前的技术环境中,由所在主机的OS上面的文件系统来界定而不是由MySQL数据库本身来决定了. 在老版本的MySQL 3.22中,MySQL单表大小为4GB,当时的MySQL的 ...

随机推荐

  1. 微信小程序传值以及获取值方法

    http://www.51xuediannao.com/xiaochengxu/xiaochengxu-chuanzhi.html

  2. 2018.4.28 kvm虚拟机管理

    创建虚拟机: virt-install --name wj-v1.4.1.0411 --vcpus=2 --memory=2048 --disk path=/home/wj/os/osgwV1.4.1 ...

  3. kali安装Google浏览器之后的问题

    kali中,在安装完Google浏览器后会出现点击图标却打不开的问题,解决方式如下: 2019-04-10  09:46:00

  4. spring--多人开发,模块化配置

    需要在配置文件中配置: <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="h ...

  5. 什么是pytorch(4.数据集加载和处理)(翻译)

    数据集加载和处理 这里主要涉及两个包:torchvision.datasets 和torch.utils.data.Dataset 和DataLoader torchvision.datasets是一 ...

  6. gitlab部署步骤+汉化

    系统环境centos7 下载gitlab安装包 https://packages.gitlab.com/gitlab/gitlab-ce 我下载的版本是 gitlab-ce-11.1.4-ce.0.e ...

  7. java中URL和File的相互转化

    首先,想比较一下这两者的不同.URL用于网络,所以带有明显的protocol,而且对于中文及符号支持的很不好.File就是我们平常系统中的文件路径了,对于中文及符号都支持,但是已经没有protocol ...

  8. 【转载】Win10系统桌面右键新建没有Word、Excel、PPT怎么恢复?

    Win10系统桌面右键新建没有Word.Excel.PPT怎么恢复? 以下正文转载至: 网址:http://www.xitongzhijia.net/xtjc/20170307/93471.html ...

  9. extjs_10_自己定义combotree组件

    1.项目截图 2.treedata.json { text : "root", expanded : true, expandable : true, children : [{ ...

  10. Python(一)—— 控制流:if & for & while

    基操 编程语言类 编译型 程序在执行之前需要一个专门的编译过程,把程序编译成 为机器语言的文件,运行时不需要重新翻译,直接使用编译的结果就行了.程序执行效率高,依赖编译器,跨平台性差些.缺点:编译之后 ...