当前位置: 首页 > news >正文

MySQL数据操作与查询- 连接查询

一、引入
1、为什么需要使用连接查询?
查询信息的来源如果来自多张表,则必须对这些表进行连接查询。
2、连接查询的分类
内连接和外连接。
二、内连接
1、概述
将两张表的记录组合在一起,产生一个新的结果。
(1)具体实现:将表1的每一行和表2的每一行进行比较,找出满足条件的组合。
(2)分类:交叉连接(笛卡尔积)、 相等连接 、自然连接。
2、交叉连接(笛卡尔积)
返回两张表所有的组合情况。
语法:
1 select 字段列表 from 1 , 2
【实例】 求出学生表和课程表的笛卡尔积。
【解答】
1 select * from student,course
【说明】
学生表有4条记录,课程表有6条记录,所有的组合方式共有4*6=24种。
3、 相等连接
返回满足条件的组合情况。
语法:
1 select 字段列表
2 from 表名 1
3 [ inner ] join 表名 2 on 表名 1. 字段名 1 = 表名 2. 字段名 2
4 where 条件表达式
【说明】
inner可以省略不写。
【实例】 查询得到学生的所有成绩。
【解答】
1 select *
2 from student
3 inner join score on student.student_id=score.student_id
【实例】 查询得到课程的所有成绩,显示的内容包括:课程号、课程名、成绩
【解答】
1 select c.course_id 课程号,
2 name as 课程名,
3 score 成绩
4 from course c ‐‐ 给course表取个别名c
5 join score sc on c.course_id=sc.course_id
4、自然连接
实现过程:将两张表的所有 名称相同的列 都将被比较,并且在结果集中把 重复的列去掉 , 结果集
中两张表中名称相同的列仅出现一次。而普通的内连接并不去掉重复的列。
语法:
1 select 字段列表 from 表名 1 natural join 表名 2
【实例】 使用自然连接将学生表和成绩表连接起来。
【解答】
1 select * from student natural join score
5、三表连接查询
语法:
1 select 字段列表
2 from 表名 1
3 join 表名 2 on 表名 1. 字段名 1 = 表名 2. 字段名 2
4 join 表名 3 on 表名 2. 字段名 3 = 表名 3. 字段名 4
5 where 条件表达式
【实例】 查询得到每位学生各门课程的成绩。显示内容包括:学号、姓名、课程名、成
绩。
【解答】
1 select s.student_id 学号,
2 s.name 姓名,
3 c.name 课程名,
4 score 成绩
5 from student s
6 join score sc on s.student_id=sc.student_id
7 join course c on c.course_id=sc.course_id
【实例】 查询得到修读了“HTML5网页设计”的所有学生信息,显示内容包括:学号、姓
名。
【解答】
1 select s.student_id 学号,
2 s.name 姓名
3 from student s
4 join score sc on s.student_id=sc.student_id
5 join course c on c.course_id=sc.course_id
6 where c.name='HTML5网页设计'
三、外连接
在内连接查询中,只有满足连接条件的记录才能出现在查询结果中。 如果希望不满足连接条件
的记录也在查询结果中出现,这时需要使用 外连接 查询。
分类:左连接和右连接。
1、左外连接(left join)
结果集包括 左表的所有记录 和右表中满足连接条件的记录,结果集中那些不符合连接条件的来源于
右表的列值为 null。
1 select 字段列表
2 from 表名 1
3 left join 表名 2 on 表名 1. 字段名 1 = 表名 2. 字段名 2
【实例】 使用“左外连接”查询得到学生的所有成绩。
【解答】
1 select *
2 from student s
3 left join score sc on s.student_id=sc.student_id
2、右外连接(right join)
结果集包括 右表的所有记录 和左表中满足连接条件的记录,结果集中那些不符合连接条件的来源于
左表的列值为 null。
1 select 字段列表
2 from 表名 1
3 right join 表名 2 on 表名 1. 字段名 1 = 表名 2. 字段名 2
【实例】 使用“右外连接”查询得到课程的所有成绩。
【解答】
1 select *
2 from score sc
3 right join course c on c.course_id=sc.course_id

 

相关文章:

  • 算法体系-21 第二十一 暴力递归到动态规划(三)
  • 专业学习|博弈论-博弈论概述
  • .NET MAUI Sqlite数据库操作(二)异步初始化方法
  • Mysql的增、删、查、改
  • 使用python绘制三维散点图
  • RK平台Android单独编译内核
  • 【打鼹鼠game】
  • 深度学习Day-20:DenseNet算法实战 乳腺癌识别
  • mysql在linux下安装与配置
  • AI 定位!GeoSpyAI上传一张图片分析具体位置 不可思议! ! !
  • 做外贸开发客户使用外贸软件有必要吗?
  • Ionic 创建 APP
  • 【Ubuntu20.04】安装XRDP远程桌面服务
  • scrapy爬取豆瓣书单存入MongoDB数据库
  • 算法:位运算题目练习
  • [nginx文档翻译系列] 控制nginx
  • 【140天】尚学堂高淇Java300集视频精华笔记(86-87)
  • Docker: 容器互访的三种方式
  • hadoop集群管理系统搭建规划说明
  • HTTP中的ETag在移动客户端的应用
  • iOS小技巧之UIImagePickerController实现头像选择
  • Linux gpio口使用方法
  • MySQL主从复制读写分离及奇怪的问题
  • PHP CLI应用的调试原理
  • Terraform入门 - 3. 变更基础设施
  • Vultr 教程目录
  • 给自己的博客网站加上酷炫的初音未来音乐游戏?
  • 精彩代码 vue.js
  • 力扣(LeetCode)21
  • 【运维趟坑回忆录】vpc迁移 - 吃螃蟹之路
  • hi-nginx-1.3.4编译安装
  • ​云纳万物 · 数皆有言|2021 七牛云战略发布会启幕,邀您赴约
  • #Linux(make工具和makefile文件以及makefile语法)
  • $.each()与$(selector).each()
  • $.type 怎么精确判断对象类型的 --(源码学习2)
  • $refs 、$nextTic、动态组件、name的使用
  • (1)bark-ml
  • (M)unity2D敌人的创建、人物属性设置,遇敌掉血
  • (TOJ2804)Even? Odd?
  • (十二)devops持续集成开发——jenkins的全局工具配置之sonar qube环境安装及配置
  • (四)图像的%2线性拉伸
  • (一)Neo4j下载安装以及初次使用
  • (一)插入排序
  • (转)IIS6 ASP 0251超过响应缓冲区限制错误的解决方法
  • (转)LINQ之路
  • (转)甲方乙方——赵民谈找工作
  • ***微信公众号支付+微信H5支付+微信扫码支付+小程序支付+APP微信支付解决方案总结...
  • ./include/caffe/util/cudnn.hpp: In function ‘const char* cudnnGetErrorString(cudnnStatus_t)’: ./incl
  • .java 9 找不到符号_java找不到符号
  • .mysql secret在哪_MYSQL基本操作(上)
  • .Net CF下精确的计时器
  • .NET Core 实现 Redis 批量查询指定格式的Key
  • .net 程序发生了一个不可捕获的异常
  • .net6+aspose.words导出word并转pdf
  • .NET程序员迈向卓越的必由之路