mysql连接查询详解

作者:one?2?1? 时间:2024-01-15 16:42:11 

1.连接查询

作用:当查询结果的列来源于多张表时,需要将多张表连接成一个大的数据集,再选择合适的列返回

2、连接类型

内连接

定义:

内连接查询:查询结果为两个表匹配到的数据

mysql连接查询详解

语法1:

select * from 表1
inner join 表2 on 表1.列 = 表2.列

例:查询学生信息及学生成绩

mysql连接查询详解

 语法2:

 select * from 表1,表2 on 表1.列 = 表2.列

注:通常不使用此语法,效率较低

 3个表连接

-- 查询学生信息及学生的课程对应的成绩

mysql连接查询详解

显示指定列

mysql连接查询详解

 

左连接

定义:

查询的结果为两个表匹配到的数据加左表特有的数据,对于右表中不存在的数据(匹配不到)使用null填充

mysql连接查询详解

语法:

select * from 表1
left join 表2 on 表1 .列 = 表2.列

例:

查询所有学生的成绩,包括没有成绩的学生

mysql连接查询详解

 例:

查询所有学生的成绩,包括没有成绩的学生,需要显示课程名

mysql连接查询详解

右连接 

 定义:

右连接查询:查询结果为两个表匹配到的数据加右表特有的数据,对于左边中不存在的数据使用null填充

mysql连接查询详解

语法:

select * from 表1
right join 表2 on 表1 .列 = 表2.列

例:查询所有学生的成绩,包括没有成绩的学生 

mysql连接查询详解

 例:

查询所有学生的成绩,包括没有成绩的学生,需要显示课程名

mysql连接查询详解

自关联

定义

连接查询的一种应用,对同一个表查询多次,把查询多次得到的结果连接组成新的结果 

主要应用场景:数据有上下级关系,并且存于同一个表中

 例:查询河南省的所有城市

 

mysql连接查询详解

例:查询郑州市的所有区县 

 

mysql连接查询详解

例:查询河南省所有区县

mysql连接查询详解

 子查询

定义

在一个select 语句中,嵌入另外一个select语句,那么嵌入的那个select语句称之为子查询语句

主查询

外城的select称之为主查询语句

主查询和子查询的关系

子查询是嵌入到主查询中子查询是辅助主查询的,要么充当条件,要么充当数据源子查询是可以独立存在的语句是一条转正的select语句 

子查询充当条件

以下例子中子查询返回结果只有一个值(一行一列),这种称之为标量子查询

例1:查询大于平均年龄的学生

-- 查询班里学生的平均年龄
SELECT AVG(age) FROM students --21.5833
-- 查询大于平均年龄的学生
SELECT * from students where age > 21.5833
SELECT * FROM students where age >(SELECT AVG(age) FROM students);

以下例子返回数据结果是一列数据(一列多行),这种称之为列子查询

例: 查询18岁学生的成绩,要求显示成绩

-- 学生表中查询18岁学生的学号
SELECT studentNo from students WHERE age = 18
-- 成绩表中根据学号查询成绩
SELECT * FROM scores where studentNo in ('002','006' )
SELECT * FROM scores where studentNo in (SELECT studentNo from students WHERE age = 18 )

 以下例子查询的结果是一行(一行多列),这种称之为行子查询

例:查询和王昭君同班、同龄的学生信息 

SELECT class,age from students where name = '王昭君'
SELECT * from students where class = '1班' and age = 20
SELECT * from students where (class,age) = ('1班' , '20')
SELECT * from students where (class,age) = (SELECT class,age from students where name = '王昭君')

 子查询充当数据源

以下例子子查询返回的结果是多行多列(相当于一个表),这种称之为表级子查询;

例:查询数据库和系统测试的课程成绩

mysql连接查询详解

子查询 * 定关键字使用 

in范围 

格式:主查询where条件in(列子查询)

any|some任意一个

格式:主查询where 列 = any(列子查询)

在条件查询的结果中匹配任意一个几个,等价于in  

all

格式:主查询where列 = all(列子查询):等价于里面所有

格式:主查询where列<>all(列子查询):不等于其中所有 

来源:https://blog.csdn.net/weixin_45490820/article/details/124470657

标签:mysql,连接查询
0
投稿

猜你喜欢

  • 浅析Python中的多重继承

    2021-03-19 21:17:56
  • 在ASP.NET 2.0中操作数据之二十七:创建自定义排序用户界面

    2023-06-25 21:01:05
  • Python数字图像处理代数之加减乘运算

    2023-03-20 07:51:26
  • 微信小程序实现顶部搜索框

    2024-05-02 16:21:03
  • Python文件的操作处理详解

    2022-07-07 06:44:16
  • 在Python中使用matplotlib模块绘制数据图的示例

    2023-08-01 01:39:45
  • 分享整理的12条sql语句连同数据

    2012-07-11 16:14:59
  • 通过实例解析Python RPC实现原理及方法

    2022-06-19 00:50:38
  • Python闭包技巧介绍

    2022-05-30 19:17:04
  • python区块链简易版交易实现示例

    2023-09-28 15:20:10
  • MySQL中通过EXPLAIN如何分析SQL的执行计划详解

    2024-01-20 00:12:43
  • Python MongoDB 插入数据时已存在则不执行,不存在则插入的解决方法

    2022-11-16 20:48:41
  • Numpy中的repeat函数使用

    2023-03-06 19:16:38
  • Python数据结构与算法之算法分析详解

    2022-05-15 19:03:46
  • PL/SQL 类型格式转换

    2009-02-26 11:07:00
  • pycharm 激活码及使用方式的详细教程

    2023-05-16 15:11:15
  • SqlServer 表连接教程(问题解析)

    2024-01-27 00:35:55
  • 在Python的Django框架中调用方法和处理无效变量

    2023-06-12 06:22:19
  • 在VSCode中添加Python解释器并安装Python库的方法

    2022-04-21 19:13:53
  • vue-admin-element项目突然就起不来了的解决

    2023-07-02 16:37:58
  • asp之家 网络编程 m.aspxhome.com