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

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

运行结果:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/568849.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Mysql的IF()函数:如果返回True值,返回第一个值,为False值,返回第二个值

IF函数定义 语法 IF(condition, A, B)如果condition为TRUE值&#xff0c;就返回A&#xff0c;如果condition为FALSE值&#xff0c;就返回B。 举例 添加表 create table teacher_one ( tno varchar(20) not null primary key, tname varchar(20) not null, tsex varchar(20…

msyql的FORMAT()函数设置小数位数,将小数位数保留到小数点后第n位,最后一位四舍五入

FORMAT()函数 在mysql的查询中&#xff0c;如果我们输入的是小数类型&#xff0c;而保留几位小数因情况而变&#xff0c;我们可以用FORMAT&#xff08;&#xff09;函数来设置想保留的几位小数。即将数据内容格式化&#xff0c;将数据格式化为整数或者带几位小数的浮点数&#…

import win32com.client在python中报错及其解决办法

在调用import win32com.client的时候出现下面的报错情况 https://blog.csdn.net/hanhanwanghaha宝藏女孩 欢迎您的关注&#xff01; 欢迎关注微信公众号&#xff1a;宝藏女孩的成长日记 如有转载&#xff0c;请注明出处&#xff08;如不注明&#xff0c;盗者必究&#xff09; …

python怎么安装pandas详细步骤

1.打开cmd&#xff0c;输入 pip install pandas如果pip没有添加到系统变量中去&#xff0c;会出现报错。 具体解决办法参照&#xff1a; https://blog.csdn.net/hanhanwanghaha/article/details/106445654 如图表示已经安装好了pandas 检验&#xff1a; 我们在python中导包…

ping 不是内部或外部命令,也不是可运行的程序 或批处理文件。的解决办法

我们在ping检测网络的时候出现以下报错&#xff1a; ‘ping’ 不是内部或外部命令&#xff0c;也不是可运行的程序 或批处理文件。 https://blog.csdn.net/hanhanwanghaha宝藏女孩 欢迎您的关注&#xff01; 欢迎关注微信公众号&#xff1a;宝藏女孩的成长日记 让这个可爱的宝…

(原码反码补码的计算)在一个8位的二进制的机器中,补码表示的整数范围是从_(1)_(小)到_(2)_(大)。这两个数在机器中的补码表示为_(3)_(小)到_(4)_(大)。数0的补码为_(5)_。

https://blog.csdn.net/hanhanwanghaha宝藏女孩 欢迎您的关注&#xff01; 欢迎关注微信公众号&#xff1a;宝藏女孩的成长日记 如有转载&#xff0c;请注明出处&#xff08;如不注明&#xff0c;盗者必究&#xff09; 目录题目分析过程补充&#xff08;反码、补码及进制转换&a…

实用一位加法电路-全加器(全加器真值表、全加器的逻辑组合电路)、几种基本组合逻辑电路真值表 补充:逻辑电路基础:与门、或门、非门----计算机组成原理

https://blog.csdn.net/hanhanwanghaha宝藏女孩 欢迎您的关注&#xff01; 欢迎关注微信公众号&#xff1a;宝藏女孩的成长日记 如有转载&#xff0c;请注明出处&#xff08;如不注明&#xff0c;盗者必究&#xff09; 目录一、全加器的真值表二、全加器逻辑组合电路的构建三、…

Connected to the target VM, address: ‘127.0.0.1:0‘, transport: ‘socket‘ Disconnected from the target

报错情况&#xff1a; 翻译过来是&#xff1a; 已连接到目标VM&#xff0c;地址&#xff1a;“127.0.0.1:0”&#xff0c;传输&#xff1a;“socket”已断开与目标VM的连接&#xff0c;地址&#xff1a;“127.0.0.1:0”&#xff0c;传输&#xff1a;“socket” 在网上找了很多…

Python单元测试介绍及单元测试理解,单元测试的自动生成(对函数进行测试)

目录一、单元测试的定义二、实例理解2.1可通过的测试一个模拟的登录测试用例测试代码运行结果2.2不可通过的测试一个模拟的登录测试用例测试代码运行结果三、单元测试的自动生成https://blog.csdn.net/hanhanwanghaha宝藏女孩 欢迎您的关注&#xff01; 欢迎关注微信公众号&…

怎样彻底卸载软件?解决卸载残余?例如:总跳出Xftp 6.msi安装-Xftp 6无法访问你试图使用的功能所在的网络位置,单击“确定”重试,或在下面的框中输入包含安装程序包“Xftp 6.msi”文件

问题重述 最近电脑总是跳出这样的消息&#xff0c;这是我们的Xftp没有卸载干净导致的。 https://blog.csdn.net/hanhanwanghaha宝藏女孩 欢迎您的关注&#xff01; 欢迎关注微信公众号&#xff1a;宝藏女孩的成长日记 让这个可爱的宝藏女孩在努力的道路上与你一起同行&#…

