sqk语句2

简单子查询

分类: MySQL 139人阅读 评论(0) 收藏 举报
SQL

子查询分类:
1、 相关子查询
      执行依赖于外部查询的数据
      外部查询返回一行,子查询就执行一次。
2、非相关子查询
      独立于外部查询的子查询
      子查询总共执行一次,执行完毕后将值传递给外部查询
 相关子查询通常要消耗更长的时间,当数据量增加时,执行时间会急剧增加

  1. CREATE TABLE lovoStudent(  
  2. id INT PRIMARY KEY AUTO_INCREMENT,  
  3. studentName VARCHAR(20),  
  4. SUBJECT VARCHAR(20),  
  5. grade INT  
  6. )DEFAULT CHARSET =utf8;  
  7.   
  8. INSERT INTO lovoStudent(studentName,SUBJECT,grade) VALUES ('张三','java基础',97);  
  9. INSERT INTO lovoStudent(studentName,SUBJECT,grade) VALUES ('张三','数据库',80);  
  10. INSERT INTO lovoStudent(studentName,SUBJECT,grade) VALUES ('张三','java web',96);  
  11. INSERT INTO lovoStudent(studentName,SUBJECT,grade) VALUES ('李四','数据库',95);  
  12. INSERT INTO lovoStudent(studentName,SUBJECT,grade) VALUES ('李四','java基础',94);  
  13. INSERT INTO lovoStudent(studentName,SUBJECT,grade) VALUES ('王五','java基础',85);  
  14.   
  15. -- 查询java基础最高分及其最高分的得主  
  16. SELECT * FROM lovoStudent t WHERE grade=(SELECT MAX(grade) FROM lovoStudent t1 WHERE SUBJECT='java基础' AND t1.SUBJECT=t.SUBJECT)  
  17.   
  18. -- 查询各科目最高分及其得主  
  19. SELECT *  FROM lovoStudent t  WHERE grade=(SELECT MAX(grade) FROM lovoStudent t1 WHERE t.SUBJECT =t1.SUBJECT )  
  20. SELECT *  FROM lovoStudent t  WHERE grade IN(SELECT MAX(grade) FROM lovoStudent t1 WHERE t.SUBJECT =t1.SUBJECT GROUP BY SUBJECT)  
  21.   
  22. CREATE TABLE t_lovoClass(  
  23. id INT PRIMARY KEY AUTO_INCREMENT,  
  24. className VARCHAR(20)  
  25. )DEFAULT CHARSET =utf8;  
  26.   
  27. INSERT INTO t_lovoClass(className) VALUES('AT01');  
  28. INSERT INTO t_lovoClass(className) VALUES('AT02');  
  29. INSERT INTO t_lovoClass(className) VALUES('AT03');  
  30. INSERT INTO t_lovoClass(className) VALUES('AT04')  
  31. ALTER TABLE lovoStudent ADD classId INT;  
  32. UPDATE lovoStudent SET classId=1 WHERE id<3;  
  33. UPDATE lovoStudent SET classId=2 WHERE id>5;  
  34. UPDATE lovoStudent SET classId=3 WHERE id>=3 AND id<=5;  
  35.   
  36. -- 查询学生表所有内容并加上对应班级信息  
  37. SELECT e.*,(SELECT className FROM t_lovoClass c WHERE e.classId=c.id) className FROM lovoStudent e;  
  38.   
  39. -- 查询所有没有学生的班级  
  40. SELECT className FROM t_lovoClass WHERE id NOT IN(SELECT classId FROM lovoStudent)  
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)


 

更多 0
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值