iOS简单的多表查询以及SQLite注意点

iOS简单的多表查询以及SQLite注意点,第1张

多表查询

假如有两张表:

表A:

表B:

这里我们是通过相同列名departmentNumber来进行条件查询相关信息:

1.内连接查询:返回的结果只有满足departmentNumber相等的结果

sql语句(有两种方式):

```

-->select a.name, b.name from A as a, B as b where a.departmentNumber = b.departmentNumber

-->select a.name, b.name from A as a  inner join  B as b on a.departmentNumber = b.departmentNumber

```

查询结果:

2.左外链接查询:返回的结果只和左边的表有关(这里假定A是左边的表),右边表如果没有对应值,就为NULL

sql语句:

```

-->select a.name, b.name from A as a  left outer join  B as b on a.departmentNumber= b.departmentNumber

```

返回结果:

3.右外链接查询:返回的结果只和右边的表有关(这里假定B是右表),那么如果左边表是没有对应值,就为NULL

sql语句:

```

-->select a.name, b.name from A as a  right OUTER join  B as b on a.departmentNumber = b.departmentNumber

```

返回结果:

4.完全外链接查询:想获取两个表所有信息,如果两个表内没有对应值的就用NULL表示

sql语句:

```

-->select a.name, b.name from B as b  full OUTER join  A as a on a.departmentNumber = b.departmentNumber

```

返回结果:

注意点:在sqlite中是不支持右外连接和完全外链接的,但是可以通过以下方式来进行连接:

1.sqlite中的右外连接:将左外连接的表换个顺序就可以了

```

-->select a.name, b.name from B as B  left outer join  A as A on a.departmentNumber = b.departmentNumber

```

返回结果:

2.sqlite中的完全外链接:用关键字union将两句连接起来进行合并

```

-->select a.name, b.name from B as b left OUTER A as a on a.departmentNumber = b.departmentNumber

UNION

select a.name, b.name from A as a left outer B as b on a.departmentNumber = b.departmentNumber

```

返回结果:

在IOS CoreData中,多表查询上相对来说,没有SQL直观,但COREDATA的功能还是可以完成相关 *** 作的。

多表查询,表与表之间肯定存在某种关系,如果对于类似外连接,左连接等 *** 作,在COREDATA中就显得无力(请高手指教了)。

在上节中,介绍了一下数据库的关系查询 *** 作。

下面使用CoreData进行关系数据库的表与表之间的关系演示。

生成COREDATA和如何设置关系就不再详谈了,见之前的文章。

1)先创建需要的实体表(方法见"CoreData单表创建使用")

Course, Section, Teacher 表

2)建立关联 设置删除关系,对应关系如下(设置的具体含义已在文章第二部分介绍)

课程_教师 (一课程可包含多个教师,删除关系:作废)

课程_章节(一节课可包含多个章节,删除关系:级联)

章节_课程(一个章节只属于一个课程,删除关系:作废)

教师_课程(一个教师可以讲多门课,删除关系:作废)

创建之后查看style关系:

表关系

3)使用创建的对象生成相应地文件:.h和.m(方法见"CoreData单表创建使用")

根据3个对象创建的文件

根据设置的对象之间的对应关系 会生成相应地属性和方法Section对应一个课程时 添加课程对象的属性

课程对应的章节以及教师都是多个,生成NSSet 存储 并生成相应方法

NSSet 是一个无序的集合 ,可以使用NSSet 与NSArray根据需要转换使用,其他使用方法 同单表使用的增删查改,只是访问时多层访问.

如:NSPredicate*predict = [NSPredicate predicateWithFormat:@"section_course.courseId = %d",courseId]

如:self.courseEntity.course_teacher.count

coreData多表关联的基本 *** 作已做一个简单的介绍,具体的功能还待使用者发掘,并且苹果提供了NSFetchController 与coreData结合使用.


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/10077873.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存