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

SQL的各种连接

时间:2023-10-08 17:57:00浏览次数:42  
标签:各种 join 李四 students 连接 subjects SQL null id

1 create table students (c_id int, c_name varchar(20));
2 create table subjects (c_id int, c_subject varchar(20));
3 
4 insert into students values (1,'张三'),(2,'李四'),(3,'王五');  -- orcle不支持这种批量插入的写法
5 insert into subjects values (1,'语文'),(2,'数学'),(null,'英语');
students
c_id c_name
1 张三
2 李四
3 王五
subjects
c_id c_subject
1 语文
2 数学
null 英语

 

 

 

 

 

  内连接(inner join):返回两表中on条件共同匹配的行

1 select * from students s join subjects t on s.c_id = t.c_id;
c_id c_name c_id c_subject
1 张三 1 语文
2 李四 2 数学

 

 

 

  左链接(left join 或 left outer join):返回左表的所有行以及右表在on条件匹配到的数据,匹配不上时右表显示空值

1 select * from students s left join subjects t on s.c_id = t.c_id;
c_id c_name c_id c_subject
1 张三 1 语文
2 李四 2 数学
3 王五 null null

 

 

 

 

  右链接(right join 或 right outer join):返回右表中所有行以及左表在on条件下匹配到的数据,匹配不上时左表显示空值

1 select * from students s right join subjects t on s.c_id = t.c_id;
c_id c_name c_id c_subject
1 张三 1 语文
2 李四 2 数学
null null null 英语

 

 

 

 

  全连接(full join 或 full outer join):完整外部连接左表和右表中的所有行,匹配不上时另一表显示空值

1 -- oracle
2 select * from students s full join subjects t on s.c_id = t.c_id; 
1 -- mysql,因myql不支持完全连接,直接使用full join会报语法错误,可以通过union将左链接查询和右链接查询的结果合并起来从而得到全连接的效果
2 select * from students s left join subjects t on s.c_id = t.c_id
3 union
4 select * from students s right join subjects t on s.c_id = t.c_id;
c_id c_name c_id c_subject
1 张三 1 语文
2 李四 2 数学
null null null 英语
3 王五 null null

 

 

 

 

 

  交叉连接(cross join):左表的每一行分别和右表中的每一行组合,也叫做笛卡尔积

1 select * from students s cross join subjects t;

 

c_id c_name c_id c_subject
1 张三 1 语文
2 李四 1 语文
3 王五 1 语文
1 张三 2 数学
2 李四 2 数学
3 王五 2 数学
1 张三 null 英语
2 李四 null 英语
3 王五 null 英语

标签:各种,join,李四,students,连接,subjects,SQL,null,id
From: https://www.cnblogs.com/yousuosiyss/p/17749262.html

相关文章

  • mysql8.x root 密码忘记了如何重置
    网上也有很多关于重置密码的,由于版本的问题,很多无法正常重置密码。因此在这里将重置密码的方法进行整理下,方便以后参考:一、免密登录mysql1、停止mysql服务cmd窗口输入netstopmysql 2、设置免密登录mysqld--console--skip-grant-tables--shared-memory 3、另开一个cm......
  • java中的mysql优化
    Java中的MySQL优化有许多方面可以考虑,以下是一些常见的优化技巧:使用索引:为频繁进行查询的列创建索引,可以大大提高查询效率。但是需要注意不要过度索引,否则可能会降低写操作的性能。优化SQL查询语句:合理编写SQL语句,避免不必要的复杂查询。可以使用EXPLAIN语句来分析查询执行计划,找出......
  • DataFrame通过JDBC读写数据读写到数据mysql
    #coding:utf8importtimefrompyspark.sqlimportSparkSessionfrompyspark.sql.typesimportStructType,StringType,IntegerTypeimportpandasaspdfrompyspark.sqlimportfunctionsasFif__name__=='__main__':#0.构建执行环境入口对象SparkSes......
  • SQLSugar中Includes和Mapper的区别
    在SQLSugar中,Include和Mapper确实在处理过滤器方面有一些不同的行为。Include方法:当你使用Include方法来加载关联实体时,SQLSugar会忽略过滤器,不会将过滤器应用于加载的关联实体。这意味着无论你是否定义了过滤器,使用Include方法加载的关联实体都会被加载,而不受过滤器的影响。......
  • Mysql 8.0 Navicat连接Mysql报错Authentication plugin ‘caching_sha2_password‘ ca
    1、终端登陆MySQL$mysql-uroot-ppassword#登入mysql2、修改账户密码加密规则并更新用户密码ALTERUSER'root'@'localhost'IDENTIFIEDBY'123456'PASSWORDEXPIRENEVER;#修改加密规则ALTERUSER'root'@'localhost'IDENTIFIEDWITHmysql_nat......
  • 记一次Smanga SQL注入漏洞挖掘(CVE-2023-36076)
    记录一次本人CVE漏洞挖掘的过程,此漏洞已被分配编号:CVE-2023-36076引言水一篇文章,本文介绍了一次对某开源项目基于时间盲注的SQL注入漏洞的挖掘,此开源项目是一个流媒体管理平台,注入点为/php/history/add.php接口中的mediaId参数,指纹信息显示数据库采用Mysql。漏洞挖掘正常......
  • MySQL储存引擎
    目录MySQL储存引擎什么是储存引擎存储引擎的类型查看表的存储引擎(查全部的表)innodb和myisam的区别物理区别逻辑区别存储引擎如何查看存储引擎设置修改已经创建的表的存储引擎企业项目案例InnoDB特性——表空间共享表空间共享表空间存储:5.7共享表,临时表共享表空间切割企业案例Inn......
  • SQL索引
    目录MySQL索引及执行计划什么是索引?索引的排序方式BTtreeB+TreeB*Tree索引管理索引分类索引的增删查表数据准备主键索引primary唯一键索引unique普通索引前缀索引联合索引网站访问速度慢,如何排查,如何解决?使用explain分析SQL语句Type:全量扫描index:全索引扫描range:范围扫描ref:非唯一......
  • MySQL日志管理
    目录MySQL日志管理日志简介错误日志一般查询日志二进制日志binlogbinlog的工作模式statement语句模式row行级模式mixed混合模式查看binlog查看binlog内容和导出事件介绍使用binlog恢复数据案例模拟数据模拟数据故障恢复数据binlog的刷新和删除binlog的刷新删除binlogMySQL慢查......
  • MySQL数据备份
    目录MySQL数据备份binlog存在问题binlog作用为什么要备份备份类型备份方式备份策略(每天一次全备,每小时一次增备)MySQL逻辑备份工具mysqldump所有库备份备份单个库备份时刷新binlog打点备份参数快照备份实用扩展选项额外扩展选项(很好用的)完整备份语句mysqldump的恢复(binlog日志临时......