日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

iOS coredata 多表查询

發布時間:2023/12/15 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 iOS coredata 多表查询 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

先創建幾個表。

1、部門表:department

????? dp_id? Integer?primary key

????? dp_deptname??varchar(20) //使用coredata實體創建時用string就行

圖:

?

2、員工表:employee

???? em_id Integer? primary key

???? em_name? varchar(30)

???? em_sex??integer?? // 0:保密,1男,2女,默認為0

???? em_age? integer

???? em_bankCardid varchar(20) //卡號

???? dp_id_emfkinteger //外鍵用于關聯部門表(1VN)

???? pt_id_emfk integer //外鍵用于關聯職位表(1VN)

???? bk_id_emfk integer// 外鍵用于關聯開戶行(1VN)

?

3、職位表:post

???? pt_id Integer? primary key

???? pt_name varchar(20)??//職位名稱

???? dp_id_ptfkinteger //外鍵用戶關聯部門表(1VN)

????? sy_id_ptfkinteger //外鍵關聯工資等級表(1V1)

?

4、工資等級表:salary

???? sy_id? integer primary key

???? sy_scale? double? //比例 (用于后屬算獎金)

???? sy_level varchar(2)?//A,B,C,D..等等級

?

5、開戶銀行:bank

???? bk_id integer primary key

???? bk_name varchar(50)??//銀行名稱

???? bk_address varchar(200) //開戶地址

?

?

表建好了我們來看一表之間的關系。

部門和員工:一個部門有多個員工,而一個員工只能呆在一個部門(如果同時在兩個部分哪是兼職或者能人不在討論范圍),因此部門和員工的關系為1對多關系。

部門與職位:一個部門有多個職位,而一個職位只能在一個部門。因此為:1對多關系。?

部門與工資,開戶銀行,沒有直接關系。(當然部門可能與獎金有掛勾,這個也不在當前討論范圍)

?

員工與職位:一個員工只能身處一職(能人,兼職除外),而一個職位可以由有多名員工。(如程序員職位,哪可以多名),因此為多對一關系。

員工與工資等級:一個員工只能對應一個工程等級和比例,而一個等級比例可以由多名員工擁有。因此為多對一關系。

員工與開戶行:當公司替員工開卡的時候,哪么一個開戶銀行就有多個員工。所以這里會有多對1關系。

?

職位與工資等級:一個職位只配備一個工資級別,同時一個工次級別也只屬于一個職位。因為為1對1關系。

職位與開戶行沒有直接關系。

開戶行和工資等級也沒有直接關系。

?

下面來構造測試數據

部門數據:

??????1?????? HR????? //人力資源

??????2?????? DEV??? //開發

??????3???????POD ? //運維

?

?

員工數據:

????? 1???? 張三?? 男 20?? 46326587439043??2???? 3??2???????????? //張三是開發部的開發工程師

????? 2??? 李四??? 女? 18??? 32565443246567?1????2???3???????????//李四是HR的人事經理

????? 3??? 歐陽??? 女?? 26???14354654656767?3???9????3??????????//歐陽是運維的大客戶經理

????? 4??? 歐陽???? 女?? 22?? 98734298437433?2?? 6??3??????????? //同名歐陽是開發部測試工程師

?

職位數據:

????? 1??? 行政專員????????????1?????? NULL

?????? 2?? 人事經理?????????????1??????3

?????? 3??? 開發工程師????????2??????2

???????4???架構師????????????????2????? NULL

???????5???項目經理????????????2????? NULL

?????? 6??? 測試工程師????????2?????1

?????? 7??? 銷售代表????????????3??? NULL

?????? 8??? 銷售經理????????????3??? NULL

?????? 9??? 大客戶經理????????3???????4

?

?

工資等級數據:

????? 1????0.1??? D?????

??????2???? 0.15??? C

?????3??????? 0.4?? B

?????4??????? 0.8?? A

?

開戶行數據:

???? 1??? 招行???? 廣州????????

???? 2?? 浦發???? 上海??????????

?????3?? 工行????? 深圳??????????

?

注:以上是為了作多表關聯查詢做的故意設計的,并沒有使用關系數據庫的范式來設計表,因此可能有存在不合理的地方。

