首页 > 数据库 >sql中的表的关联有哪几种类型?

sql中的表的关联有哪几种类型?

时间:2025-01-13 20:33:03浏览次数:3  
标签:s1 t2 t1 score 哪几种 sql test 关联 id

sql中的join示例:

测试数据准备:
create table test_student(
s_id string,
s_name string,
s_age int
);

insert into test_student values ('s1','张三',15); 
insert into test_student values ('s2','李四',16); 
insert into test_student values ('s3','王五',17); 
select * from test_student;
+--------------------+----------------------+---------------------+
| test_student.s_id  | test_student.s_name  | test_student.s_age  |
+--------------------+----------------------+---------------------+
| s1                 | 张三                 | 15                  |
| s2                 | 李四                 | 16                  |
| s3                 | 王五                 | 17                  |
+--------------------+----------------------+---------------------+
3 rows selected (0.406 seconds)

create table test_score(
s_id string,
s_core int
);

insert into test_score values ('s1',70); 
insert into test_score values ('s2',71); 
insert into test_score values ('s4',72); 
insert into test_score values ('s1',80); 
select * from test_score;
+------------------+--------------------+
| test_score.s_id  | test_score.s_core  |
+------------------+--------------------+
| s1               | 70                 |
| s2               | 71                 |
| s4               | 72                 |
| s1               | 80                 |
+------------------+--------------------+
4 rows selected (0.357 seconds)

1. left join (返回左表所有记录)
select 
 t1.s_id
,t1.s_name
,t1.s_age
,t2.s_core
from test_student t1 
left join test_score t2 
on t1.s_id=t2.s_id;
+----------+------------+-----------+------------+
| t1.s_id  | t1.s_name  | t1.s_age  | t2.s_core  |
+----------+------------+-----------+------------+
| s1       | 张三       | 15        | 70         |
| s1       | 张三       | 15        | 80         |
| s2       | 李四       | 16        | 71         |
| s3       | 王五       | 17        | NULL       |
+----------+------------+-----------+------------+
4 rows selected (32.111 seconds)


2. inner join (返回左表与右表关联上的记录)
select 
 t1.s_id
,t1.s_name
,t1.s_age
,t2.s_core
from test_student t1 
inner join test_score t2 
on t1.s_id=t2.s_id;

+----------+------------+-----------+------------+
| t1.s_id  | t1.s_name  | t1.s_age  | t2.s_core  |
+----------+------------+-----------+------------+
| s1       | 张三       | 15        | 70         |
| s2       | 李四       | 16        | 71         |
| s1       | 张三       | 15        | 80         |
+----------+------------+-----------+------------+
3 rows selected (33.368 seconds)

3. full join (返回左表与右表的所有记录)
select 
 t1.s_id
,t1.s_name
,t1.s_age
,t2.s_core
from test_student t1 
full join test_score t2 
on t1.s_id=t2.s_id;
+----------+------------+-----------+------------+
| t1.s_id  | t1.s_name  | t1.s_age  | t2.s_core  |
+----------+------------+-----------+------------+
| s1       | 张三       | 15        | 80         |
| s1       | 张三       | 15        | 70         |
| s2       | 李四       | 16        | 71         |
| s3       | 王五       | 17        | NULL       |
| NULL     | NULL       | NULL      | 72         |
+----------+------------+-----------+------------+
5 rows selected (34.969 seconds)

4. left semi join 
①select后面只能跟左表的字段
②右表只有joinkey参与计算
③等同于in或exists语句
select 
 t1.s_id
,t1.s_name
,t1.s_age
from test_student t1 
left semi join test_score t2 
on t1.s_id=t2.s_id;
+----------+------------+-----------+
| t1.s_id  | t1.s_name  | t1.s_age  |
+----------+------------+-----------+
| s1       | 张三       | 15        |
| s2       | 李四       | 16        |
+----------+------------+-----------+
2 rows selected (33.405 seconds)

select 
 t1.s_id
,t1.s_name
,t1.s_age
from test_student t1 
where t1.s_id in (select s_id from test_score t2);
+----------+------------+-----------+
| t1.s_id  | t1.s_name  | t1.s_age  |
+----------+------------+-----------+
| s1       | 张三       | 15        |
| s2       | 李四       | 16        |
+----------+------------+-----------+
2 rows selected (50.038 seconds)

