linq 连接mysql_数据库和linq中的 join(连接)操作

本文详细介绍了SQL中的各种连接操作,包括内连接、左连接、右连接、全连接以及它们的变种,并通过实例展示了如何使用LINQ进行等效的操作。文章还给出了两个经典SQL问题的解决方法,并提供了LINQ的实现代码,帮助理解不同连接方式的用途和效果。
摘要由CSDN通过智能技术生成

sql中的连接

sql中的表连接有inner join,left join(left outer join),right join(right outer join),full join(full outer join),cross join

在此基础上我们能扩展出 left excluding join,right excluding join,full outer excluding join

注:left join是left outer join 的简写,即左连接和左外连接是一样的

首先定义两个比较经典的表

学生信息表和选课表

student

studentIdname    sex

1 小明 男

2 小黄 男

3 小红 女

4 小杨 男

course

studentIdcourseName

1 数学

1 语文

1 英语

2 数学

2 语文

2 英语

3 数学

3 语文

3 英语

5 数学

5 语文

5 英语

这两张表其实并不规范,course的studentId其实是一个外键,对应student的studentId,所以course的studentId不应该有5,不过为了测试方便,暂且这么写

内连接(inner join)

select s.* ,c.courseName

from student s

inner join course c

on s.studentId=c.studentId

结果

studentIdname     sexcourseName

1 小明 男数学

1 小明 男语文

1 小明 男英语

2 小黄 男数学

2 小黄 男语文

2 小黄 男英语

3 小红 女数学

3 小红 女语文

3 小红 女英语

左连接(left join)

select s.* ,c.courseName

from student s

left join course c

on s.studentId=c.studentId

结果

studentIdname sexcourseName

1 小明 男数学

1 小明 男语文

1 小明 男英语

2 小黄 男数学

2 小黄 男语文

2 小黄 男英语

3 小红 女数学

3 小红 女语文

3 小红 女英语

4 小杨 男NULL

右连接

select s.* ,c.courseName

from student s

right join course c

on s.studentId=c.studentId

结果

studentId name     sex  courseName1小明 男   数学1小明 男   语文1小明 男    英语2小黄 男   数学2小黄 男   语文2小黄 男   英语3小红 女    数学3小红 女   语文3小红 女   英语

NULL    NULL      NULL   数学

NULL    NULL      NULL  语文

NULL    NULL      NULL  英语

全连接

select s.* ,c.courseName

from student s

full join course c

on s.studentId=c.studentId

结果

studentId name      sex courseName1小明 男 数学1小明 男 语文1小明 男 英语2小黄 男 数学2小黄 男 语文2小黄 男 英语3小红 女 数学3小红 女 语文3小红 女 英语4小杨 男 NULL

NULL     NULL     NULL 数学

NULL     NULL     NULL 语文

NULL     NULL     NULL 英语

左不包含连接(left excluding join)

select s.*,c.courseNamefromstudent s

left join course c

on s.studentId=c.studentIdwhere c.studentId is null

结果

studentIdnamesexcourseName

4 小杨 男NULL

右不包含连接(right excluding join)

select s.* ,c.courseName

from student s

right join course c

on s.studentId=c.studentId

where s.studentId is null

结果

studentIdnamesexcourseName

NULL     NULLNULL数学

NULL     NULLNULL语文

NULL     NULLNULL英语

全不包含连接(Full outer excluding join)

select s.* ,c.courseName

from student s

full join course c

on s.studentId=c.studentId

where s.studentId is null or c.studentId is null

结果

studentIdnamesexcourseName

4 小杨 男NULL

NULL     NULLNULL数学

NULL     NULLNULL语文

NULL     NULLNULL英语

笛卡儿积(cross join)

select s.* ,c.courseName

from student s

cross join course c

结果

8f900a89c6347c561fdf2122f13be562.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值