自定義View系列教程00–推翻自己和過(guò)往,重學(xué)自定義View
自定義View系列教程01–常用工具介紹
自定義View系列教程02–onMeasure源碼詳盡分析
自定義View系列教程03–onLayout源碼詳盡分析
自定義View系列教程04–Draw源碼分析及其實(shí)踐
自定義View系列教程05–示例分析
自定義View系列教程06–詳解View的Touch事件處理
自定義View系列教程07–詳解ViewGroup分發(fā)Touch事件
自定義View系列教程08–滑動(dòng)沖突的產(chǎn)生及其處理
探索Android軟鍵盤(pán)的疑難雜癥
深入探討Android異步精髓Handler
詳解Android主流框架不可或缺的基石
站在源碼的肩膀上全解Scroller工作機(jī)制
Android多分辨率適配框架(1)— 核心基礎(chǔ)
Android多分辨率適配框架(2)— 原理剖析
Android多分辨率適配框架(3)— 使用指南
Android程序員C語(yǔ)言自學(xué)完備手冊(cè)
講給Android程序員看的前端系列教程(圖文版)
講給Android程序員看的前端系列教程(視頻版)
子查詢是指一個(gè)查詢語(yǔ)句嵌套在另一個(gè)查詢語(yǔ)句內(nèi)部的查詢;該查詢語(yǔ)句可以嵌套在一個(gè) SELECT、SELECT…INTO、INSERT…INTO等語(yǔ)句中。在執(zhí)行查詢時(shí),首先會(huì)執(zhí)行子查詢中的語(yǔ)句,再將返回的結(jié)果作為外層查詢的過(guò)濾條件。在子?xùn)嗽冎型ǔ?梢允褂帽容^運(yùn)算符和IN、EXISTS、ANY、ALL等關(guān)鍵字。
在開(kāi)始學(xué)習(xí)子查詢之前,我們先準(zhǔn)備好數(shù)據(jù),代碼如下:
DROP TABLE IF EXISTS student;DROP TABLE IF EXISTS class;-- 創(chuàng)建班級(jí)表CREATE TABLE class( cid int (4) NOT NULL PRIMARY KEY, cname varchar(20));-- 創(chuàng)建學(xué)生表CREATE TABLE student ( sid int (4) NOT NULL PRIMARY KEY, sname varchar (20), sage int (2), classid int (4) NOT NULL);-- 向班級(jí)表插入數(shù)據(jù)INSERT INTO class VALUES(1001,'Java');INSERT INTO class VALUES(1002,'C++');INSERT INTO class VALUES(1003,'Python');INSERT INTO class VALUES(1004,'PHP');INSERT INTO class VALUES(1005,'Android');-- 向?qū)W生表插入數(shù)據(jù)INSERT INTO student VALUES(1,'劉婷婷',20,1001);INSERT INTO student VALUES(2,'王琴琴',21,1002);INSERT INTO student VALUES(3,'楊洋洋',24,1003);INSERT INTO student VALUES(4,'李霞霞',23,1004);INSERT INTO student VALUES(5,'吳桃桃',21,1001);INSERT INTO student VALUES(6,'高倩倩',26,1001);INSERT INTO student VALUES(7,'甘麗麗',27,1002);
在子查詢中可使用>、<、=、>=、<=、!=
等比較運(yùn)算符。
示例如下:
-- 查詢高倩倩同學(xué)所在班級(jí)的信息SELECT * FROM class WHERE cid=(SELECT classid FROM student WHERE sname='高倩倩');-- 查詢比高倩倩同學(xué)所在班級(jí)編號(hào)還大的班級(jí)的信息SELECT * FROM class WHERE cid>(SELECT classid FROM student WHERE sname='高倩倩');
結(jié)果如下:
使用[NOT] IN關(guān)鍵字進(jìn)行子查詢時(shí)內(nèi)層查詢語(yǔ)句僅返回一個(gè)數(shù)據(jù)列,這個(gè)數(shù)據(jù)列中的值供外層查詢語(yǔ)句進(jìn)行比較操作。
示例如下:
-- 查詢年紀(jì)大小為21的學(xué)生的所在班級(jí)的信息SELECT * FROM class WHERE cid IN (SELECT classid FROM student WHERE sage=21);
結(jié)果如下:
示例如下:
-- 查詢年紀(jì)大小不為21的學(xué)生的所在班級(jí)的信息SELECT * FROM class WHERE cid NOT IN (SELECT classid FROM student WHERE sage=21);
結(jié)果如下:
EXISTS關(guān)鍵字后面的參數(shù)可以是任意一個(gè)子查詢, 它不產(chǎn)生任何數(shù)據(jù)只返回TRUE或FALSE。當(dāng)返回值為T(mén)RUE時(shí)外層查詢才會(huì) 執(zhí)行。
示例如下:
-- 假若高倩倩同學(xué)在學(xué)生表中則從班級(jí)表查詢所有班級(jí)信息SELECT * FROM class WHERE EXISTS (SELECT * FROM student WHERE sname='高倩倩');
結(jié)果如下:
ANY關(guān)鍵字表示滿足其中任意一個(gè)條件就返回一個(gè)結(jié)果作為外層查詢條件。
示例如下:
-- 查詢比任一學(xué)生所屬班級(jí)號(hào)還大的班級(jí)編號(hào)SELECT * FROM class WHERE cid > ANY (SELECT classid FROM student);
結(jié)果如下:
ALL關(guān)鍵字與ANY有點(diǎn)類(lèi)似,只不過(guò)帶ALL關(guān)鍵字的子?xùn)嗽兎祷氐慕Y(jié)果需同時(shí)滿足所有內(nèi)層?xùn)嗽儣l件。
示例如下:
-- 查詢比所有學(xué)生所屬班級(jí)號(hào)還大的班級(jí)編號(hào)SELECT * FROM class WHERE cid > ALL (SELECT classid FROM student);
結(jié)果如下:
在此總結(jié),查詢語(yǔ)句的書(shū)寫(xiě)順序和執(zhí)行順序。
查詢語(yǔ)句的書(shū)寫(xiě)順序
select ===> from ===> where ===> group by ===> having ===> order by ===> limit
查詢語(yǔ)句的執(zhí)行順序
from ===> where ===> group by ===> having ===> select ===> order by ===> limit
在此,以附錄的形式給出本節(jié)教程的源碼,如下所示:
DROP TABLE IF EXISTS student;DROP TABLE IF EXISTS class;-- 創(chuàng)建班級(jí)表CREATE TABLE class( cid int (4) NOT NULL PRIMARY KEY, cname varchar(20));-- 創(chuàng)建學(xué)生表CREATE TABLE student ( sid int (4) NOT NULL PRIMARY KEY, sname varchar (20), sage int (2), classid int (4) NOT NULL);-- 向班級(jí)表插入數(shù)據(jù)INSERT INTO class VALUES(1001,'Java');INSERT INTO class VALUES(1002,'C++');INSERT INTO class VALUES(1003,'Python');INSERT INTO class VALUES(1004,'PHP');INSERT INTO class VALUES(1005,'Android');-- 向?qū)W生表插入數(shù)據(jù)INSERT INTO student VALUES(1,'劉婷婷',20,1001);INSERT INTO student VALUES(2,'王琴琴',21,1002);INSERT INTO student VALUES(3,'楊洋洋',24,1003);INSERT INTO student VALUES(4,'李霞霞',23,1004);INSERT INTO student VALUES(5,'吳桃桃',21,1001);INSERT INTO student VALUES(6,'高倩倩',26,1001);INSERT INTO student VALUES(7,'甘麗麗',27,1002);-- 查詢高倩倩同學(xué)所在班級(jí)的信息SELECT * FROM class WHERE cid=(SELECT classid FROM student WHERE sname='高倩倩');-- 查詢比高倩倩同學(xué)所在班級(jí)編號(hào)還大的班級(jí)的信息SELECT * FROM class WHERE cid>(SELECT classid FROM student WHERE sname='高倩倩');-- 查詢年紀(jì)大小為21的學(xué)生的所在班級(jí)的信息SELECT * FROM class WHERE cid IN (SELECT classid FROM student WHERE sage=21);-- 查詢年紀(jì)大小不為21的學(xué)生的所在班級(jí)的信息SELECT * FROM class WHERE cid NOT IN (SELECT classid FROM student WHERE sage=21);-- 假若高倩倩同學(xué)在學(xué)生表中則從班級(jí)表查詢所有班級(jí)信息SELECT * FROM class WHERE EXISTS (SELECT * FROM student WHERE sname='高倩倩');-- 查詢比所有學(xué)生所屬班級(jí)號(hào)還大的班級(jí)編號(hào)SELECT * FROM class WHERE cid > ALL (SELECT classid FROM student);
聯(lián)系客服