【数据库基础】数据库的数据查询

目录

一.实验目的

二.实验代码

三.代码汇总


一.实验目的

1.  查询全部商品信息。

2.查询类别为“cn002”的所有商品信息。

3. 查询类别为“cn001”和“cn002”对应的所有商品信息。

4.查询类别为“cn005”且进价大于20的商品信息。

5.查询库存数量小于10的商品号,供应商号,商品名和数量。

6.查询有购买记录学生的学号。

7.查询计算机专业“IT”学生的学号,姓名和年龄

8.查询年龄在22到24岁学生的学号,姓名,学院,专业和年龄

9. 查询姓张的同学的学号,姓名,学院。

10.查询库存数量在20以上的商品信息,并按数量的降序排列。

11.查询库存数量在10以内的商品编号、商品名称、类别号、数量,按类别升序库存数量降序排列结果。

12.查询库存数量排名前三的商品信息。

13. 查询类别为“cn001”库存数量最大的商品,显示商品号,商品名和数量

14.查询管理信息系统专业“MIS”的学生人数。

15.按学院统计各个学院,年龄在20岁以上的学生人数。

16.统计2018年各商品的销售总量。

17.查询学生人数在3人以上的学院及学生人数。

18.查询2019年商品购买总数量在5以上的学生的学号和购买总数。

19.查询咖啡类商品的平均售价。

20.查询与张小红同学院的学生的学号、姓名、学院。

21.查询所有商品的销售情况,包括商品号,商品名,学生姓名,销售时间,销售数量,按销售日期降序排列。

22.查询购买了商品的学生学号、姓名、学院。

23.查询购买了咖啡类商品的学生的学号、姓名、学院。

24.查询没有出售过的商品号,商品名,类别名、售价和数量。(连接查询和子查询)

25.查询购买了商品号为“gn001”或“gn002”商品的学号,姓名和学院(1)。

26. 查询购买了商品号为“gn001”和“gn002”商品的学号,姓名和学院(2)。

27. 查询各学院年龄最大的学生,显示学号,姓名和学院。(相关子查询和派生表)

28. 统计每个商品的销售总数,要求显示商品号,商品名和销售总数。

29.查询2019年商品购买总数在5以上的学生的姓名、学院和购买总数。

30. 找出供应商品总数在50以上的供应商号,供应商名,供应商地址,供应总数,结果按地址分组,并按供应总数的降序排列。

二.实验代码

回到先前创建的T2数据库,依题意有:

1.  查询全部商品信息。

--1--查询全部商品信息。
SELECT * FROM goods

2.查询类别为“cn002”的所有商品信息。

--2--查询类别为“cn002”的所有商品信息。
SELECT *FROM goods WHERE categoryno='cn002'

3. 查询类别为“cn001”和“cn002”对应的所有商品信息。

--3--查询类别为“cn001”和“cn002”对应的所有商品信息。
SELECT *FROM goods WHERE categoryno='cn001' OR categoryno='cn002'
--或者
SELECT *FROM goods WHERE categoryno IN ('cn001','cn002')

4.查询类别为“cn005”且进价大于20的商品信息。

--4--查询类别为“cn005”且进价大于20的商品信息。
SELECT *FROM goods WHERE categoryno='cn005' AND inprice>20

5.查询库存数量小于10的商品号,供应商号,商品名和数量。

--5--查询库存数量小于10的商品号,供应商号,商品名和数量。
SELECT goodsno,supplierno,goodsname,number FROM goods WHERE number<10

6.查询有购买记录学生的学号。

--6--查询有购买记录学生的学号。
SELECT sno FROM salebill WHERE happentime is not null

7.查询计算机专业“IT”学生的学号,姓名和年龄。

--7--查询计算机专业“IT”学生的学号,姓名和年龄
SELECT sno,sname,birthyear FROM student WHERE major='IT'