Python字典(Dictionary)的setdefault()方法的详解,字典中的赋值技巧

定义 1.字典的setdefault() 方法和 get()方法类似,返回指定键的值&#xff0c;如果键不在字典中&#xff0c;将会添加键值对&#xff0c;值默认为None。 2.setdefault()与get()区别&#xff1a; setdefault() 返回的键如果不在字典中&#xff0c;会添加键&#xff08;更新字典…

数据结构--队列、双端队列实际举例详解(Python代码)

https://blog.csdn.net/hanhanwanghaha宝藏女孩 欢迎您的关注&#xff01; 欢迎关注微信公众号&#xff1a;宝藏女孩的成长日记 让这个可爱的宝藏女孩在努力的道路上与你一起同行&#xff01; 如有转载&#xff0c;请注明出处&#xff08;如不注明&#xff0c;盗者必究&#xf…

pythonselenium一个简单的自动化测试实战:百度搜索

目录前提准备1. Chrome浏览器的安装2. chrome浏览器下载驱动地址及Chrome的版本号查看3.下载chrome浏览器驱动4.下载安装selenium代码PC端移动端前提准备 1. Chrome浏览器的安装 2. chrome浏览器下载驱动地址及Chrome的版本号查看 这里驱动的作用&#xff1a;我们写的代码通…

递归算法(python),汉诺塔问题,斐波那契数列,一个简单的递归实例,用递归实现阶乘,用递归查看目录及文件

https://blog.csdn.net/hanhanwanghaha宝藏女孩 欢迎您的关注&#xff01; 欢迎关注微信公众号&#xff1a;宝藏女孩的成长日记 让这个可爱的宝藏女孩在努力的道路上与你一起同行&#xff01; 如有转载&#xff0c;请注明出处&#xff08;如不注明&#xff0c;盗者必究&#xf…

python run之后出现>>> runfile(‘F:xxx.py‘, wdir=‘F:xxx‘) 快速干掉它的办法

运行结果 F:\Z\Python\install\Anaconda\envs\admin\python.exe "F:\Z\Python\install\pycharm\installPYcharm\PyCharm 2020.1\plugins\python\helpers\pydev\pydevconsole.py" --modeclient --port58318 PyDev console: starting. >>> runfile(F:/Z/Pyth…

matplotlib的基本使用 附python代码详细讲解(基本图的绘制、样式、简单函数的使用)

目录一、基本图的绘制1.1直线的绘制1.2折线的绘制1.3散点图的绘制1.4绘制不同颜色的散点图1.5绘制不同颜色的线1.6柱状图1.7饼状图1.8直方图1.9三维图1.10等高线图二、样式2.1基本样式2.2画布分区的使用三、函数3.1简单的一元二次方程3.2三角函数一、基本图的绘制 1.1直线的绘…

算法的时间复杂度(python版容易理解)+常用的时间复杂度、python代码--数据结构

https://blog.csdn.net/hanhanwanghaha宝藏女孩 欢迎您的关注&#xff01; 欢迎关注微信公众号&#xff1a;宝藏女孩的成长日记 如有转载&#xff0c;请注明出处&#xff08;如不注明&#xff0c;盗者必究&#xff09; 目录一、算法时间复杂度的应用二、如何计算算法的时间复杂…

python小白如何看报错?实用三步法

https://blog.csdn.net/hanhanwanghaha宝藏女孩 欢迎您的关注&#xff01; 欢迎关注微信公众号&#xff1a;宝藏女孩的成长日记 如有转载&#xff0c;请注明出处&#xff08;如不注明&#xff0c;盗者必究&#xff09; 怎么正确看报错&#xff1f;拿一段代码来说事&#xff1a;…

测试必备:单元测试测试类,以帮助匿名管理调查的类为例详解--白盒测试

类的测试与函数的测试相似 测试函数的案例&#xff1a;https://blog.csdn.net/hanhanwanghaha/article/details/107487037 https://blog.csdn.net/hanhanwanghaha宝藏女孩 欢迎您的关注&#xff01; 欢迎关注微信公众号&#xff1a;宝藏女孩的成长日记 让这个可爱的宝藏女孩在努…

解决Pycharm文件夹中同级目录导包报错的问题

报错情况&#xff1a;导包报错&#xff0c;但程序仍然可以运行 https://blog.csdn.net/hanhanwanghaha宝藏女孩 欢迎您的关注&#xff01; 欢迎关注微信公众号&#xff1a;宝藏女孩的成长日记 让这个可爱的宝藏女孩在努力的道路上与你一起同行&#xff01; 如有转载&#xff0…