select 
 t1.s_id
,t1.s_name
,t1.s_age
from test_student t1 
where exists (select * from test_score t2 where t1.s_id=t2.s_id);
+----------+------------+-----------+
| t1.s_id  | t1.s_name  | t1.s_age  |
+----------+------------+-----------+
| s1       | 张三       | 15        |
| s2       | 李四       | 16        |
+----------+------------+-----------+
2 rows selected (34.306 seconds)

标签:s1,t2,t1,score,哪几种,sql,test,关联,id
From: https://blog.csdn.net/weixin_45547818/article/details/145122932

相关文章

  • java项目之教师工作量管理系统(ssm+mybatis+mysql)
    风定落花生,歌声逐流水,大家好我是风歌,混迹在java圈的码农一枚。今天要和大家聊的是一款基于ssm的教师工作量管理系统。项目源码以及部署相关请联系风歌,文末附上联系信息。项目简介:教师工作量管理系统的主要使用者管理员可以管理教师,可以对教师信息修改删除以及查询操作;可以查......
  • mysql、oracle、sqlserver的区别
    一、保存数据的持久性:        MySQL:是在数据库更新或者重启,则会丢失数据。                Oracle:把提交的sql操作线写入了在线联机日志文件中,保持到了磁盘上,可以随时恢复。                SqlServer:2014之后,也拥有了完全持久和延......
  • MySQL中的四种表联结
    目录1、联结、关系表(1)关系表(2)为什么使用联结2、如何创建联结(1)笛卡尔积(叉联结)--用逗号分隔(2)where子句的重要性(3)内联结--INNERJOIN (4)联结多个表3、使用表别名(对比列别名)4、自联结、自然联结、外联结(1)自联结:self-join(2)自然联结:naturaljoin(3)外联结:leftjoin、righ......
  • Oracle SQL每日一问之ORA-01723:zero-length columns are not allowed
    我:CREATETABLETABLE_1PARALLEL8ASSELECT/*+parallel(8)*/t1.emp_no,NULLemp_nameFROMtemp1t1;[AI机器人bot:]在你的SQL语句中,错误"zero-lengthcolumnsarenotallowed"可能是由于在创建表时没有为`NULLclct_flag`指定数据类型。即使在`CREATETAB......
  • JAVA开源毕业设计 共享汽车管理系统 Vue.JS+SpringBoot+MySQL
    本文项目编号T125,文末自助获取源码\color{red}{T125,文末自助获取源码}......
  • JAVA开源毕业设计 计算机课程管理平台 Vue.JS+SpringBoot+MySQL
    本文项目编号T126,文末自助获取源码\color{red}{T126,文末自助获取源码}......
  • Hive SQL必刷练习题:复购率问题
    是说这个数据表中,找到最后一天,也就是今天的日期,max(date)over()Stoday【借助开窗函数】截至最后一天位置,也就是“今天“,表中的最新的一天去看90天内“某商品复购率=近90天内购买它至少两次的人数÷购买它的总人数”首先分析两个度量值,统计粒度是不一样的近90天内......
  • [免费]SpringBoot+Vue新能源汽车充电桩管理系统【论文+源码+SQL脚本】
    大家好,我是java1234_小锋老师,看到一个不错的SpringBoot+Vue新能源汽车充电桩管理系统,分享下哈。项目视频演示【免费】SpringBoot+Vue新能源汽车充电桩管理系统Java毕业设计_哔哩哔哩_bilibili项目介绍随着信息化时代的到来,管理系统都趋向于智能化、系统化,车辆充电桩管理......
  • Mysql身份认证过程
    背景最近有一些hersql的用户希望能支持mysql的caching_sha2_password认证方式,caching_sha2_password与常用的mysql_native_password认证过程差异还是比较大的,因此抽空研究了一下caching_sha2_password身份认证过程,并为hersql支持了caching_sha2_password的能力hersql是我开源的......
  • SQL函数大集锦
    SQL提供了很多不同类型的函数,用于在查询中处理和操作数据。SQL函数通常可以分为以下几类:聚合函数(AggregateFunctions)字符串函数(StringFunctions)数值函数(NumericFunctions)日期和时间函数(DateandTimeFunctions)条件函数(ConditionalFunctions)转换函数(ConversionFunction......