8.查询年龄在22到24岁学生的学号,姓名,学院,专业和年龄。

--8--查询年龄在22到24岁学生的学号,姓名,学院,专业和年龄
SELECT sno,sname,college,major,YEAR(GETDATE())-birthyear 
--getdate()为获取当前时间 year()读取年份 减去出生年份即为年龄
AS age --记为column名称age
FROM student
WHERE YEAR(GETDATE())-birthyear BETWEEN 22 AND 24

9. 查询姓张的同学的学号,姓名,学院。

--9--查询姓张的同学的学号,姓名,学院。
SELECT sno,sname,college FROM student
WHERE sname LIKE '张%'

10.查询库存数量在20以上的商品信息,并按数量的降序排列。

--10--查询库存数量在20以上的商品信息,并按数量的降序排列。
SELECT * FROM goods
WHERE number>20
ORDER BY number ASC

11.查询库存数量在10以内的商品编号、商品名称、类别号、数量,按类别升序库存数量降序排列结果。

--11--查询库存数量在10以内的商品编号、商品名称、类别号、数量,
--按类别升序库存数量降序排列结果。
SELECT goodsno,goodsname,categoryno,number FROM goods
WHERE number<10
ORDER BY categoryno ASC,number DESC

12.查询库存数量排名前三的商品信息。

--12--查询库存数量排名前三的商品信息。
SELECT TOP 3  * FROM goods
ORDER BY number DESC--降序排列,前三个即为前三

13. 查询类别为“cn001”库存数量最大的商品,显示商品号,商品名和数量。

--13--查询类别为“cn001”库存数量最大的商品,显示商品号,商品名和数量
SELECT TOP 1 goodsno,goodsname,number FROM goods
WHERE categoryno='cn001'
ORDER BY number DESC

14.查询管理信息系统专业“MIS”的学生人数。

--14--查询管理信息系统专业“MIS”的学生人数。
SELECT major,COUNT(*)AS '人数总和' FROM student--AS表示为命名
GROUP BY major
HAVING major='MIS'

15.按学院统计各个学院,年龄在20岁以上的学生人数。

--15--按学院统计各个学院,年龄在20岁以上的学生人数。
SELECT college,YEAR(GETDATE())-birthyear AS Age,COUNT(*)AS '个数' FROM student
GROUP BY college,YEAR(GETDATE())-birthyear
HAVING (YEAR(GETDATE())-birthyear)>20

16.统计2018年各商品的销售总量。

--16--统计2018年各商品的销售总量。
SELECT goodsno,happentime,number,COUNT(*) AS 个数 FROM salebill
GROUP BY goodsno,number,happentime
HAVING happentime LIKE '%2018%'

17.查询学生人数在3人以上的学院及学生人数。

--17--查询学生人数在3人以上的学院及学生人数
SELECT college,major,COUNT(*)AS '人数' FROM student
GROUP BY college,major
HAVING COUNT(*)>3

18.查询2019年商品购买总数量在5以上的学生的学号和购买总数。

--18--
--查询2019年商品购买总数量在5以上的学生的学号和购买总数
SELECT sno,happentime,number,COUNT(*) FROM salebill
WHERE number>=5 
GROUP BY sno,number,happentime
HAVING happentime LIKE '%2019%'

19.查询咖啡类商品的平均售价。

--19--查询咖啡类商品的平均售价
SELECT  AVG(saleprice)AS '咖啡的平均售价' FROM goods--AVG()取平均数
WHERE goodsname LIKE '%咖啡%' 

20.查询与张小红同学院的学生的学号、姓名、学院。

--20--查询与张小红同学院的学生的学号、姓名、学院。
--查询与张小红同学院的学生的学号、姓名、学院
SELECT sno,sname,college FROM student
WHERE college in (
select college from student 
where sname='张小红')

21.查询所有商品的销售情况,包括商品号,商品名,学生姓名,销售时间,销售数量,按销售日期降序排列。