紅色部分字符,如果是使用CoreData的實體來建,就創建為relationship字段。

大家可以按以上結構在SQLITE中創建好表結構。

數據造好了,下面將進行相關查詢演示:

?

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

select? c.sy_level as dj from deparment a,employeeb,salary c ,post d? where b.em_name = "張三" and a.dp_deptname = "dev" and a.dp_id =b.dp_id_emfk and d.sy_id_ptfk = c.sy_id and d.pt_id =?b.pt_id_emfk

上面一共用到四張表關聯。

?

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

select? c.sy_level as dj, e.bk_name kfh?fromdeparment a,employee b,salary c ,post d?,bank e?where b.em_name ="歐陽" anda.dp_deptname = "dev" and a.dp_id = b.dp_id_emfk and d.sy_id_ptfk =c.sy_id and d.pt_id =?b.pt_id_emfk and e.bk_id = b.bk_id_emfk

以上為五張表的關聯

?

在造表時不建議大家建太多的外鍵。如果設及到多表之間的關系,我們應該是另外專門建立一張專門的關聯表來進行維護。

這里為只是作演示,我這里就不再列關聯表了。

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

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

在上節中,介紹了一下數據庫的關系查詢操作。

下面使用CoreData進行關系數據庫的表與表之間的關系演示。

生成COREDATA和如何設置關系就不再詳談了,見之前的文章。

?

建立好的關系圖:

?

?

一步步建立上面關系圖:

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

?

上面建立表之后,我們還需要建立表之間的關系

部門和員工之間的關系:1 V? N

部門和職位的關系:1? V? N

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

員工與開戶行:一個員工只能提供一個開戶行,但一個開戶行可以給多名員工進行開卡。所以關系為N V 1;

?

職位和工資等級:一個職位只對應一個工資等級;1V1

?

下面插入測試數據:

