inner join using

http://blog.csdn.net/taylor_tao/article/details/7068511

Inner Join 内连接
将两个表中存在连接关系的字段,组成的记录集,叫做内连接。
内连接等价于


mysql> select table1.id as id,book,author from table1, table2 where table1.id=table2.id;
+------+------+--------+
| id | book | author |
+------+------+--------+
| 2 | c++ | zhang |
| 3 | php | wang |
+------+------+--------+
2 rows in set (0.00 sec)
mysql> select * from table1 inner join table2 using (id);
+------+------+--------+
| id | book | author |
+------+------+--------+
| 2 | c++ | zhang |
| 3 | php | wang |
+------+------+--------+
2 rows in set (0.00 sec)



2、Using子句
Using子句可以使用On子句重写。但是使用Select * 查询出的结果有差别。以下两句话是等价的:
但是下面两个有些许不同,使用on时候,重复的部分会被输出两次。


mysql> select * from table1 join table2 using (id);
+------+------+--------+
| id | book | author |
+------+------+--------+
| 2 | c++ | zhang |
| 3 | php | wang |
+------+------+--------+
2 rows in set (0.00 sec)
mysql> select * from table1 join table2 on table1.id=table2.id;
+------+------+------+--------+
| id | book | id | author |
+------+------+------+--------+
| 2 | c++ | 2 | zhang |
| 3 | php | 3 | wang |
+------+------+------+--------+
2 rows in set (0.00 sec)

-------------------------------------------------
Join操作基本分为3大类:外连接(细分为:左连接、右连接、全连接)、自然连接、内连接

Join操作的共性:第一步均为将所有参与操作的表进行了一个笛卡儿积,然后才依据各连接

条件进行记录的筛选

SQL> select * from employees;

NAME
DEPARTMENT_ID
SALARY

Getz
10
3000

Davis
20
1500

King
20
2200

Davis
30
5000

Kochhar

5000


SQL> select * from departments;

DEPARTMENT_ID
DEPARTMENT_NAME

10
Sales

20
Marketing

30
Accounts

40
Administration


------------------Left outer join----------------

SQL> select * from employees e left outer join departments d on e.department_id=d.department_id;



附加:Oracle9i以前版本中左连接的写法如下:

SQL> select * from employees e ,departments d on e.department_id=d.department_id(+);

---------------------------Right outer join------------------------

SQL> select * from employees right outer join departments using(department_id);



附加:Oracle9i以前版本中左连接的写法如下:

SQL> select * from employees e ,departments d where e.department_id(+)=d.department_id;

--------------------------------Full join----------------------------

SQL> select * from employees full join departments using(department_id);



说明:[1]外连接必须使用on或using子句提供相应的连接条件

[2]不能为using子句中所列举的列指定表别名,即使在group by和select子句中也是如此

[3]外连接规则:左连右补,右连左补,全连左右合并

如:对表departments表进行右连接时,在两表完成笛卡儿积后再依据连接条件 using(department_id)来筛选两表中department_id值相同的记录,但对DEPARTMENT_ID=40

employees表中没有与之匹配的记录,按常理此DEPARTMENT_ID=40所对应的记录将被抛

弃,但就是为了保全连接表(departments表)中的所有记录就必须在employees表中虚拟出

一条与之匹配的记录来保全连接表的所有记录,当然这条虚拟的记录显示时值全为null





--------------------------Natural join-----------------------------

SQL> select * from employees natural join departments;



说明:自然连接是通过对参与表关系中所有同名的属性对取等(即相等比较)来完成的,故无须自己添加连接条件

与外连接的区别在于对于无法匹配的记录外连接会虚拟一条与之匹配的记录来保全连接表中的所有记录,但自然连接不会





----------------------Inner join----------------

SQL> select * from employees inner join departments using(department_id);



说明:内连接与自然连接基本相同,不同之处在于自然连接只能是同名属性的等值连接,而内连接可以使用using或on子句来指定连接条件,连接条件中指出某两字段相等(可以不同名)。




-------------------------------------------------------------------------------------------------------------------

连接的概念:

连接分为条件连接、等值连接和自然连接三种。

1、条件连接就是在多个表的笛卡尔积中选取满足条件的行的连接,例如 select * from A,B where A.a > A.b 之类的有条件的查询。

2、等值连接就是特殊的条件连接,当条件为某字段=某字段时,即为等值连接。如SELECT ename,sal,dname FROM emp,dept WHERE emp.deptno=dept.deptno;

3、自然连接是一种特殊的等值连接,他要求多个表有相同的属性字段,然后条件为相同的属性字段值相等,最后再将表中重复的属性字段去掉,即为自然连接。如A中a,b,c字段,B中有c,d字段,则select * from A natural join B 相当于 select A.a,A.b,A.c,B.d from A.c = B.c 。



内连接与等值连接的区别:

内连接:两个表(或连接)中某一数据项相等的连接称为内连接。等值连接一般用where字句设置条件,内连接一般用on字句设置条件,但内连接与等值连接效果是相同的。

内连接与等值连接其实是一回事情(等效)。

经常有人会问到select a.id,b.name from a,b where a.id=b.pid 与

select a.id,b.name from a inner join b on a.id=b.pid 有什么区别,哪个效率更高一些。

实际上一回事情了。只是内连接是由SQL 1999规则定的书写方式。两个说的是一码事。
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Entity Framework Core (EF Core) allows you to perform inner join operation between two or more tables using LINQ queries or query syntax. Here is an example of performing inner join using LINQ queries: ```csharp var result = from emp in context.Employees join dept in context.Departments on emp.DepartmentId equals dept.DepartmentId select new { EmployeeName = emp.Name, DepartmentName = dept.Name }; ``` In this example, we are joining two tables `Employees` and `Departments` based on the `DepartmentId` column. The result will contain a collection of anonymous objects with properties `EmployeeName` and `DepartmentName`. Here is an example of performing inner join using method syntax: ```csharp var result = context.Employees .Join(context.Departments, emp => emp.DepartmentId, dept => dept.DepartmentId, (emp, dept) => new { EmployeeName = emp.Name, DepartmentName = dept.Name }) .ToList(); ``` In this example, we are performing inner join using `Join` method. We are passing four parameters to the `Join` method - first parameter is the inner collection (`context.Departments`), second parameter is the outer collection (`context.Employees`), third parameter is the key selector for the inner collection (`dept => dept.DepartmentId`), fourth parameter is the key selector for the outer collection (`emp => emp.DepartmentId`), and the fifth parameter is the result selector (`(emp, dept) => new {...}`). The `ToList()` method is used to execute the query and return the results as a list. I hope this helps! Let me know if you have any further questions.

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值