https://blog.csdn.net/hanhanwanghaha宝藏女孩 欢迎您的关注!
欢迎关注微信公众号:宝藏女孩的成长日记
如有转载,请注明出处(如不注明,盗者必究)

目录

  • 一、表的创建
    • 1.1创建学生表student_one
    • 1.2创建教师表teacher_one
    • 1.3创建课程表course_one
    • 1.4创建成绩表score_one
  • 二、基于多表的连接查询
    • 2.1笛卡尔积(交叉连接)
    • 2.2 内连接
      • 2.2.1显示内连接
      • 2.2.2隐式内连接
    • 2.3外连接查询
      • 2.3.1左外连接
      • 2.3.2右外连接
    • 2.4子查询
      • 2.4.1普通子查询
      • 2.4.2使用EXISTS的子查询
      • 2.4.3使用 NOT EXISTS的子查询
    • 2.5 组合查询(使用UNION运算符组合多个结果)

一、表的创建

1.1创建学生表student_one

Sql语句:

create table student_one(
sno varchar(20) not null primary key,
sname varchar(20) not null,
ssex varchar(20) not null,
sbirthday datetime,
class varchar(20)
)charset=utf8;

加入数据:

insert into student_one values('1','陈奇','男','2000-11-02','1');
insert into student_one values('2','陈飞','男','1999-12-05','2');
insert into student_one values('3','周杰','女','1989-03-01','3');
insert into student_one values('4','昆凌','男','1989-04-15','4');
insert into student_one values('5','王丽','女','1999-05-16','5');
insert into student_one values('6','蔡蔡','男','2000-08-17','6');

运行结果:

1.2创建教师表teacher_one

Sql语句:

create table teacher_one
(
tno varchar(20) not null primary key,
tname varchar(20) not null,
tsex varchar(20) not null,
depart varchar(20) not null
)charset=utf8;

加入数据:

insert into teacher_one  values('100','斯内普','男','计算机');
insert into teacher_one  values('101','哈利波特','男','土木工程');
insert into teacher_one  values('102','德拉科','男','中文');
insert into teacher_one  values('103','郝敏','女','历史');
insert into teacher_one  values('104','莉莉','女','舞蹈');

运行结果:

1.3创建课程表course_one

Sql语句:

create table course_one(
cno varchar(20) not null primary key,
cname varchar(20) not null,
tno varchar(20) not null,
foreign key(tno) references teacher_one(tno)
)charset=utf8;

加入数据:

insert into course_one values('0-1','计算机导论','100');
insert into course_one values('1-5','混凝土结构','101');
insert into course_one values('2-1','古代文论','102');
insert into course_one values('3-2','世界古代史','103');
insert into course_one values('4-2','蒙古舞','104');

运行结果:

1.4创建成绩表score_one

Sql语句:

create table score_one(
sno varchar(20) not null,
foreign key(sno) references student_one(sno),
cno varchar(20) not null,
foreign key(cno) references course_one(cno),
degree decimal
)charset=utf8;

加入数据:

insert into score_one values('1','0-1','99');
insert into score_one values('2','1-5','88');
insert into score_one values('3','2-1','77');
insert into score_one values('4','3-2','66');
insert into score_one values('5','4-2','98');
insert into score_one values('6','3-2','99');

运行结果:

二、基于多表的连接查询

多表查询的连接谓词
Join:将两个表连接在一起,可进行笛卡尔积、内连接、外连接

2.1笛卡尔积(交叉连接)

举例:
目的:将teacher_one表和course_one表做笛卡尔积
Sql语句:

SELECT *
FROM teacher_one
CROSS JOIN course_one;

运行结果:

2.2 内连接

内连接是最常见的一种连接,它也被称为普通连接和自然连接,但是只连接匹配的行,所以内连接可能丢失信息

2.2.1显示内连接

语法

SELECT 查询的字段
FROM table1 JOIN table2
ON table_b ON table_a.外键 = table_b.主键;

举例:
目的:将学生学号,名字,成绩查询出来
Sql语句:

SELECT student_one.sno, student_one.sname, score_one.degree
FROM score_one JOIN student_one
ON score_one.sno = student_one.sno;

运行结果:

2.2.2隐式内连接

语法:

SELECT 查询的字段
FROM table_a , table_b
WHERE table_a.外键 = table_b.主键;

举例:
目的:将学生学号,名字,成绩查询出来
Sql语句:

