子查詢(sub query
),查詢是建立別的查詢結果之上的,也就是乙個select
語句中包含另外乙個select
語句 ;
有兩類:按照位置分,按照查詢結果分 ;
按照位置分:子查詢(select
子語句)在外部查詢語句(select
父語句)中出現的位置 ;
按照查詢結果分:根據查詢得到的結果進行分類 ;
案列:知道班級名字,查詢出該班所有學生 ;
分析:但是學生表中,只有班級id
,沒有班級名字,因此,需要先查出班級id
,再拿著id
去查學生 ;
其中查詢班級id
的操作,就是標量子查詢,因為它查出來的結果是一行一列;
-- 第一步,根據班級id查詢學生
select
*from student where c_id = ? ;
-- 第二步 ,查詢班級 id
select id from class where name =
'軟體工程2021'
;-- 合併
select
*from student where c_id =
(select id from calss where name =
'軟體工程2021'
);
案列:查詢所有在讀(名字在班級表中)的學生 ;
分析: 學生表中的有的學生是往屆的,我們現在需要查詢出在讀的 ;
我們需要去查詢班級表,拿到所有的班級id
,然後去學生表中,根據id
查詢出學生 ;
-- 查詢對應的學生
select
*from student where c_id in
(?);
-- 查詢所有班級的id
select id from calss ;
-- 拼接在一起
select
*from student where c_id in
(select id from calss )
;
使用in
,順便提一下mysql
失敗的設計any
,some
,all
。
any
和in
的意思一樣,都是其中乙個的意思, 但是在使用的時候前面需要加上=
。因為any
語義不對,沒有意思,必須=any
才有裡面的任意乙個的語義;
some
則是失敗產物any
的補救,因為!=any
語義是一點都不,這和它設計的初衷,不是其中乙個,背道而馳了,設計者,才想起來,我曹,any
, 在否定時態中,含義完全相悖,趕緊設計乙個some
來救場 ;(some
完全等價於any
)
all
則是全部的意思,條件必須全部匹配上,才行。!=all
則是全部不匹配 ;
any
,some
,all
,使用都需要搭配=
!=
;
**案例:查詢整個學生中,年齡最大並且身高是最高的
將子查詢的結果當做二維表使用;這個有別於前面的幾個,返回的結果都不能稱為是二維表 ;
案例:找出某個班中身高最高的人;
-- 先讓學生表按照身高降序排序
select
*from student order
by height desc
;-- 然後按照班級分組
select
*from student group
by c_id ;
-- 合併在一起,就是我們需要的
select
*from
(select
*from student group
by c_id)
as student order
by height desc
;
我們可以看到,該子查詢,發生在from
之後,將得到的結果作為from
的資料來源,所以,錶子查詢,也稱from
子查詢 ;
用來判斷條件是否滿足,可以理解為if
;
exists
接在where
之後使用 ;
exists
的返回值只要0
1
兩種 ;
案例:如果班級表有資料,則查出學生表的資料(好無厘頭的需求。。);
select
*from student where
-- 判斷班級表是否存在
exists
(select
*from calss)
;
C 實現十五子遊戲
最近由於工作需要,做乙個c 的簡單程式。學習了一些基礎東西先記下來。主要有 1.生成初始框架 2.打亂順序 3.遊戲部分,點選按鈕後與空白部分交換的只是text和visible部分 const int n 4 行列數 button buttons new button n,n private voi...
MySQL查詢語句(五) 子查詢
mysql查詢語句 四 order by與limit 把查詢語句的結果當where的判斷條件進行查詢,子查詢的結果為單列。1 查出本 最新的 goods id最大 的一條商品 使用排序 按照goods id desc排序,再取第一行 mysql select goods id,goods name ...
Mysql基礎入門(五)子查詢
有如下表,現要求編寫sql語句,檢視年齡比 李斯文 小的學生,要求顯示這些學生的資訊 紅框中的學生是比李斯文年齡小的學生。第一步 查詢得到 李斯文 的出生日期 select borndate from student where studentname 李斯文 1993 07 03第二步 利用whe...