MYSQL权威指南读书笔记_MySQL
MySQL里面的子选择
一,子选择基本用法
1,子选择的定义
子迭择允许把一个查询嵌套在另一个查询当中。比如说:一个考试记分项目把考试事件分为考试(T)和测验(Q)两种情形。下面这个查询就能只找出学生们的考试成绩
select * from score where event_id in (select event_id from event where type=’T’);
2,子选择的用法(3种)
? 用子选择来生成一个参考值
在这种情况下,用内层的查询语句来检索出一个数据值,然后把这个数据值用在外层查询语句的比较操作中。比如说,如果要查询表中学生们在某一天的测验成绩,就应该使用一个内层查询先找到这一天的测验的事件号,然后在外层查询语句中用这个事件号在成绩表里面找到学生们的分数记录。具体语句为:
select * from score where
id=(select event_id from event where date=’2002-03-21’ and type=’Q’);
需要注意的是:在应用这种内层查询的结果主要是用来进行比较操作的分法时,内层查询应该只有一个输出结果才对。看例子,如果想知道哪个美国总统的生日最小,构造下列查询
select * from president where birth=min(birth)
这个查询是错的!因为MySQL不允许在子句里面使用统计函数!min()函数应该有一个确定的参数才能工作!所以我们改用子选择:
select * from president where birht=(select min(birth) from presidnet);
? exists 和 not exists 子选择
上一种用法是把查间结果由内层传向外层、本类用法则相反,把外层查询的结果传递给内层。看外部查询的结果是否满足内部查间的匹配径件。这种“由外到内”的子迭择用法非常适合用来检索某个数据表在另外一个数据表里面有设有匹配的记录
数据表t1 数据表t2
I1 C1 I2 C2
1
2
3 A
B
C 2
3
4 C
B
A
先找两个表内都存在的数据
select i1 from t1 where exists(select * from t2 where t1.i1=t2.i2);
再找t1表内存在,t2表内不存在的数据
select i1 form t1 where not exists(select * from t2 where t1.i1=t2.i2);
需要注意:在这两种形式的子选择里,内层查询中的星号代表的是外层查询的输出结果。内层查询没有必要列出有关数据列的名字,田为内层查询关心的是外层查询的结果有多少行。希望大家能够理解这一点
? in 和not in 子选择
在这种子选择里面,内层查询语句应该仅仅返回一个数据列,这个数据列里的值将由外层查询语句中的比较操作来进行求值。还是以上题为例
先找两个表内都存在的数据
select i1 from t1 where i1 in (select i2 from t2);
再找t1表内存在,t2表内不存在的数据
select i1 form t1 where i1 not in (select i2 from t2);
好象这种语句更容易让人理解,再来个例子
比如你想找到所有居住在A和B的学生。
select * from student where state in(‘A’,’B’)
二, 把子选择查询改写为关联查询的方法。
1,匹配型子选择查询的改写
下例从score数据表里面把学生们在考试事件(T)中的成绩(不包括测验成绩!)查询出来。
Select * from score where event_id in (select event_id from event where type=’T’);
可见,内层查询找出所有的考试事件,外层查询再利用这些考试事件搞到学生们的成绩。
这个子查询可以被改写为一个简单的关联查询:
Select score.* from score, event where score.event_id=event.event_id and event.event_id=’T’;
下例可以用来找出所有女学生的成绩。
Select * from score where student_id in (select student_id form student where sex = ‘f’);
可以把它转换成一个如下所示的关联查询:
Select * from score
Where student _id =student.student_id and student.sex =’f’;
把匹配型子选择查询改写为一个关联查询是有规律可循的。下面这种形式的子选择查询:
Select * from tablel
Where column1 in (select column2a from table2 where column2b = value);
可以转换为一个如下所示的关联查询:
Select tablel. * from tablel,table2
Where table.column1 = table2.column2a and table2.column2b = value;
(2)非匹配(即缺失)型子选择查询的改写
子选择查询的另一种常见用途是查找在某个数据表里有、但在另一个数据表里却没有的东西。正如前面看到的那样,这种“在某个数据表里有、在另一个数据表里没有”的说法通常都暗示着可以用一个left join 来解决这个问题。请看下面这个子选择查询,它可以把没有出现在absence数据表里的学生(也就是那些从未缺过勤的学生)给查出来:
Select * from student
Where student_id not in (select student_id from absence);
这个子选择查询可以改写如下所示的left join 查询:
Select student. *
From student left join absence on student.student_id =absence.student_id
Where absence.student_id is null;
把非匹配型子选择查询改写为关联查询是有规律可循的。下面这种形式的子选择查询:
Select * from tablel
Where column1 not in (select column2 from table2);
可以转换为一个如下所示的关联查询:
Select tablel . *
From tablel left join table2 on tablel.column1=table2.column2
Where table2.column2 is null;
注意:这种改写要求数据列table2.column2声明为not null

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