SELECT student_one.sno, student_one.sname, score_one.degree
FROM score_one, student_one
WHERE score_one.sno = student_one.sno;

运行结果:

2.3外连接查询

外连接查询扩充了内连接查询的功能,包含全外连接、左外连接、右外连接

2.3.1左外连接

保留第一个表所有行,而第二个表只包含与第一个表匹配的行,第二个表相应的空行为NULL值
语法:

SELECT 查询的字段
FROM table1 LEFT  JOIN table2
ON 条件

举例:
目的:将每位老师的所教的课程查询出来
Sql语句:

SELECT teacher_one.tname,course_one.cname
FROM teacher_one LEFT  JOIN course_one
ON course_one.tno = teacher_one.tno

运行结果:

2.3.2右外连接

保留第二个表所有行,而第一个表只包含与第二个表匹配的行,第一个表相应的空行为NULL值,与左外连接相反

语法

SELECT 查询的字段
FROM table1 RIGHT  JOIN table2
ON 条件

举例:
目的:将学生的学号,姓名,成绩查询出来
Sql语句:

SELECT student_one.sno,student_one.sname,score_one.degree
FROM student_one RIGHT  JOIN score_one
ON score_one.sno=student_one.sno

运行结果:

2.4子查询

2.4.1普通子查询

一条select语句结果作为另一条select语句的(查询条件,查询结果等)。

语法:

SELECT 查询的字段
FROM table_a
WHERE 字段 = (SELECT 字段 FROM table_a [WHERE 条件])

举例:
目的:将sno小于3的同学的成绩查询出来
Sql语句:


SELECT student_one.sname, score_one.degree
FROM student_one LEFT JOIN score_one
ON score_one.sno = student_one.sno
WHERE student_one.sno IN (SELECT sno FROM student_one WHERE student_one.sno <3)

注意:当子查询产生一系列的值时,用IN,如果只有单个的值,就用=
运行结果:

2.4.2使用EXISTS的子查询

EXISTS
EXISTS搜索条件并不真正使用子查询的结果,它仅仅测试子查询是否产生任何结果
语法:

SELECT 查询的字段
FROM table
WHERE  EXISTS (条件)

举例:
目的:查询teacher_one表里面是否存在教师编号小于105的教师,不存在返回NULL
Sql语句:

SELECT teacher_one.tname, course_one.cname
FROM teacher_one LEFT JOIN course_one
ON course_one.tno = teacher_one.tno
WHERE  EXISTS (SELECT tno FROM  teacher_one WHERE teacher_one.tno <105)

运行结果:

2.4.3使用 NOT EXISTS的子查询

NOT EXISTS
与 EXISTS的作用相反,如果子查询没有返回行,则满足 NOT EXISTS的WHERE子句
语法:

SELECT 查询的字段
FROM table
WHERE NOT EXISTS (条件)

举例:
目的:查询teacher_one表里面是否存在教师编号等于109的教师,存在返回NULL,不存在返回数据
Sql语句:

SELECT *
FROM teacher_one
WHERE NOT EXISTS (SELECT tno FROM teacher_one WHERE tno=109)

运行结果:

2.5 组合查询(使用UNION运算符组合多个结果)

语法:

查询语句A
UNION
查询语句B

举例:
目的:将性别为男,学号为5的同学的学号,姓名,年龄都查询出来
Sql语句:

SELECT sno,sname,YEAR(from_days(datediff(now(), sbirthday))) AS '年龄'
FROM student_one
WHERE ssex='男'
UNION ALL
SELECT sno,sname,YEAR(from_days(datediff(now(), sbirthday))) AS '年龄'
FROM student_one
WHERE sno=5

运行结果:

