首页 > 数据库 >SQL中的各种连接介绍

SQL中的各种连接介绍

时间:2023-07-14 21:47:04浏览次数:36  
标签:join 连接 介绍 class stu SQL id select

准备工作

创建 表stu 和 表class

create table IF NOT EXISTS stu (
id bigint unsigned AUTO_INCREMENT comment '学号',
name varchar(50) not null comment '姓名',
age int unsigned not null comment '年龄',
class_id bigint unsigned  not null comment '班级号',
PRIMARY KEY (id)
)ENGINE=InnoDB DEFAULT CHARSET=utf8 comment '学生表';


create table IF NOT EXISTS class(
class_id bigint unsigned comment '班级号',
master varchar(50) not null comment '班主任',
number int unsigned not null comment '学生人数',
type varchar(20) not null comment '班级类型:文科、理科',
PRIMARY KEY (id)
)ENGINE=InnoDB DEFAULT CHARSET=utf8 comment '班级表';

插入内容

INSERT INTO stu(id, name, age, class_id)
values
(1, '李晓芳', 24, '201302'),
(2, '黄景瑜', 25, '201301'),
(3, '郭麒麟', 25, '201304'),
(4, '范丞丞', 25, '201307');

INSERT INTO class(class_id, master, number, type)
values
('201301', '付涛', 64, '理科'),
('201302', '李卫东', 72, '理科'),
('201304', '谭勇', 69, '文科'),
('201306', '刘淑兰', 65, '理科');

两张表如下:





1、内连接(等值连接),inner join on


(1)有on条件

select * from stu inner join class on stu.class_id = class.class_id;

内连接是左连接和右连接的交集。

(2)无on条件

相当于笛卡尔积

select * from stu inner join class;
或者
select * from stu, class;





2、全连接(全外连接、外连接),full join on


(1)有on条件

全连接是左连接和右连接的并集。

select * from stu full join class on stu.class_id = class.class_id; (MySQL不支持该写法,可以使用下面的union写法)
或者
select * from stu left join class on stu.class_id = class.class_id
union
select * from stu right join class on stu.class_id = class.class_id;

(2)无on连接

无on的全连接是笛卡尔积

select * from stu full join class;





3、左连接(左外连接)


select * from stu left join class on stu.class_id = class.class_id;





4、右连接(右外连接)

select * from stu right join class on stu.class_id = class.class_id;





5、等值连接

过滤条件为"="的连接

select * from stu, class where stu.class_id = class.class_id;





6、自然连接

自然连接是一种特殊的等值连接,它要求两个关系进行比较的分量必须是同名的属性组,并且在结果集中将重复属性列去掉。

自然连接自动带着比较的条件,不需要再加on条件。

select * from stu natural join class;





7、叉连接(交叉连接、笛卡尔积)


大概,MySQL实现的不带on条件的连接都等效于笛卡尔积。

但这些连接关系都来源于数学中的概念,从数学推导和实际应用来说,不带on条件的内连接、全连接没有意义。

上文写的不带on的内连接、外连接,只是说MySQL中实现了这回事,并不是有意义的分类,了解一下就行。

select * from stu cross join class;
或者
select * from stu, class;
或者
select * from stu join class;
或者
select * from stu inner join class;

参考

https://www.cnblogs.com/zeroingToOne/p/9575203.html

https://blog.csdn.net/qq_44625080/article/details/104063344

https://blog.csdn.net/u014454538/article/details/108948235

标签:join,连接,介绍,class,stu,SQL,id,select
From: https://www.cnblogs.com/lylhome/p/17555038.html

相关文章

  • MySQL基础
    1.数据库登录  mysql-uroot-p  mysql-uroot-pmysql  mysql-uroot-p-h192.168.213.200  备份  mysqldump-uroot-p--all-dtabases>all_databasees_20210305.sql      //备份所有库  mysqldump-uroot-p--databasesmysql>mysql_20......
  • Xshell连接Fedora虚拟机
    先安装Xshell7,然后新建会话,远程连接虚拟机内的Fedora。然后会被拒绝:Couldnotconnecttoxxx:Connectionfailed.照着这篇文章的做法,$sudovim/etc/ssh/sshd_config找到#Authentication:一项,改成LoginGraceTime120PermitRootLoginyesStrictModesyes然后......
  • SQL注入问题、视图、触发器、事务、存储过程、函数、流程控制、索引、测试索引
    SQL注入问题连接MySQL服务器conn=pymysql.connect(host=‘127.0.0.1’port=3306user=‘root’password='1234'......
  • mysql数据库3 表关系/多表查询等
    表关系(外键)#外键的前戏建立一张表:emp"""1.表不清晰,现在到底是员工表还是部门表2.字段需要重复的写,浪费资源3.兼容性很差,牵一发而动全身(这个问题是最不能容忍的)"""#以上问题该如何解决呢?我们的思路是,把一张表拆分成两张表拆成emp和depart部门表......
  • Mysql刪除binlog的方法
    参考文献:Mysql刪除binlog的方法(https://blog.csdn.net/weixin_42324463/article/details/126801856)在mysql的data目录下的binlog文件会随着时间推移越来越大。binlog文件不是直接rm就能解决的。即使rm删除了,但是mysql-bin.index档案中,还是有记录。正确步骤:1.linux进入mysqls......
  • SQL部分核心语法语句
    语法 关键字前加 --即为注释运算符(配合WHERE使用)·比较运算符:=等于,!=或<>不等于,>大于,>=大于等于,BETWEEN两值之间,IN一组值里,LIKE相似匹配 ·逻辑运算符:AND与,OR或,NOT或!非字符两边要加单引号('  ') 创建 (字母大小写均可,用大写作区分关键字与一般......
  • SQL的约束条件
    约束条件就是在数据类型的基础上再添加限制条件1.unsigned:去除符号eg:createtable表名(字段名数据类型unsigned)2.zerofill:零填充例如数据类型中字符串的char()为定长,当存入的不足括号中位数时,如果约束条件有zerofill,就用零来填充而不是空格3.notnull:非空#在my......
  • windows下的nginx目录介绍
    windows下的nginx目录介绍目录结构windows下的nginx目录结构如图所示:日志文件logs目录下存储的是日志文件。access.log文件内容类似如下:127.0.0.1--[18/May/2023:16:44:04+0800]"POST/javaservice/client/service/client/connectHTTP/1.1"404431"-""Post......
  • 学科知识图谱学习平台项目 :技术栈Java、Neo4j、MySQL等超详细教学
    学科知识图谱学习平台项目:技术栈Java、Neo4j、MySQL等超详细教学0.效果展示1.安装教程安装JavaSDK11,下载前需要登录Oracle账号,下载链接,安装教程,测试是否能在命令行工具调用javajava--versionjava17.0.12021-10-19LTSJava(TM)SERuntimeEnvironment(build......
  • windows下用mysqldump导出数据库中文乱码的解决方案
    解决方案是从这篇文章得到的启发:http://www.pcxitongcheng.com/server/anz/2022-12-06/33622.html先去mysql里确认字符编码是utf8:showvariableslike'%char%'主要确认character_set_results。先创建好sql文件,比如d:\backup.sql然后备份的时候用--result-file=指定刚创建的文......