sql子查询练习

sql子查询练习

#子查询临时表‘
CREATE TABLE shop(
goodid INT,
catid INTEGER,
NAME VARCHAR(10),
price INT

)
INSERT INTO shop VALUES(1,10,'vivo x90',3888),(2,10,'vivo x80',3288)
INSERT INTO shop VALUES(3,20,'iqoo neo5',1888),(5,20,'iqoo11pro',4288)
INSERT INTO shop VALUES(4,20,'iqoo z5',1288),(6,10,'vivo s12',2488)
INSERT INTO shop VALUES(8,30,'tws2',288),(7,30,'watch2',1288)
SELECT*FROM shop
#得到各个内别中最贵的商品
SELECT catid,MAX(price) FROM shop GROUP BY catid

SELECT goodid,shop.catid,NAME,price  FROM 
 (SELECT catid,MAX(price)AS maxprice FROM shop GROUP BY catid) temp,shop
 WHERE temp.catid=shop.catid AND temp.maxprice=shop.price;
#all操作符和any的使用

#显示价格比10号类别所有商品都贵的商品和商品编号
SELECT goodid,catid,NAME FROM shop 
WHERE price>ALL(SELECT price FROM shop WHERE catid=10)
#显示价格比10号类别所有商品其中一个都贵的商品和商品编号all->any
SELECT goodid,catid,NAME FROM shop 
WHERE price>ANY(SELECT price FROM shop WHERE catid=10) 
AND catid BETWEEN 20 AND 30

#多列子查询
SELECT *FROM emp
INSERT INTO emp VALUES(7699,'罗峰','保安部部长',7839,'1999-11-01','9999',NULL,30)
INSERT INTO emp VALUES(7700,'张卫健','保安部部长',7839,'2009-12-12','3000',NULL,30)
SELECT depton,job FROM emp WHERE ename='云韵'
#把上表当做子查询,并且用多列子查询
SELECT*FROM emp WHERE  (depton,job)=(SELECT depton,job FROM emp WHERE ename='云韵') AND ename!='云韵'
#
SELECT*FROM student
INSERT INTO student VALUES(11,'刘备',99,89,97)
INSERT INTO student VALUES(11,'看门狗',99,89,97)
UPDATE student SET NAME='抄袭哥',chinese=99,math=89,english=97 WHERE id=10

SELECT chinese,math,english FROM student WHERE NAME='刘备'
SELECT*FROM student WHERE (chinese,math,english)=
(SELECT chinese,math,english FROM student WHERE NAME='刘备') AND NAME!='刘备'

#查找每个部门雇员高于本部门平均工资的雇员】

#先得到每个部门部门号,和平均工资
SELECT depton,AVG(sal) AS avgsal FROM emp GROUP BY depton

SELECT ename,sal,temp.avgsal,emp.depton FROM emp,(SELECT depton,AVG(sal) AS avgsal FROM emp GROUP BY depton) temp
WHERE emp.depton=temp.depton AND emp.sal>temp.avgsal ORDER BY depton
#查找每个部门最高工资的雇员
SELECT ename,sal,temp.maxsal,emp.depton FROM emp,(SELECT depton,MAX(sal) AS maxsal FROM emp GROUP BY depton) temp
WHERE emp.depton=temp.depton AND emp.sal=temp.maxsal ORDER BY depton

#查询每个部门的部门名字,编号,地址和人员数量
SELECT *FROM dept

#先查每个部门的雇员人数
SELECT COUNT(*),depton FROM emp GROUP BY depton

SELECT deptnum,deptname,location,personnum FROM dept,(SELECT COUNT(*) AS personnum,depton FROM emp GROUP BY depton) temp
WHERE dept.deptnum=temp.depton

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我住翻斗花园九号楼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值