--21
--查询所有商品的销售情况,包括商品号,商品名,学生姓名,销售时间,销售数量,
--按销售日期降序排列。
SELECT * FROM goods,salebill,student
WHERE goods.goodsno=salebill.goodsno AND salebill.sno=student.sno
ORDER BY happentime DESC
--也可以用Join on 连接
SELECT * FROM salebill s1 join
goods g on s1.goodsno=g.goodsno
join
student s2 on s1.sno=s2.sno
ORDER BY happentime DESC

22.查询购买了商品的学生学号、姓名、学院。

--22--查询购买了商品的学生学号、姓名、学院。
SELECT DISTINCT student.sno,sname,college FROM student join salebill
on student.sno=salebill.sno

23.查询购买了咖啡类商品的学生的学号、姓名、学院。

--23--查询购买了咖啡类商品的学生的学号、姓名、学院。
SELECT sno,sname,college
FROM student WHERE sno 
in (select sno from salebill where
goodsno in (select goodsno from goods
where goodsname like '%咖啡%'))
--以上是对goodsname进行相似查询
--可再次嵌套对category的categoryname=’咖啡'查询
SELECT sno,sname,college
FROM student WHERE sno 
in (select sno from salebill where
goodsno in (select goodsno from goods
where categoryno in 
(select categoryno from category where
categoryname='咖啡')))

24.查询没有出售过的商品号,商品名,类别名、售价和数量。(连接查询和子查询)

--24--查询没有出售过的商品号,商品名,类别名、售价和数量。(连接查询和子查询)
SELECT goods.goodsno,goodsname,categoryname,saleprice,number
-- table_1 join table_2 on t1.column=t2.column
FROM goods join category on goods.categoryno=category.categoryno
WHERE goods.goodsno not 
--通过column连接时候goods.goodsno在goods表中选择goodsno
IN (SELECT goods.goodsno FROM goods join salebill 
ON goods.goodsno=salebill.goodsno)

25.查询购买了商品号为“gn001”或“gn002”商品的学号,姓名和学院(1)。

--25--查询购买了商品号为“gn001”或“gn002”商品的学号,姓名和学院(1)。
SELECT DISTINCT student.sno,sname,college FROM goods JOIN salebill
ON goods.goodsno=salebill.goodsno
join student on student.sno=salebill.sno
WHERE goods.goodsno Like 'gn00[1-2]' 

26. 查询购买了商品号为“gn001”和“gn002”商品的学号,姓名和学院(2)。

--26查询购买了商品号为“gn001”或“gn002”商品的学号,姓名和学院(2)。
select sno,sname,college from student where sno
in (select sno from salebill where goodsno='gn001')
or
sno in(select sno from salebill where goodsno='gn002')

27. 查询各学院年龄最大的学生,显示学号,姓名和学院。(相关子查询和派生表)

--27查询各学院年龄最大的学生,显示学号,姓名和学院。
select sno,sname,college from student s
where (YEAR(getdate())-birthyear)
=(select MAX(YEAR(getdate())-birthyear)
from student where s.college=student.college)

28. 统计每个商品的销售总数,要求显示商品号,商品名和销售总数。

--28统计每个商品的销售总数,要求显示商品号,商品名和销售总数。
select goods.goodsno,goodsname,SUM(salebill.number)as 销售总数
from goods,salebill
where goods.goodsno=salebill.goodsno 
group by goods.goodsno,goodsname

29.查询2019年商品购买总数在5以上的学生的姓名、学院和购买总数。

--29查询2019年商品购买总数在5以上的学生的姓名、学院和购买总数。
select sname,college,salebill.number
from goods join salebill on goods.goodsno=salebill.goodsno
join student on salebill.sno=student.sno
where(happentime LIKE '%2019%')and salebill.number>=5
group by sname,college,salebill.number