-?(IBAction)onbtnclick:(id)sender
{
????Department?*dept?=?[NSEntityDescription?insertNewObjectForEntityForName:@"Department"?inManagedObjectContext:self.managedObjectContext];
????dept.dp_deptname?=?@"HR";
????
????Department?*dept2?=?[NSEntityDescription?insertNewObjectForEntityForName:@"Department"?inManagedObjectContext:self.managedObjectContext];

????dept2.dp_deptname?=?@"DEV";
????
????Department?*dept3?=?[NSEntityDescription?insertNewObjectForEntityForName:@"Department"?inManagedObjectContext:self.managedObjectContext];
????dept3.dp_deptname?=?@"POD";
????
????
????Salary?*sy?=[NSEntityDescription?insertNewObjectForEntityForName:@"Salary"?inManagedObjectContext:self.managedObjectContext];
????sy.sy_level?=?@"D";
????sy.sy_scale?=?[NSNumber?numberWithDouble:0.1];
????
????Salary?*sy2?=[NSEntityDescription?insertNewObjectForEntityForName:@"Salary"?inManagedObjectContext:self.managedObjectContext];
????sy2.sy_level?=?@"C";
????sy2.sy_scale?=?[NSNumber?numberWithDouble:0.15];
????
????Salary?*sy3?=[NSEntityDescription?insertNewObjectForEntityForName:@"Salary"?inManagedObjectContext:self.managedObjectContext];
????sy3.sy_level?=?@"B";
????sy3.sy_scale?=?[NSNumber?numberWithDouble:0.4];
????
????Salary?*sy4?=[NSEntityDescription?insertNewObjectForEntityForName:@"Salary"?inManagedObjectContext:self.managedObjectContext];
????sy4.sy_level?=?@"A";
????sy4.sy_scale?=?[NSNumber?numberWithDouble:0.8];
????
????Post?*pt=?[NSEntityDescription?insertNewObjectForEntityForName:@"Post"?inManagedObjectContext:self.managedObjectContext];
????pt.pt_name?=?@"行政專員";
????pt.dept?=?dept;
????
????Post?*pt2=?[NSEntityDescription?insertNewObjectForEntityForName:@"Post"?inManagedObjectContext:self.managedObjectContext];????
????pt2.salary?=?sy3;
????pt2.pt_name?=?@"人事經理";
????pt2.dept?=?dept;
????
????Post?*pt3=?[NSEntityDescription?insertNewObjectForEntityForName:@"Post"?inManagedObjectContext:self.managedObjectContext];
????pt3.pt_name?=?@"開發工程師";
????pt3.dept?=?dept2;
????pt3.salary?=?sy2;
????
????pt=?[NSEntityDescription?insertNewObjectForEntityForName:@"Post"?inManagedObjectContext:self.managedObjectContext];
????pt.pt_name?=?@"架構師";
????pt.dept?=?dept2;
????
????pt=?[NSEntityDescription?insertNewObjectForEntityForName:@"Post"?inManagedObjectContext:self.managedObjectContext];????
????pt.pt_name?=?@"項目經理";
????pt.dept?=dept2;
????
????Post?*pt6=?[NSEntityDescription?insertNewObjectForEntityForName:@"Post"?inManagedObjectContext:self.managedObjectContext];????
????pt6.pt_name?=?@"測試工程師";
????pt6.dept?=?dept2;
????pt6.salary?=?sy;
????
????pt=?[NSEntityDescription?insertNewObjectForEntityForName:@"Post"?inManagedObjectContext:self.managedObjectContext];
????pt.pt_name?=?@"銷售代表";
????pt.dept?=?dept3;
????
????pt=?[NSEntityDescription?insertNewObjectForEntityForName:@"Post"?inManagedObjectContext:self.managedObjectContext];
????pt.pt_name?=?@"銷售經理";
????pt.dept?=?dept3;
????
????Post?*pt9=?[NSEntityDescription?insertNewObjectForEntityForName:@"Post"?inManagedObjectContext:self.managedObjectContext];
????pt9.pt_name?=?@"大客戶經理";
????pt9.dept?=?dept3;
????pt9.salary?=?sy4;
????
????
????Bank?*bk?=?[NSEntityDescription?insertNewObjectForEntityForName:@"Bank"?inManagedObjectContext:self.managedObjectContext];
????bk.bk_name?=?@"招行";
????bk.bk_address?=?@"廣州";
????
????Bank?*bk2?=?[NSEntityDescription?insertNewObjectForEntityForName:@"Bank"?inManagedObjectContext:self.managedObjectContext];
????bk2.bk_name?=?@"浦發";
????bk2.bk_address?=?@"上海";
????
????Bank?*bk3?=?[NSEntityDescription?insertNewObjectForEntityForName:@"Bank"?inManagedObjectContext:self.managedObjectContext];
????bk3.bk_name?=?@"工行";
????bk3.bk_address?=?@"深圳";
????
????Employee?*em?=?[NSEntityDescription?insertNewObjectForEntityForName:@"Employee"?inManagedObjectContext:self.managedObjectContext];
????em.em_age?=?[NSNumber?numberWithInt:20];
????em.em_name?=?@"張三";
????em.em_sex?=?[NSNumber?numberWithInt:1];
????em.em_bankcardid?=?@"46326587439043";
????em.dept?=?dept2;
????em.post?=?pt3;
????em.bank?=?bk2;
????
????em?=?[NSEntityDescription?insertNewObjectForEntityForName:@"Employee"?inManagedObjectContext:self.managedObjectContext];
????em.em_age?=?[NSNumber?numberWithInt:18];
????em.em_name?=?@"李四";
????em.em_sex?=?[NSNumber?numberWithInt:2];
????em.em_bankcardid?=?@"32565443246567";
????em.dept?=?dept;
????em.post?=?pt2;
????em.bank?=?bk3;
????
????em?=?[NSEntityDescription?insertNewObjectForEntityForName:@"Employee"?inManagedObjectContext:self.managedObjectContext];

????em.em_age?=?[NSNumber?numberWithInt:26];
????em.em_name?=?@"歐陽";
????em.em_sex?=?[NSNumber?numberWithInt:2];
????em.em_bankcardid?=?@"14354654656767";
????em.dept?=?dept3;
????em.post?=?pt9;
????em.bank?=?bk3;
????
????em?=?[NSEntityDescription?insertNewObjectForEntityForName:@"Employee"?inManagedObjectContext:self.managedObjectContext];
????em.em_age?=?[NSNumber?numberWithInt:22];
????em.em_name?=?@"歐陽";
????em.em_sex?=?[NSNumber?numberWithInt:2];
????em.em_bankcardid?=?@"9873429837433";
????em.dept?=?dept2;
????em.post?=?pt6;
????em.bank?=?bk3;
????
????[self.managedObjectContext?save:nil];
}

