unity学习笔记
多表联合查询
定义:联合查询(连接查询)的表中需要有数据类型和长度都相同的属性,称为“连接属性”,实现查询的时候需要两个数据表的连接属性相同。
比如两个表:学生(学号,姓名,年龄)和学习(学号,课程号,成绩),实现连接查询的语句为:
select 学生.学号,姓名,年龄,课程号,成绩
from 学生,学习
where 学生.学号=学习.学号;
连接查询分类:
1.自连接查询,对同一个表进行连接操作
2.内连接查询,<又分为:自然连接,等值连接,不等值连接三种>
3.外连接查询,<又分为:左外连接,右外连接,全外连接三种>
4.交叉连接查询,也称为 无条件查询。
5.联合查询
(一) 自连接查询
一个表 自己 与 自己 建立 连接 称为自连接或自身连接。
进行自连接就如同两个分开的表 一样,可以把一个表的某一行与同一表中的另一行连接起来。
(二) 内连接(Inner join)
内连接是最常用的一种连接方式,它只返回两个数据集合之间 匹配关系的 那些行。将位于两个相互交叉的数据集合中重叠部分以内 的那些数据行 连接起来.
内连接(INNER JOIN)使用比较运算符进行表间某(些)列数据的比较操作,并列出这些表中与连接条件相匹配的数据行。
根据所使用的比较方式不同,内连接查询操作列出与连接条件匹配的数据行,它使用比较运算符比较被连接列的列值。
语法:
select 字段名列表 from 表名 [inner] join 表名 on 连接条件 [where 条件表达式]
内连接分三种:
1、等值连接:
所谓等值连接,是指表之间通过“等于”关系连接起来,产生一个临时表,然后对该临时表进行处理后生成最终结果。其查询结果中列出被连接表中的所有列,包括其中的重复列。
2、不等值连接:
是指表之间的连接关系不是“等于”,而是其它关系。这些运算符包括>、>=、<=、<、!>、!<和<>。
3、自然连接:
在等值连接中消除重复列就是自然连接。
(三)外连接(OUTER JOIN):
与内连接不同的是,外连接不只列出与连接条件相匹配的行,而是列出左表(左外连接时)、右表(右外连接时)或两个表(全外连接时)中所有符合搜索条件的数据行。
外连接是对内连接的扩充,除了将两个数据集合中重叠部分以内的那些数据行连接起来之外,还可以根据要求返回左侧或右侧数据集合中非匹配的数据或全部的数据.即 左外连接(LEFT OUTER JOIN);右外连接(RIGHT OUTER JOIN);全部连接(FULL OUTER JOIN).
外连接语法:
Select 字段名列表 from 表名 Left|Right|Full [Outer] join 表名 ON 连接条件
外连接分为:
1。左外连接(LEFT OUTER JOIN或LEFT JOIN):
在结果表中包含第一个表中满足条件的所有记录。
如果是在连接条件上匹配的记录,则第二个表返回相应值,否则第二个表返回空值。
2。右外连接(RIGHT OUTER JOIN或RIGHT JOIN):
在结果表中包含第二个表中满足条件的所有记录。
如果是在连接条件上匹配的记录,则第一个表返回相应值,否则第一个表返回空值。
3。全外连接(FULL OUTER JOIN或FULL JOIN):
在结果表中包含两个表中满足条件的所有记录。
如果是在连接条件上匹配的元组,则另一个表返回相应值,否则另一个表返回空值。
(四)交叉连接:
交叉连接不使用任何连接条件来限制结果集合,将各表的记录以“笛卡尔”积的方式组合起来,是分别使用两个数据源中的行以所有可能的方式进行组合,即数据集中的每一行都要与另一表每一行组成一个新的行.
(五)联合查询
UNION运算符可以将两个或两个以上上SELECT语句的查询结果集合合并成一个结果集合显示,即执行联合查询。
下面我们再c#中来运用一下数据库多表链接,代码如下:
//将用户表和订单表进行多表查询
- ArrayList list2 = new ArrayList();
- public ArrayList Show()
- {
- SqlConnection con = Link.Connect();
- con.Open();
- string sql = "select i.name ,i.number,u.name from users as u inner join indent as i on i.uid=u.id";
- SqlCommand sc = new SqlCommand(sql, con);
- SqlDataReader reader = sc.ExecuteReader();
- while (reader.Read())
- {
- Indent i = new Indent();
- i.Name = (string)reader.GetValue(0);
- i.Number = (int)reader.GetValue(1);
- Users u = new Users();
- u.Name = (string)reader.GetValue(2);
- list2.Add(i);
- list2.Add(u);
- }
- Link.Close(con, reader);
- return list2;
- }
然后在类中调用就可以实现多表链接
更多精彩请点击 http://www.gopedu.com/article