零基础快速自学SQL,1天足矣

发表于 2018-12-20 09:52:17
王铭 发表于 2018-12-19 14:04
sqlserver数据库么有吗?

SQL语句的标准,是相通了。
论坛是为了学员简单上手,所以弄了两个【简易工具】,操作下SQL。
如果安装SQL Server的话,会麻烦一些,安装文件有些大。
发表于 2018-12-20 09:54:07
syscloud.cui 发表于 2018-12-18 10:10
第二部分sql 查询语句练习

一楼有【第二部分的测试文档】。
最近没有时间练,所以暂停了。
感觉文章这个帖子,有些不切实际。
一天上手,比较困难。
我好歹还有些IT基础,一天时间也只是把【第一部分的测试文档】做了一遍。
是否正确,还是未知,因为论坛也不会提供答案。
发表于 2018-12-22 20:49:32
2.        找出华北地区能够供应海鲜的所有供应商列表。
select distinct DM1.供应商ID, DM1.公司名称
from 供应商 DM1 join 产品 DM2 on DM1.供应商ID = DM2.供应商ID and DM1.地区='华北'
join 类别 DM3 on DM2.类别ID = DM3.类别ID and DM3.类别名称='海鲜'
发表于 2018-12-22 21:12:28
3.        找出订单销售额前五的订单是经由哪家运货商运送的。

select  FT1.订单ID,FT1.运货商 as 运货商ID,DM1.公司名称 as 运货商名称,sum(FT2.单价*FT2.数量) as 销售额
from 订单 FT1 join 订单明细 FT2 on FT1.订单ID = FT2.订单ID
join 运货商 DM1 on FT1.运货商 = DM1.运货商ID
group by FT1.订单ID,FT1.运货商
order by 4 desc  limit 5
发表于 2018-12-22 21:15:25
4.        找出按箱包装的产品名称。

select  产品ID,产品名称,单位数量
from 产品
where 单位数量 like '%箱%'
发表于 2018-12-22 21:20:12
5.        找出重庆的供应商能够供应的所有产品列表。

select  DM1.公司名称,DM2.产品ID,DM2.产品名称,单位数量
from 供应商 DM1 join 产品 DM2 on DM1.供应商ID=DM2.供应商ID
where DM1.城市='重庆'
发表于 2018-12-22 21:32:49
6.        找出雇员郑建杰所有的订单并根据订单销售额排序。

SELECT concat(DM1.姓氏,DM1.名字) as 雇员, FT1.订单ID, sum(FT2.单价*FT2.数量) as 销售额
from 订单 FT1 join 订单明细 FT2 on FT1.订单ID=FT2.订单ID
join 雇员 DM1 on FT1.雇员ID=DM1.雇员ID and concat(DM1.姓氏,DM1.名字) = '郑建杰'
group by concat(DM1.姓氏,DM1.名字) , FT1.订单ID
order by 3 desc
截图201812222133209739.png
编辑于 2018-12-22 21:34  

编辑于 2018-12-22 21:35  
发表于 2018-12-22 21:59:59
7.        找出订单10284的所有产品以及订单金额,运货商。

select FT1.订单ID, DM1.产品名称, FT2.数量*FT2.单价 as 订单金额, DM2.公司名称 as 运货商
from 订单 FT1 join 订单明细 FT2 on FT1.订单ID=FT2.订单ID and FT1.订单ID='10284'
join 产品 DM1 on FT2.产品ID=DM1.产品ID
join 运货商 DM2 on FT1.运货商=DM2.运货商ID
发表于 2018-12-22 22:04:26
8.        建立产品与订单的关联。

select *
from 订单 FT1 join 订单明细 FT2 on FT1.订单ID=FT2.订单ID
join 产品 DM1 on FT2.产品ID=DM1.产品ID
发表于 2018-12-22 22:16:06
9.        计算销量前10位的订单明细,结果集返回订单ID,订单日期,公司名称,发货日期,销售额,并排序

SELECT FT1.订单ID,FT1.订购日期,DM1.公司名称,FT1.发货日期,sum(FT2.数量) as 销量,sum(FT2.数量*FT2.单价) as 销售额
from 订单 FT1 join 订单明细 FT2 on FT1.订单ID=FT2.订单ID
join 客户 DM1 on FT1.客户ID = DM1.客户ID
group by FT1.订单ID,FT1.订购日期,DM1.公司名称,FT1.发货日期
order by 5 desc LIMIT 10
发表于 2018-12-22 22:21:27
10.        按年度统计销售额

select year(FT1.订购日期) as 年度,sum(FT2.数量*FT2.单价) as 销售额
from 订单 FT1 join 订单明细 FT2 on FT1.订单ID=FT2.订单ID
group by year(FT1.订购日期)
发表于 2018-12-22 22:38:39
11.        查询供应商中能够供应的产品样数最多的供应商。

select DM2.公司名称,count(DM1.产品名称) as 产品样数
from 产品 DM1 join 供应商 DM2 on DM1.供应商ID=DM2.供应商ID
group by DM2.公司名称
order by 2 desc LIMIT 1
发表于 2018-12-23 10:11:08
12.        查询产品类别中包含的产品数量最多的类别。

select DM2.类别名称, count(DM1.产品名称) as 产品数量
from 产品 DM1 join 类别 DM2 on DM1.类别ID=DM2.类别ID
group by DM2.类别名称
order by 2 desc
LIMIT 1
发表于 2018-12-23 10:29:14
13.        找出所有的订单中经由哪家运货商运货次数最多。