12306訂票app下載最新版是一款大家非常滿意的出行購票軟體,想去哪裡就去那裡非常方便,軟體內提供的票源非常多,只需要通過實名認證就能在線購票,所有用戶的出行車票機票都可以輕鬆買到,享受不同的優惠折扣。還能提前開啟預約搶票,預約飯店、專車接送都是可以的,有了它想去哪裡就去那裡一鍵購票,出行更加簡單方便,讓大家的出行體驗更舒服,現在小編在線詳細為12306用戶帶來查看歷史購票記錄的方法。 1.打開鐵路12306,點擊右下角我的,點擊我的訂單 2.在訂單頁面點擊已支付。 3.在已支付頁

學信網如何查詢自己的學歷?在學信網中是可以查詢到自己的學歷,很多用戶都不知道如何在學信網中查詢到自己的學歷,接下來就是小編為用戶帶來的學信網查詢自己學歷方法圖文教程,感興趣的用戶快來一起看看吧!學信網使用教程學信網如何查詢自己的學歷一、學信網入口:https://www.chsi.com.cn/二、網站查詢:第一步:點選上方學信網位址,進入首頁點選【學歷查詢】;第二步:在最新的網頁中點選如下圖箭頭所示的【查詢】;第三步:之後在新頁面點選【的登陸學信檔案】;第四步:在登陸頁面輸入資料點選【登陸】;

MySQL與PL/SQL是兩種不同的資料庫管理系統,分別代表了關係型資料庫和過程化語言的特性。本文將比較MySQL和PL/SQL的異同點,並附帶具體的程式碼範例進行說明。 MySQL是一種流行的關聯式資料庫管理系統,採用結構化查詢語言(SQL)來管理和操作資料庫。而PL/SQL是Oracle資料庫特有的過程化語言,用於編寫預存程序、觸發器和函數等資料庫物件。相同

標題:如何使用Oracle查詢表格是否被鎖定?在Oracle資料庫中,表鎖是指當一個事務正在對錶執行寫入操作時,其他事務想要對該表執行寫入操作或對表進行結構改變(如增加列、刪除行等)時會被阻塞。在實際開發過程中,我們經常需要查詢表格是否被鎖,以便更好地排除和處理相關問題。本文將介紹如何使用Oracle語句查詢表格是否被鎖,並給出具體的程式碼範例。要查詢表是否被鎖,我們

使用蘋果手機想要查詢啟動日期,最好的方法是透過手機中的序號來查詢,也可以透過存取蘋果的官網來進行查詢,透過連接電腦查詢,下載第三方軟體查詢。蘋果手機怎麼查詢啟動日期答:序號查詢,蘋果官網查詢,電腦查詢,第三方軟體查詢1、用戶最好的方式就是知道自己手機的序號,開啟設定通用關於本機就可以看到序號。 2.使用序號不僅可以知道自己手機的啟動日期,還可以查看手機版本,手機產地,手機出廠日期等。 3.用戶訪問蘋果的官網找到技術支持,找到頁面底部的服務和維修欄目,裡面查看iPhone的激活信息。 4.用戶

論壇是網路上非常常見的網站形式之一,它為使用者提供了一個分享資訊、交流討論的平台。而Discuz是一款常用的論壇程序,相信很多站長都已經非常熟悉了。在進行Discuz論壇的開發和管理過程中,經常需要查詢資料庫中的資料來進行分析或處理。在這篇文章中,我們將分享一些查詢Discuz資料庫位置的技巧,並提供具體的程式碼範例。首先,我們需要了解Discuz的資料庫結構

查詢BitTorrent幣(BTT)最新價格BTT是TRON區塊鏈上的加密貨幣,用於獎勵BitTorrent網路用戶分享和下載檔案。尋找BTT最新價格的方法如下:選擇一個可靠的價格查詢網站或應用程式。一些常用的價格查詢網站包括:CoinMarketCap:https://coinmarketcap.com/Coindesk:https://www.coindesk.com/幣安:https://www.binance.com/在網站或應用程式中搜尋BTT。查看BTT的最新價格。注意:加密貨幣價格

如何查詢通神幣最新價格?通神幣是一種數位貨幣,可用於購買遊戲內物品、服務和資產。它是去中心化的,意味著它不受政府或金融機構的控制。通神幣的交易在區塊鏈上進行,這是一個分散式帳本,記錄了所有通神幣交易的資訊。要查詢通神幣的最新價格,您可以使用以下步驟:選擇一個可靠的價格來查詢網站或應用程式。一些常用的價格查詢網站包括:CoinMarketCap:https://coinmarketcap.com/Coindesk:https://www.coindesk.com/幣安:https://www.bin