?

數據庫中數據:

?

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

?

NSEntityDescription * emEty = [NSEntityDescriptionentityForName:@"Employee"inManagedObjectContext:self.managedObjectContext];
??? NSFetchRequest *frq = [[[NSFetchRequestalloc]init]autorelease];
???
??? [frq setEntity:emEty];
???
??? NSPredicate * cdt = [NSPredicatepredicateWithFormat:@"em_name = %@",@"張三"];
???
??? [frq setPredicate:cdt];
???
??? NSArray *objs =[self.managedObjectContextexecuteFetchRequest: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 多表查询的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 警察高h荡肉呻吟男男 | 天天爱天天草 | 日韩免费淫片 | 欧美视频在线观看视频 | 中文字幕免费高清 | 一个色的综合 | 国产91视频在线观看 | 综合色婷婷 | 毛茸茸free性熟hd | 午夜三级视频 | 国产精成人| 久久国产福利 | 精品在线视频一区 | 国产有码视频 | 97在线视频人妻无码 | 亚洲一区二区三区国产 | 午夜影院在线观看免费 | 一级性生活毛片 | 天堂久久久久久 | a级在线观看视频 | 国产日批视频在线观看 | 日韩精品中文在线 | 女同vk| av导航网站| 国产va| 日韩欧美不卡 | 精品无码m3u8在线观看 | 俄罗斯videodesxo极品 | 99久久毛片 | 久久久久久久久久久久91 | 久久久国产精品无码 | av天天看 | 亚洲一区二区三区不卡视频 | 女王人厕视频2ⅴk | 浓精喷进老师黑色丝袜在线观看 | 新国产视频 | 中文字幕在线播放日韩 | 精品在线你懂的 | av色先锋 | 欧美处女| 97xxx| 国产精品传媒麻豆hd | 久久伊人精品视频 | 97免费在线视频 | 靠逼网站在线观看 | 久久亚洲AV无码专区成人国产 | 在线一区二区三区 | 色爽| 橹图极品美女无圣光 | 黄色免费在线看 | 亚洲男人天堂网 | 久久九九99 | 日韩国产欧美一区二区三区 | 一区二区三区xxx | 美日韩在线 | 在线观看日本视频 | 黄色免费视频观看 | 一级黄色片在线观看 | 91久久久久国产一区二区 | 国产精品毛片一区二区在线看舒淇 | 男人资源网站 | 播放灌醉水嫩大学生国内精品 | 黑人操日本 | 国产精品久久视频 | 国产91丝袜在线播放0 | 亚洲com | 久久久av免费 | 日韩美女免费线视频 | 国产精品欧美日韩 | av高清在线 | 91精品视频免费 | 欧美日韩在线视频一区二区三区 | 夜夜摸夜夜操 | 久操视频网站 | 女女互慰揉小黄文 | 操三八男人的天堂 | 中文字幕三级视频 | 99精品欧美一区二区三区综合在线 | 玖玖爱免费视频 | 男人的天堂色偷偷 | 99视频免费在线观看 | 亚洲av综合永久无码精品天堂 | 亚洲偷拍一区 | www.九九热.com| 国产成人啪精品午夜在线观看 | 亚洲无人区码一码二码三码 | 在哪里看毛片 | 欧美成人aaa片一区国产精品 | 国产日韩欧美 | 日本欧美色 | 欧美亚洲一区 | 日韩αv| 欧洲成人一区二区三区 | 日本aa大片| 国产视频一级 | 麻豆视屏 | 欧美又粗又长又爽做受 | 91久久国产综合久久91 | 亚洲激情欧美 |