数据库多表链接的查询方式

本文详细讲解了SQL中的非等值连接(笛卡尔积)和等值连接(包括内连接、左外连接、右外连接和全外连接)在MySQL数据库中的应用实例,通过实例演示如何利用Navicat工具进行操作,提升数据查询效率和理解表间关系。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

提示:本期用到SQL语句,MySQL数据库,Navicat数据库管理工具

 

目录

前言

一、需要用到的表

①学生表(student):

②课程表(course):

③班级表(class):

二、非等值连接

三、等值连接

  1.等值连接查询方法

  2.内连接(inner join)

  3.左外连接查询(left join)

  4.右外连接查询(right join)

  5.全外连接查询(union)


前言

首先,我们要知道数据库表为什么是多张表,因为设计成一张表会造成数据冗余,造成数据库空间浪费,然而我们有时候需要多张表的数据整合并且查询出来,这时候就需要通过表之间的主外键关系关联在一起进行查询。

本文将根据表的连接方式划分,非等值连接,等值连接(内连接,左外连接(左连接),右外连接(右连接),全外连接)两大部分进行讲解。

一、需要用到的表

①学生表(student):

CREATE TABLE `student` (
  `Sid` int(11) NOT NULL AUTO_INCREMENT,
  `Sname` varchar(10) DEFAULT NULL,
  `birthday` datetime DEFAULT NULL,
  `Ssex` varchar(10) DEFAULT NULL,
  `classid` int(11) DEFAULT NULL,
  PRIMARY KEY (`Sid`)
)

  

②课程表(course):

CREATE TABLE `course` (
  `Cid` int(11) NOT NULL AUTO_INCREMENT,
  `Cname` varchar(10) DEFAULT NULL,
  `Tid` varchar(10) DEFAULT NULL,
  PRIMARY KEY (`Cid`)
) 

③班级表(class):

CREATE TABLE `class` (
  `classid` int(11) NOT NULL AUTO_INCREMENT,
  `classname` varchar(20) DEFAULT NULL,
  PRIMARY KEY (`classid`)
) 

  

二、非等值连接

        定义:

        非等值连接即是笛卡尔积,是指两个关系中所有元素的任意组合。一般情况下,非等值查询是没有什么作用的,因为如果数据量过大,笛卡尔积形成的表会非常占用空间。

 补充:笛卡尔积又称直积,表示XY,比如A表中的数据有m行,b表中的数据有n行,那么A和B做笛卡尔积,结果为mn行。

        语法:

SELECT * from 表1 CROSS JOIN 表2;

        举例:(学生表和课程表) 

SELECT * from student CROSS JOIN course;

         例如第一条就会展示赵雷的所有课程。

三、等值连接

  1.等值连接查询方法

        定义:

                在连接条件中使用等于号运算符比较被连接的字段的值,其生成的虚拟表会展示被连接表的所有列,包括重复的列。 

        语法:        

select * from 表1,表2 where 表1.字段=表2.字段2;

        举例: (学生表和班级表)

SELECT * FROM student,class WHERE student.classid=class.classid;

  2.内连接(inner join)

        语法:

select * from 表1 inner join 表2 on 条件;

 

  举例: (学生表和班级表)

select * from student inner join class on student.classid=class.classid;

​​​​​​​

  3.左外连接查询(left join)

        语法: 

select * from 表1 left join 表2 on 表1.字段=表2.字段;

  举例: (学生表和班级表)

 会以学生表为主表进行查询,张三没有班级也会显示出来。

select * from student LEFT join class on student.classid=class.classid;

 ​​​​​​​​​​​​​​

  4.右外连接查询(right join)

        语法: 

select * from 表1 right join 表2 on 表1.字段=表2.字段;

  举例: (学生表和班级表)

 会以班级表为主表显示出来,如图四班没有人也会显示。

select * from student right join class on student.classid=class.classid;

  5.全外连接查询(union)

        语法:  

select * from 表1 left join 表2 on 表1.字段=表2.字段
union
select * from 表1 right join 表2 on 表1.字段=表2.字段;

 

 举例: (学生表和班级

select * from student LEFT join class on student.classid=class.classid
UNION
select * from student right join class on student.classid=class.classid;

 

小小分享,希望大家能有所收获!!!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

飘飘~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值