Mysql的多表查询(表添加,多表查询练习:笛卡尔积、内连接、外连接、子查询、UNION组合查询)相关推荐

  1. MySQL 表的增删改查(进阶篇②)· 联合查询 内连接 外连接 · 自连接 · 子查询 exists · 合并查询 union

    接进阶篇①,我们继续学习. 一.联合查询 1.1 内连接 1.2 外连接 1.3 内连接和左右外连接的区别 二.自连接 三.子查询 3.1 单行子查询 3.2 多行子查询 使用 in 范围匹配多行 另 ...

  2. 图表嵌入到数据表格下方_在excel图表下方添加数据表 excel图表添加数据表

    在excel图表下方添加数据表 excel图表添加数据表,前天刚学习了一个excel的新技术,叫"excel图表添加数据表"授课老师对我们说,这一技术的专业全称为"在ex ...

  3. 一文完整MySQL连接查询,笛卡尔乘积,内连接外连接交叉连接

    文章目录 笛卡尔乘积 连接查询分类 等值连接 非等值连接 自连接 外连接 交叉连接 连接查询又称为多表查询,当查询的字段来自于多个表时,使用连接查询. 笛卡尔乘积 笛卡尔乘积现象:表1有m行,表2有n ...

  4. Oracle 表连接方式(内连接/外连接/自连接) 详解

    Oracle 表之间的连接分为三种: 1. 内连接(自然连接) 2. 外连接 (1)左外连接 (左边的表不加限制)        (2)右外连接(右边的表不加限制)         (3)全外连接(左 ...

  5. MySQL给查询结果添加一表表示行号或名次(1)

    2019独角兽企业重金招聘Python工程师标准>>> 给单表查询结果添加一列表示名次(order_no)和行号(row_no) 需求信息 有一个游戏子任务表(qw_game_tas ...

  6. mysql:union 组合查询

    issue表 employee_table表 Union基础方法 -- union 去除重复 SELECT 1, 2 UNION SELECT 1, 2; -- union all 关联所有 包含重复 ...

  7. 《MySQL数据操作与查询》- 维护学生信息、老师信息和成绩信息 支持按多种条件组合查询学生信息和成绩信息

    综合项目需求 一.系统整体功能 系统需支持以下功能: 维护学生信息.老师信息和成绩信息 支持按多种条件组合查询学生信息和成绩信息 学生 Student(id,班级id,学号,姓名,性别,电话,地址,出 ...

  8. oracle 连接查询(内、外连接、自连接、子查询)

    内连接: 一般使用inner join来实现.其中inner关键字可以省略 同时必须在from子句之后定义一个on子句,用来指定连接条件 外连接 1 左外连接:关键字为left outer join或 ...

  9. mysql外连接_mysql学习-mysql内连接外连接

    SQL99标准,也称为SQL1999标准 分类:内连接,外连接 一.内连接 使用  inner join ...on 语法: select 列名1 别名1,列名2 别名2... from 表名1 别名 ...

最新文章

  1. 【转】Jmeter常见问题
  2. SRCNN-图像超分辨的学习
  3. 项目经理如何有效地进行项目沟通?
  4. PHP获取当前毫秒时间戳
  5. 怎样批量调整word 图片大小?
  6. MineCraft和堆外内存
  7. JavaScript 浏览器对象BOM
  8. json数组对象和对象数组
  9. WINDOWS SERVER 2003 R2 AD域控安装过程实践
  10. Win XP局域网设置及其无法访问解决方案
  11. 上传本地项目到gitee_使用git将本地代码上传到gitee远程仓库
  12. golang之旅--接口 (interface)
  13. 使用iTunes 12.7 可以直接安装ipa安装包
  14. 通过.reg文件修改注册表
  15. 《Adobe SiteCatalyst网站分析权威手册》一第1章 什么是Adobe SiteCatal0yst1.1 SiteCatalyst简史...
  16. html边框闪烁代码,纯css实现动态边框的示例代码
  17. java默认收集器_jvm默认垃圾收集器
  18. VSTO 系列(06)-自定义任务窗格
  19. 【Java网络编程与IO流】Http协议详解以及面试有关问题
  20. ABBYY FineReader15文字版pdf识别工具

热门文章

  1. 齐浩亮 计算机科学与技术,齐浩亮
  2. 消息已读未读的模型设计_阿里云技术专家分享:现代 IM 系统中消息推送和存储架构的实现...
  3. mysql gtid深入_深入理解MySQL 5.7 GTID系列(四):mysql.gtid_executedPREVIOUS GTID EVENT
  4. 《计算机导论》课程论文,计算机导论课程论文
  5. 华为鸿蒙手机和电视通话,鸿蒙智慧屏首秀:逾10万人预定,电视视频通话功能强大...
  6. 微软故障转移群集服务器要求,故障转移群集概述
  7. 万年历c语言大作业实验,用C语言写的一个万年历
  8. 小米游戏手柄pc插件_在电视上玩电脑游戏
  9. suse linux 创建用户密码,suse linux上创建用户方式
  10. IDEA通过Database连接MySql数据库