select DM1.公司名称, COUNT(FT1.订单ID) as 运货次数
from 订单 FT1 join 运货商 DM1 on FT1.运货商=DM1.运货商ID
group by DM1.公司名称
order by 2 desc
LIMIT 1
发表于 2018-12-23 10:34:51
14.        按类别,产品分组,统计销售额。

select DM2.类别名称,DM1.产品名称,sum(FT2.数量*FT2.单价) as 销售额
from 订单 FT1 join 订单明细 FT2 on FT1.订单ID=FT2.订单ID
join 产品 DM1 on FT2.产品ID=DM1.产品ID
join 类别 DM2 on DM1.类别ID=DM2.类别ID
group by DM2.类别名称,DM1.产品名称
发表于 2018-12-23 10:48:22
15.        查询海鲜类别最大的一笔订单。

select FT1.订单ID,FT1.订购日期,sum(FT2.数量*FT2.单价) as 销售额
from 订单 FT1 join 订单明细 FT2 on FT1.订单ID = FT2.订单ID
join 产品 DM1 on FT2.产品ID = DM1.产品ID
join 类别 DM2 on DM1.类别ID = DM2.类别ID and DM2.类别名称 = '海鲜'
group by  FT1.订单ID,FT1.订购日期
order by 3 DESC
LIMIT 1
发表于 2018-12-23 10:56:44
16.        按季度统计销售量

select year(FT1.订购日期) as 年度,quarter(FT1.订购日期) as 季度,sum(FT2.数量) as 销售量
from 订单 FT1 join 订单明细 FT2 on FT1.订单ID = FT2.订单ID

group by  year(FT1.订购日期), quarter(FT1.订购日期)
order by 1,2
发表于 2018-12-23 11:20:15
17.        查出订单总额超出5000的所有订单,客户名称,客户所在地区。

select FT1.订单ID,DM1.公司名称,DM1.地区,sum(FT2.数量*FT2.单价) as 订单金额
from 订单 FT1 join 订单明细 FT2 on FT1.订单ID = FT2.订单ID
join 客户 DM1 on FT1.客户ID = DM1.客户ID

group by  FT1.订单ID,DM1.公司名称,DM1.地区
having sum(FT2.数量*FT2.单价) >5000
order by 4 desc
发表于 2018-12-23 11:24:28
18.        查询哪些产品的年度销售额低于2000

select DM1.产品名称,year(FT1.订购日期) as 年度,sum(FT2.数量*FT2.单价) as 销售金额
from 订单 FT1 join 订单明细 FT2 on FT1.订单ID = FT2.订单ID
join 产品 DM1 on FT2.产品ID = DM1.产品ID

group by  DM1.产品名称,year(FT1.订购日期)
having sum(FT2.数量*FT2.单价) < 2000
order by 3 desc
发表于 2018-12-23 11:26:02
19.        查询所有订单ID开头为102的订单

select *
from 订单
where 订单ID like '102%'
发表于 2018-12-23 11:29:30
20.        查询所有“中硕贸易”,“学仁贸易”,“正人资源”,“中通”客户的订单,(要求使用in函数)

select *
from 订单 FT1 join 客户 DM1 on FT1.客户ID = DM1.客户ID
where DM1.公司名称 in ('中硕贸易','学仁贸易','正人资源','中通')
发表于 2018-12-23 11:33:16
21.        查询所有订单中月份不是单数的订单。

select *
from 订单
where mod(month(订购日期),2) = 0
发表于 2018-12-23 11:56:14
@传说哥
您好。
【订单明细】表中的【折扣】列字段,里面的数据,是不是有问题?
查询该表所有数据时,可以正常显示【折扣】为0.15和0.05的数据。
对【折扣】列字段,单独赋值时,却什么都查不出来。无论是作为数值还是字符,都是一样的。
如下图示:select * from 订单明细;

select * from 订单明细 where 折扣=0.15
UNION all
select * from 订单明细 where 折扣='0.15'


截图201812231159054956.png
=================================
截图201812231157437870.png
编辑于 2018-12-23 18:17  
发表于 2018-12-23 23:13:28
22.        分别各写一个查询,得到订单中折扣为15%,20%的所有订单,并将两个查询再组成一个。

select * from 订单 FT1 join 订单明细 FT2 on FT1.订单ID = FT2.订单ID and FT2.折扣 = 0.15
union ALL
select * from 订单 FT1 join 订单明细 FT2 on FT1.订单ID = FT2.订单ID and FT2.折扣 = 0.2
union ALL
select * from 订单 FT1 join 订单明细 FT2 on FT1.订单ID = FT2.订单ID and FT2.折扣 = '0.15'
union ALL
select * from 订单 FT1 join 订单明细 FT2 on FT1.订单ID = FT2.订单ID and FT2.折扣 = '0.2'

之所以查不出结果,我也很奇怪。
折扣列字段,无论是用字符还是数值,都查不出数据。


发表于 2018-12-24 00:13:21
23.        找出在入职时已超过30岁的所有员工信息

select * from  (
        select 姓氏,名字,出生日期,雇用日期,TIMESTAMPDIFF(YEAR,出生日期,雇用日期) as 入职时年龄 from 雇员  ) FT
where 入职时年龄>30
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

1326回帖数 45关注人数 143068浏览人数
最后回复于:2022-3-23 19:30

返回顶部 返回列表