30. 找出供应商品总数在50以上的供应商号,供应商名,供应商地址,供应总数,结果按地址分组,并按供应总数的降序排列。

--30找出供应商品总数在50以上的供应商号,供应商名,供应商地址,供应总数,
--结果按地址分组,并按供应总数的降序排列。
select supplier.suppliername,address,SUM(goods.number)as 供应总数 
from goods join supplier on goods.supplierno=supplier.supplierno
group by address,suppliername
having SUM(goods.number)>50
order by SUM(goods.number) desc 

三.代码汇总

--实验二--

--1--查询全部商品信息。
SELECT * FROM goods

--2--查询类别为“cn002”的所有商品信息。
SELECT *FROM goods WHERE categoryno='cn002'

--3--查询类别为“cn001”和“cn002”对应的所有商品信息。
SELECT *FROM goods WHERE categoryno='cn001' OR categoryno='cn002'
--或者
SELECT *FROM goods WHERE categoryno IN ('cn001','cn002')

--4--查询类别为“cn005”且进价大于20的商品信息。
SELECT *FROM goods WHERE categoryno='cn005' AND inprice>20

--5--查询库存数量小于10的商品号,供应商号,商品名和数量。
SELECT goodsno,supplierno,goodsname,number FROM goods WHERE number<10

--6--查询有购买记录学生的学号。
SELECT sno FROM salebill WHERE happentime is not null

--7--查询计算机专业“IT”学生的学号,姓名和年龄
SELECT sno,sname,birthyear FROM student WHERE major='IT'

--8--查询年龄在22到24岁学生的学号,姓名,学院,专业和年龄
SELECT sno,sname,college,major,YEAR(GETDATE())-birthyear 
--getdate()为获取当前时间 year()读取年份 减去出生年份即为年龄
AS age --记为column名称age
FROM student
WHERE YEAR(GETDATE())-birthyear BETWEEN 22 AND 24

--9--查询姓张的同学的学号,姓名,学院。
SELECT sno,sname,college FROM student
WHERE sname LIKE '张%'

--10--查询库存数量在20以上的商品信息,并按数量的降序排列。
SELECT * FROM goods
WHERE number>20
ORDER BY number ASC

--11--查询库存数量在10以内的商品编号、商品名称、类别号、数量,
--按类别升序库存数量降序排列结果。
SELECT goodsno,goodsname,categoryno,number FROM goods
WHERE number<10
ORDER BY categoryno ASC,number DESC

--12--查询库存数量排名前三的商品信息。
SELECT TOP 3  * FROM goods
ORDER BY number DESC--降序排列,前三个即为前三

--13--查询类别为“cn001”库存数量最大的商品,显示商品号,商品名和数量
SELECT TOP 1 goodsno,goodsname,number FROM goods
WHERE categoryno='cn001'
ORDER BY number DESC

--14--查询管理信息系统专业“MIS”的学生人数。
SELECT major,COUNT(*)AS '人数总和' FROM student--AS表示为命名
GROUP BY major
HAVING major='MIS'


--15--按学院统计各个学院,年龄在20岁以上的学生人数。
SELECT college,YEAR(GETDATE())-birthyear AS Age,COUNT(*)AS '个数' FROM student
GROUP BY college,YEAR(GETDATE())-birthyear
HAVING (YEAR(GETDATE())-birthyear)>20

--16--统计2018年各商品的销售总量。
SELECT goodsno,happentime,number,COUNT(*) AS 个数 FROM salebill
GROUP BY goodsno,number,happentime
HAVING happentime LIKE '%2018%'

--17--查询学生人数在3人以上的学院及学生人数
SELECT college,major,COUNT(*)AS '人数' FROM student
GROUP BY college,major
HAVING COUNT(*)>3

--18--
--查询2019年商品购买总数量在5以上的学生的学号和购买总数
SELECT sno,happentime,number,COUNT(*) FROM salebill
WHERE number>=5 
GROUP BY sno,number,happentime
HAVING happentime LIKE '%2019%'

