sql划水记录

20220718日报

  • 引言
  • sql动词
  • 单表查询
  • 多表查询
  • sql巩固测试题

引言

大概原因很简单,sql搞崩了,于是重做考核题,可能会有些有问题的地方,我努力加油冲。

sql动词

SQL功能 动词
数据定义 CREATE,DROP,ALTER
数据查询 SELECT
数据操纵 INSERT,UPDATE,DELETE
数据控制 GRANT,REVOKE

单表查询

–查询订购日期在1996年7月1日至1996年7月15日之间的订单的订购日期、订单ID、客户ID和雇员ID等字段的值

select 订购日期,订单ID,客户ID,雇员ID from 订单
where 订购日期 between '1996-07-01' and '1996-07-15' ;

sql划水记录_第1张图片

–查询供应商的ID、公司名称、地区、城市和电话字段的值。条件是“地区等于华北”并且“联系人头衔等于销售代表”。

select 供应商ID,公司名称,地区,城市,电话,联系人职务 from 供应商
where 地区 = '华北' and 联系人职务 = '销售代表';

sql划水记录_第2张图片

–查询供应商的ID、公司名称、地区、城市和电话字段的值。其中的一些供应商位于华东或华南地区,另外一些供应商所在的城市是天津

select 供应商ID,公司名称,城市,地区,电话 from 供应商
where 地区 = '华东'or 地区 = '华南' or 城市 = '天津';

一种错误写法:where 地区 = '华东'or'华南',这种情况只会输出华东地区,不会输出华南地区
sql划水记录_第3张图片

–查询位于“华东”或“华南”地区的供应商的ID、公司名称、地区、城市和电话字段的值

select 供应商ID,公司名称,地区,城市,电话 from 供应商
where 地区 = '华东'or 地区 = '华南';

sql划水记录_第4张图片

多表查询

–查询订购日期在1996年7月1日至1996年7月15日之间的订单的订购日期、订单ID、相应订单的客户公司名称、负责订单的雇员的姓氏和名字等字段的值,并将查询结果按雇员的“姓氏”和“名字”字段的升序排列,“姓氏”和“名字”值相同的记录按“订单 ID”的降序排列

select 订购日期,订单ID,公司名称,姓氏,名字 from 订单,雇员,客户
where 订单.客户ID = 客户.客户ID 
and 雇员.雇员ID = 订单.雇员ID 
and 订单.订购日期 between '1996-07-01' and '1996-07-15' 
order by 订单ID desc,姓氏,名字;

初步写的内容如上,输出数据如下

  1. 在这里的书写中是有报错的,经检查发现需要多加了解order by的语法。
  2. 在书写中发现需要注意一下order的排序按照的是中文逻辑而不是底层逻辑,在后面的语句要在前面语句成立的情况下再排序
    sql划水记录_第5张图片

经过查询发现是以下原因。

如果存储汉字的字段编码使用的是GBK字符集,因为GBK内码编码时本身就采用了拼音排序的方法,直接在查询语句后面添加ORDER BY name ASC,查询结果将按照姓氏的升序排序;如果存储姓名的字段采用的是utf8字符集,需要在排序的时候对字段进行转码,对应的代码是order by convert(name using gbk) ASC,同样,查询的结果也是按照姓氏的升序排序。

而姓氏和名字采用的是utf8字符集.
所以需要涉及到字符串的强转
sql划水记录_第6张图片
由于实际中我们不能总写笛卡尔积,所以在这里经过提示要用左连接来练习

select 订购日期,订单ID,客户.公司名称,雇员.姓氏,雇员.名字 from 订单
join 雇员 on 雇员.雇员ID = 订单.雇员ID
join 客户 on 订单.客户ID = 客户.客户ID
where 订单.订购日期 between '1996-07-01' and '1996-07-15' 
order by convert(姓氏 using gbk)ASC, convert(名字 using gbk)ASC, convert(订单ID using gbk)DESC

sql划水记录_第7张图片

注意左连接的时候要注意左连接的格式

–查询“10248”和“10254”号订单的订单ID、运货商的公司名称、订单上所订购的产品的名称

select 订单.订单ID,运货商.公司名称,产品.产品名称 from 订单
join 运货商 on 运货商.运货商ID = 订单.运货商
join 订单明细 on 订单.订单ID = 订单明细.订单ID
join 产品 on 产品.产品ID = 订单明细.产品ID
where 订单.订单ID = 10248 or 订单.订单ID = 10254

sql划水记录_第8张图片

–查询“10248”和“10254”号订单的订单ID、订单上所订购的产品的名称、数量、单价和折扣

select 订单.订单ID,产品.产品名称,订单明细.数量,产品.单价,订单明细.折扣 from 订单
join 订单明细 on 订单.订单ID = 订单明细.订单ID
join 产品 on 产品.产品ID = 订单明细.产品ID
where 订单.订单ID = 10248 or 订单.订单ID = 10254

sql划水记录_第9张图片

–查询“10248”和“10254”号订单的订单ID、订单上所订购的产品的名称及其销售金额
销售金额 = 订单明细.单价 * 数量 * (1 - 折扣)
(摆烂不想写了,自行脑补吧)

sql巩固测试题

查询供应商中能够供应的产品样数最多的供应商。
查询产品类别中包含的产品数量最多的类别。
找出所有的订单中经由哪家运货商运货次数最多。
按类别,产品分组,统计销售额。
查询海鲜类别最大的一笔订单。
按季度统计销售量
查出订单总额超出5000的所有订单,客户名称,客户所在地区。
查询哪些产品的年度销售额低于2000
查询所有订单ID开头为102的订单
查询所有“中硕贸易”,“学仁贸易”,“正人资源”,“中通”客户的订单,(要求使用in函数)
-----以上考试时间一个班销售
查询所有订单中月份不是单数的订单。
分别各写一个查询,得到订单中折扣为15%,20%的所有订单,并将两个查询再组成一个。
找出在入职时已超过30岁的所有员工信息
找出所有单价大于30的产品(附加要求,产品类别,供应商作为参数,当产品类别和供应商都为空的时候,nofilter)
查询所有库存产品的总额,并按照总额排序
检索出职务为销售代表的所有订单中,每笔订单总额低于2000的订单明细,以及相关供应商名称。
检索出向艾德高科技提供产品的供应商所在的城市。
计算每一笔订单的发货期(从订购到发货),运货期(从发货到到货)的时常,并按照发货期从长到短的顺序进行排序。
将产品表和运货商两个无关的表整合为一个表
获取在北京工作并向福星制衣厂股份有限公司发送过订单的职工名称。

你可能感兴趣的:(sql,数据库,mysql)