mysql子查询存到另一张表_MySQL数据库(11)----使用子查询实现多表查询
子查詢指的是用括號括起來,并嵌入另一條語句里的那條 SELECT 語句。下面有一個示例,它實現的是找出與考試類別('T')相對應的所有考試事件行的 ID,然后利用它們來查找那些考試的成績:
SELECT * FROM score WHERE event_id IN ( SELECT event_id FROM grade_event WHERE category = 'T' ) ;
1.1 帶關系比較運算符的子查詢
運算符 =、<>、>、>=、< 和 <= 可用來對值之間的關系進行比較。當與標量子查詢配合使用時,它們會將外層查詢里所有與子查詢的返回值有著特定關系的行找出來。例如:
SELECT * FROM score WHERE event_id=( SELECT event_id FROM grade_event WHERE event_id FROM grade_event WHERE date='2016-07-27' AND category = 'Q' );
如果遇到問題可以通過在 WHERE 子句里使用某個聚合函數來解決,那么可以考慮用帶關系比較運算符的標量子查詢。例如,想要知道在 student 表里的那個學生出生最早,則可能會試著編寫出下面這條語句:
SELECT * FROM student WHERE birth= ( SELECT MIN( birth ) FROM student );
可是這個辦法是行不通的,因為不能在 WHERE 子句里使用聚合函數。(WHERE 子句的用途是確定應該選取哪些行,但 MIN() 的值只有在選取行之后才能確定下來。) 不過,可以使用像下面這樣的子查詢來產生一個最小的出生日期:
SELECT * FROM student WHERE birth = ( SELECT MIN(birth) FROM student );
也可以使用其他聚合函數來解決類似問題。下面的這條語句使用了一個子查詢來選取某次考試中高于平均分的分數:
SELECT * FROM score WHERE event_id=5 AND score > ( SELECT AVG(score) FROM score WHERE event_id = 5 );
如果子查詢返回的是一個行,那么可以用一個構造器來實現一組值(即元組)與子查詢結果的比較。下面這條語句會返回多行與 'Lily' 出生在同一個 state ?和 city 的學生的名字:
mysql> SELECT name,city,state FROMstudent-> WHERE (city,state)=
-> (SELECT city ,state FROM student WHERE name = 'Lily');
總結
以上是生活随笔為你收集整理的mysql子查询存到另一张表_MySQL数据库(11)----使用子查询实现多表查询的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java 实体属性个数_?Java中比较
- 下一篇: linux cmake编译源码,linu