--19--查询咖啡类商品的平均售价
SELECT  AVG(saleprice)AS '咖啡的平均售价' FROM goods--AVG()取平均数
WHERE goodsname LIKE '%咖啡%' 

--20--查询与张小红同学院的学生的学号、姓名、学院。
--查询与张小红同学院的学生的学号、姓名、学院
SELECT sno,sname,college FROM student
WHERE college in (
select college from student 
where sname='张小红')

--21
--查询所有商品的销售情况,包括商品号,商品名,学生姓名,销售时间,销售数量,
--按销售日期降序排列。
SELECT * FROM goods,salebill,student
WHERE goods.goodsno=salebill.goodsno AND salebill.sno=student.sno
ORDER BY happentime DESC
--也可以用Join on 连接
SELECT * FROM salebill s1 join
goods g on s1.goodsno=g.goodsno
join
student s2 on s1.sno=s2.sno
ORDER BY happentime DESC

--22--查询购买了商品的学生学号、姓名、学院。
SELECT DISTINCT student.sno,sname,college FROM student join salebill
on student.sno=salebill.sno

--23--查询购买了咖啡类商品的学生的学号、姓名、学院。
SELECT sno,sname,college
FROM student WHERE sno 
in (select sno from salebill where
goodsno in (select goodsno from goods
where goodsname like '%咖啡%'))
--以上是对goodsname进行相似查询
--可再次嵌套对category的categoryname=’咖啡'查询
SELECT sno,sname,college
FROM student WHERE sno 
in (select sno from salebill where
goodsno in (select goodsno from goods
where categoryno in 
(select categoryno from category where
categoryname='咖啡')))

--24--查询没有出售过的商品号,商品名,类别名、售价和数量。(连接查询和子查询)
SELECT goods.goodsno,goodsname,categoryname,saleprice,number
FROM goods join category on goods.categoryno=category.categoryno
WHERE goods.goodsno not 
IN (SELECT goods.goodsno FROM goods join salebill 
ON goods.goodsno=salebill.goodsno)         

--25--查询购买了商品号为“gn001”或“gn002”商品的学号,姓名和学院(1)。
SELECT DISTINCT student.sno,sname,college FROM goods JOIN salebill
ON goods.goodsno=salebill.goodsno
join student on student.sno=salebill.sno
WHERE goods.goodsno Like 'gn00[1-2]' 

--26查询购买了商品号为“gn001”或“gn002”商品的学号,姓名和学院(2)。
select sno,sname,college from student where sno
in (select sno from salebill where goodsno='gn001')
or
sno in(select sno from salebill where goodsno='gn002')

--27查询各学院年龄最大的学生,显示学号,姓名和学院。
select sno,sname,college from student s
where (YEAR(getdate())-birthyear)
=(select MAX(YEAR(getdate())-birthyear)
from student where s.college=student.college)

--28统计每个商品的销售总数,要求显示商品号,商品名和销售总数。
select goods.goodsno,goodsname,SUM(salebill.number)as 销售总数
from goods,salebill
where goods.goodsno=salebill.goodsno 
group by goods.goodsno,goodsname

--29查询2019年商品购买总数在5以上的学生的姓名、学院和购买总数。
select sname,college,salebill.number
from goods join salebill on goods.goodsno=salebill.goodsno
join student on salebill.sno=student.sno
where(happentime LIKE '%2019%')and salebill.number>=5
group by sname,college,salebill.number

--30找出供应商品总数在50以上的供应商号,供应商名,供应商地址,供应总数,
--结果按地址分组,并按供应总数的降序排列。
select supplier.suppliername,address,SUM(goods.number)as 供应总数 
from goods join supplier on goods.supplierno=supplier.supplierno
group by address,suppliername
having SUM(goods.number)>50
order by SUM(goods.number) desc 


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值