IOS CoreData 多表查詢 下

2021-09-07 14:32:03 字數 2682 閱讀 2417

在ios coredata中,多表查詢上相對來說,沒有sql直觀,但coredata的功能還是可以完成相關操作的。

多表查詢,表與表之間肯定存在某種關係,如果對於類似外連線,左連線等操作,在coredata中就顯得無力(請高手指教了)。

在上節中,介紹了一下資料庫的關係查詢操作。

下面使用coredata進行關聯式資料庫的表與表之間的關係演示。

生成coredata和如何設定關係就不再詳談了,見之前的文章。

建立好的關係圖:

一步步建立上面關係圖:

先建立部門表,員工表,職位表,工資等級表,開戶銀行表

上面建立表之後,我們還需要建立表之間的關係

部門和員工之間的關係:1 v  n

部門和職位的關係:1  v  n

員工與職位的關係:多對一關係

員工與開戶行:乙個員工只能提供乙個開戶行,但乙個開戶行可以給多名員工進行開卡。所以關係為n v 1;

職位和工資等級:乙個職位只對應乙個工資等級;1v1

下面插入測試資料:

- (ibaction)onbtnclick:(id)sender

資料庫中資料:

1、查詢開發部門中名為張三的工資等級

nsentitydescription * emety = [nsentitydescription entityforname:@"employee" inmanagedobjectcontext:self.managedobjectcontext];

nsfetchrequest *frq = [[[nsfetchrequest alloc]init]autorelease];

[frq setentity:emety];

nspredicate * cdt = [nspredicate predicatewithformat:@"em_name = %@",@"張三"];

[frq setpredicate:cdt];

nsarray *objs =[self.managedobjectcontext executefetchrequest:frq error:nil];

//nslog(@"%i",[objs count]);

nslog(@"%@",((employee*)[objs objectatindex:0]).post.salary.sy_level);

2、查詢運維部名為歐陽的工資等級及開戶銀行

nsentitydescription * entity = [nsentitydescription entityforname:@"employee" inmanagedobjectcontext:self.managedobjectcontext];

nsfetchrequest *fetch = [[[nsfetchrequest alloc]init]autorelease];

[fetch setentity:entity];

nspredicate * qcmd = [nspredicate predicatewithformat:@"em_name = %@ ",@"歐陽"];

[fetch setpredicate:qcmd];

nsarray * obs = [self.managedobjectcontext executefetchrequest:fetch error:nil];

nspredicate * filter = [nspredicate predicatewithformat:@"dept.dp_deptname = %@",@"pod"];

nsarray * ret = [obs filteredarrayusingpredicate:filter];  //從陣列中進行過濾。

nslog(@"%@",((employee*)[ret objectatindex:0]).post.salary.sy_level);

多表查詢主要就在於表之間建立好相關的關聯關係(relationship),其次就是充分的使用nspredicate 這個查詢條件來進行過濾。

IOS CoreData 多表查詢 下

在ios coredata中,多表查詢上相對來說,沒有sql直觀,但coredata的功能還是可以完成相關操作的。多表查詢,表與表之間肯定存在某種關係,如果對於類似外連線,左連線等操作,在coredata中就顯得無力 請高手指教了 在上節中,介紹了一下資料庫的關係查詢操作。下面使用coredata進...

多表查詢 多表查詢 多表查詢

查詢語法 select 列表名稱 from 表明列表 where 笛卡爾積 有兩個集合a,b,取這兩個集合的所有組成情況 要完成多表查詢,需要消除無用的資料 多表查詢分類 1 內連線查詢 1 隱式內連線 使用where消除無用的資料 例子 select t1.name,t1.gender,t2.na...

mysql 多表查詢or MySQL 多表查詢

前期準備 建表create table dep id int,name varchar 20 create table emp id int primary key auto increment,name varchar 20 enum male female not null default ma...