表自连接

有一个学生表,里面有 学号 功课编号
学生成绩三个字段.用一个SQL查询语句得出每门功课成绩最好的前两名

学号     功课编号        学生成绩
1             1                99
2             1                98
3             1                100
4             2                88
5             2                87
6             2                88
7             3                99
8             3                88
9             3                100

解决方法
SELECT DISTINCT 学生表1.*
FROM 学生表 学生表1 INNER JOIN
         学生表 学生表2 ON 学生表1.学号 IN
             (SELECT TOP 2 学生表.学号
            FROM 学生表
            WHERE 学生表.功课编号 = 学生表1.功课编号
            ORDER BY 学生成绩 DESC)

查询结果
学号     功课编号        学生成绩
1             1                99
2             1                98
4             2                88
6             2                88
7             3                99
9             3                100



同样的问题还有

查找不同课程成绩相同的学生的学号、课程号、学生成绩

例:

1.实现自连接,编写一个SELECT语句查询customers表中,地址相同的客户的'姓名'和'地址'


SELECT DISTINCT customers1.*
FROM customers customers1 where customers1.地址 IN
(SELECT customers.姓名,customers.地址
FROM customers
WHERE customers.地址 = customers1.地址)

2.建立查询,编写一个SELECT语句,查询所有购买了"book"货品的客户姓名,要求结果集中不存在重复的记


select distinct 客户姓名 from customers where 货品="book"

3.相关子查询 ,编写一个SELECT语句,查找订货数量大于该货品的平均订货数量的订单信息
select * from 订货表 where 订货表.订货数量>(select avg(订货数量) from 订货表)

4.修改表中数据,编写一条UPDATE语句,将所有库存量大于1000的货品价格降低10%
update 库存表 set 货品价格=货品价格*0.1 where 库存量>1000

5.删除表中记录,编写一条DELETE语句,删除orders表中2号部的订单信息
delete from orders where 订货单位=2号部

4.3 基于列表选择行,编写一条SELECT语句,从goods表中检索出货品名称为"pen","book","desk"的货品的"货品

名称","库存量","供应商"信息.
select 货品名称,库存量,供应商
from goods
where 出货品名称="pen" or 出货品名称="pen" or 出货品名称="desk"


4.4 改变结果集的列标题,用两种方法编写SELECT语句,从goods表检索出所有库存量大于等于1000且小于等于

2000的"货品名称","库存量","供应商"信息.列标题分别为"货品的名称","货品的库存量","货品的单价".


select 货品名称 as '货品的名称',库存量 as '货品的库存量',供应商 as '货品的单 价'
from goods
where 库存量>=1000 and   库存量<=2000

select 货品名称 as '货品的名称',库存量 as '货品的库存量',供应商 as '货品的单 价'
from goods having 库存量>=1000 and   库存量<=2000

4.5 使用算术运算符对结果集中的列进行计算,编写一条SELECT语句,显示goods表中所有货品的货品名称.价格和

折扣10%后的价格,使用别名"9折后的价格"标识被计算的列,查询结果按价格由高到低排序.
select 货品名称,价格,价格*0.9 as '9折后的价格'
from goods order by 价格 desc


4.7 基于字符串匹配条件选择查询结果,编写一条SELECT语句,列出customers表中姓王的客户信息.
select * from customers where 姓名 like '%王%'


4.10 实现外连接,查询出重庆客户的姓名.电话号码并显示他们的订单信息.

4.11 实现内连接,查询出有订单的重庆客户的姓名.电话号码并显示他门的订单信息
                                       

4.15 向表中添加行,编写一条INSERT语句,在goods表中添加一行.数据如下
货品名称   库存量   供应商   状态   价格
PENCIL      200     NULL      0      0.3

insert into goods(货品名称,库存量,供应商,状态,价格) values(PENCIL,200,NULL,0,0.3)

4.19 创建一个新表,新表中包含订购了"pen"的订单信息

4.20 嵌套子查询与相关子查询的区别

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值