子查詢分類:
1、 相關子查詢
執行依賴于外部查詢的數據
外部查詢返回一行,子查詢就執行一次。
2、非相關子查詢
獨立于外部查詢的子查詢
子查詢總共執行一次,執行完畢后將值傳遞給外部查詢
相關子查詢通常要消耗更長的時間,當數據量增加時,執行時間會急劇增加
[sql] view plaincopyprint?
CREATE TABLE lovoStudent(
id INT PRIMARY KEY AUTO_INCREMENT,
studentName VARCHAR(20),
SUBJECT VARCHAR(20),
grade INT
)DEFAULT CHARSET =utf8;
INSERT INTO lovoStudent(studentName,SUBJECT,grade) VALUES ('張三','java基礎',97);
INSERT INTO lovoStudent(studentName,SUBJECT,grade) VALUES ('張三','數據庫',80);
INSERT INTO lovoStudent(studentName,SUBJECT,grade) VALUES ('張三','java web',96);
INSERT INTO lovoStudent(studentName,SUBJECT,grade) VALUES ('李四','數據庫',95);
INSERT INTO lovoStudent(studentName,SUBJECT,grade) VALUES ('李四','java基礎',94);
INSERT INTO lovoStudent(studentName,SUBJECT,grade) VALUES ('王五','java基礎',85);
-- 查詢java基礎最高分及其最高分的得主
SELECT * FROM lovoStudent t WHERE grade=(SELECT MAX(grade) FROM lovoStudent t1 WHERE SUBJECT='java基礎' AND t1.SUBJECT=t.SUBJECT)
-- 查詢各科目最高分及其得主
SELECT * FROM lovoStudent t WHERE grade=(SELECT MAX(grade) FROM lovoStudent t1 WHERE t.SUBJECT =t1.SUBJECT )
SELECT * FROM lovoStudent t WHERE grade IN(SELECT MAX(grade) FROM lovoStudent t1 WHERE t.SUBJECT =t1.SUBJECT GROUP BY SUBJECT)
CREATE TABLE t_lovoClass(
id INT PRIMARY KEY AUTO_INCREMENT,
className VARCHAR(20)
)DEFAULT CHARSET =utf8;
INSERT INTO t_lovoClass(className) VALUES('AT01');
INSERT INTO t_lovoClass(className) VALUES('AT02');
INSERT INTO t_lovoClass(className) VALUES('AT03');
INSERT INTO t_lovoClass(className) VALUES('AT04')
ALTER TABLE lovoStudent ADD classId INT;
UPDATE lovoStudent SET classId=1 WHERE id<3;
UPDATE lovoStudent SET classId=2 WHERE id>5;
UPDATE lovoStudent SET classId=3 WHERE id>=3 AND id<=5;
-- 查詢學生表所有內容并加上對應班級信息
SELECT e.*,(SELECT className FROM t_lovoClass c WHERE e.classId=c.id) className FROM lovoStudent e;
-- 查詢所有沒有學生的班級
SELECT className FROM t_lovoClass WHERE id NOT IN(SELECT classId FROM lovoStudent)
原文轉自:http://blog.csdn.net/u010142437/article/details/8903104