ALinq 入门学习(六)--Join 连接查询
2010-05-26 17:59
274 查看
简单介绍一下连接查询:通过连接运算符可以实现多个表查询。连接是关系数据库模型的主要特点,也是它区别于其它类型数据库管理系统的一个标志。from join_table1 join_type join_table2 on Join_condition 这个是SQL 中最简单的连接查询功能语法。在ALinq , Linq ,Entity Framework 中都有涉及到连接查询,在某种程度上的确简便了很多查询。但是个人认为,Linq to SQL ,ALinq 使用Linq 语句来连接查询数据库不是那么的方便,总感觉有些地方不是Linq 语句所能处理的。本文章出略的讲解ALinq 中连接查询数据。
1. 一对多查询
在ORM映射框架中我们听得最多的也就是什么 1 to 1, 1 to many ,many to many 等等。这代表着一种数据结构之间的关系。一对多查询也就是查询主表的时候附带查询子表中的集合信息。在很多情况下不建议采用一对多查询,因为这样是比较消耗性能的。ALinq 一对多查询例子如下:
ALinq 双向连接查询 1 /// <summary>
2 /// 双向连接查询
3 /// </summary>
4 public void FunctionJionDouble()
5 {
6 OA_DBDataContext context = new OA_DBDataContext(new SqlConnection(connectionString));
7 context.Log = Console.Out;
8 var query = from r in context.TabRole
9 join u in context.TabUser
on r.Id equals u.RoleId into userlist
select new
{
r.RoleName,
userlist
};
foreach (var item in query)
{
Console.WriteLine("RoleName ==> "+item.RoleName);
foreach (var user in item.userlist)
{
Console.WriteLine("UserName ==> "+user.UserName);
}
Console.WriteLine();
}
}
补充介绍连接查询:
在SQL中连接查询分为三种情况:内连接、外连接和交叉连接
1.内连接
内连接又非为三种情况:等值连接、自然连接和不等连接
等值连接:在连接条件中使用等于号(=)运算符比较被连接列的列值,其查询结果中列出被连接表中的所有列,包括其中的重复列
不等连接:在连接条件中使用 除 等于号之外的运算符比较被连接列的列值,其查询结果中列出被连接表中的所有列
自然连接:在连接条件中使用等于(=)运算符比较被连接列的列值,但它使用选择列表指出查询结果集合中所包括的列,并删除连接表中的重复列。这个与等值连接的区别就是重复列的问题。
2.外连接
外连接又分为: 左外连接,右外连接,全连接
左外连接,右外连接:返回到查询结果集合中的不仅包含符合连接条件的行,而且还包括左表(左外连接时)、右表(右外连接时)所有数行 。
全连接: 其实就是上面的组合情况,包含两张表中的所有数据。
3.交叉连接
交叉连接:不带WHERE 子句,它返回被连接的两个表所有数据行的笛卡尔积,返回到结果集合中的数据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数
上面的链接查询,都只是包含了很肤浅的介绍,文章主要目的还是介绍ALinq中Join关键字的一些简单用法。数据库的链接查询还必须查看具体的SQL官方资料。在使用Linq 语句的时候,我也不太喜欢这种方式的链接查询,感觉SQL语句的连接查询比Linq 语句的连接语句来的更为直接。
1. 一对多查询
在ORM映射框架中我们听得最多的也就是什么 1 to 1, 1 to many ,many to many 等等。这代表着一种数据结构之间的关系。一对多查询也就是查询主表的时候附带查询子表中的集合信息。在很多情况下不建议采用一对多查询,因为这样是比较消耗性能的。ALinq 一对多查询例子如下:
ALinq 双向连接查询 1 /// <summary>
2 /// 双向连接查询
3 /// </summary>
4 public void FunctionJionDouble()
5 {
6 OA_DBDataContext context = new OA_DBDataContext(new SqlConnection(connectionString));
7 context.Log = Console.Out;
8 var query = from r in context.TabRole
9 join u in context.TabUser
on r.Id equals u.RoleId into userlist
select new
{
r.RoleName,
userlist
};
foreach (var item in query)
{
Console.WriteLine("RoleName ==> "+item.RoleName);
foreach (var user in item.userlist)
{
Console.WriteLine("UserName ==> "+user.UserName);
}
Console.WriteLine();
}
}
补充介绍连接查询:
在SQL中连接查询分为三种情况:内连接、外连接和交叉连接
1.内连接
内连接又非为三种情况:等值连接、自然连接和不等连接
等值连接:在连接条件中使用等于号(=)运算符比较被连接列的列值,其查询结果中列出被连接表中的所有列,包括其中的重复列
不等连接:在连接条件中使用 除 等于号之外的运算符比较被连接列的列值,其查询结果中列出被连接表中的所有列
自然连接:在连接条件中使用等于(=)运算符比较被连接列的列值,但它使用选择列表指出查询结果集合中所包括的列,并删除连接表中的重复列。这个与等值连接的区别就是重复列的问题。
2.外连接
外连接又分为: 左外连接,右外连接,全连接
左外连接,右外连接:返回到查询结果集合中的不仅包含符合连接条件的行,而且还包括左表(左外连接时)、右表(右外连接时)所有数行 。
全连接: 其实就是上面的组合情况,包含两张表中的所有数据。
3.交叉连接
交叉连接:不带WHERE 子句,它返回被连接的两个表所有数据行的笛卡尔积,返回到结果集合中的数据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数
上面的链接查询,都只是包含了很肤浅的介绍,文章主要目的还是介绍ALinq中Join关键字的一些简单用法。数据库的链接查询还必须查看具体的SQL官方资料。在使用Linq 语句的时候,我也不太喜欢这种方式的链接查询,感觉SQL语句的连接查询比Linq 语句的连接语句来的更为直接。
相关文章推荐
- ALinq 入门学习(七)--OrderBy 排序查询
- scala学习-scala读取Hbase表中数据并且做join连接查询
- ALinq 入门学习(三)--Where 条件查询
- 数据库(学习整理)----7--Oracle多表查询,三种join连接
- LinQ 标准的查询操作符 连接 join in on equals
- [新手入门]快速学习 ADO.NET Entity Framework系列文章 #3 -- LINQ-to-SQL、EntitySQL、查询产生器方法(Query builder)三种语法
- ALinq 入门学习(四)--查询关键字
- EntityFramework 使用Linq处理内连接(inner join)、外链接(left/right outer join)、多表查询
- php入门学习知识点一 PHP与MYSql连接与查询
- EntityFramework 使用Linq处理内连接(inner join)、外链接(left/right outer join)、多表查询
- Linq 多表连接查询join
- php入门学习知识点一 PHP与MYSql连接与查询
- mysql多表连接查询inner join, left join , right join ,full join ,cross join
- Python入门学习教程:数据库操作,连接MySql数据库
- Linq表连接大全(INNER JOIN、LEFT OUTER JOIN、RIGHT OUTER JOIN、FULL OUTER JOIN、CROSS JOIN)
- MySql的join(连接)查询 (三表 left join 写法)
- 数据记录的操作(insert,select,update,delete)函数和分组查询(group by),表连接(join on),嵌套查询(in)
- [深入学习C#]LINQ查询表达式详解(1)——基本语法、使用扩展方法和Lambda表达式简化LINQ查询
- C# 中Linq的学习(查询表达式基础知识)示例
- Hibernate连接查询join