sql数据库面试笔试题及答案_第1页
sql数据库面试笔试题及答案_第2页
sql数据库面试笔试题及答案_第3页
sql数据库面试笔试题及答案_第4页
sql数据库面试笔试题及答案_第5页
已阅读5页,还剩36页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

sql数据库面试笔试题及答案SQL数据库面试笔试题及答案一、选择题(30分)1.在SQL中,以下哪个关键字用于从表中选取数据?A.INSERTB.UPDATEC.SELECTD.DELETE答案:【C】解析:SELECT是SQL中用于从数据库表中选取数据的命令。INSERT用于插入新数据,UPDATE用于更新现有数据,DELETE用于删除数据。这是SQL的基础知识点,正确理解每个关键字的功能对于SQL操作至关重要。2.下列哪个SQL语句用于向表中添加新数据?A.ADDNEWB.INSERTINTOC.APPENDD.ADDROW答案:【B】解析:INSERTINTO是SQL中用于向表中添加新数据的命令。ADDNEW、APPEND和ADDROW不是标准的SQL关键字。易错警示:很多初学者会混淆INSERT和其他命令的语法,记住正确的INSERTINTO语法结构是"INSERTINTOtable_name(column1,column2,...)VALUES(value1,value2,...)"。3.在SQL中,用于对结果集进行排序的关键字是?A.SORTBYB.GROUPBYC.ORDERBYD.RANKBY答案:【C】解析:ORDERBY是SQL中用于对结果集进行排序的关键字。SORTBY不是有效的SQL关键字,GROUPBY用于分组结果,RANKBY也不是标准SQL语法。基础排序功能是SQL查询的重要操作,ORDERBY可以按升序(ASC)或降序(DESC)排列结果。4.以下哪个SQL函数用于计算平均值?A.SUM()B.COUNT()C.AVG()D.TOTAL()答案:【C】解析:AVG()是SQL中用于计算平均值的聚合函数。SUM()用于求和,COUNT()用于计数,TOTAL()不是标准的SQL聚合函数。聚合函数是SQL数据分析的基础,理解各种聚合函数的用途对于数据统计和分析至关重要。5.在SQL中,用于限制返回结果数量的关键字是?A.LIMITB.TOPC.RESTRICTD.FILTER答案:【A】解析:LIMIT是MySQL和PostgreSQL等数据库中用于限制返回结果数量的关键字。TOP是SQLServer和Access中的等效关键字,RESTRICT和FILTER不是用于此目的的SQL关键字。易错警示:不同数据库系统可能有不同的语法,例如Oracle使用FETCHFIRSTnROWSONLY,而SQLServer使用TOPn。6.以下哪个运算符用于模糊匹配?A.=B.!=C.LIKED.IN答案:【C】解析:LIKE是SQL中用于模糊匹配的运算符,通常与通配符一起使用。=用于精确匹配,!=用于不等于匹配,IN用于指定多个可能的值。模糊匹配是SQL查询中常用的功能,LIKE配合%和_通配符可以实现灵活的模式匹配。7.在SQL中,用于连接两个表的关键字是?A.JOINB.LINKC.CONNECTD.UNION答案:【A】解析:JOIN是SQL中用于连接两个或多个表的关键字。LINK、CONNECT和UNION不是用于连接表的标准SQL关键字。JOIN操作是关系数据库的核心功能,理解不同类型的JOIN(如INNERJOIN、LEFTJOIN等)对于复杂查询至关重要。8.以下哪个SQL子句用于过滤结果?A.WHEREB.HAVINGC.FILTERD.SELECT答案:【A】解析:WHERE子句用于在SELECT语句中过滤结果,基于指定的条件。HAVING用于过滤分组后的结果,FILTER不是标准SQL子句,SELECT用于指定要检索的列。WHERE子句是SQL查询中实现数据筛选的基础,它应用于分组和聚合之前。9.在SQL中,用于分组结果的关键字是?A.GROUPBYB.SORTBYC.ORDERBYD.CLASSIFYBY答案:【A】解析:GROUPBY是SQL中用于将结果集按一个或多个列分组的关键字。SORTBY和ORDERBY用于排序,CLASSIFYBY不是标准SQL关键字。GROUPBY通常与聚合函数一起使用,以便对每个组执行计算。10.以下哪个SQL命令用于修改表结构?A.MODIFYTABLEB.ALTERTABLEC.CHANGETABLED.UPDATETABLE答案:【B】解析:ALTERTABLE是SQL中用于修改表结构的命令。MODIFYTABLE、CHANGETABLE和UPDATETABLE不是标准SQL命令。ALTERTABLE可以添加、删除或修改列,以及添加或删除约束等。这是数据库管理中常用的操作。11.在SQL中,用于合并两个SELECT语句结果的关键字是?A.JOINB.UNIONC.MERGED.COMBINE答案:【B】解析:UNION是SQL中用于合并两个或多个SELECT语句结果的关键字。JOIN用于连接表,MERGE在某些数据库中用于基于条件合并数据,COMBINE不是标准SQL关键字。UNION会去除重复行,而UNIONALL会保留所有行,包括重复行。12.以下哪个SQL约束确保列中的值唯一?A.PRIMARYKEYB.FOREIGNKEYC.UNIQUED.NOTNULL答案:【C】解析:UNIQUE约束确保列中的值唯一。PRIMARYKEY约束也确保值唯一,同时不允许NULL值。FOREIGNKEY用于创建表之间的关系,NOTNULL确保列不能有NULL值。UNIQUE约束常用于需要唯一标识但不是主键的场景。13.在SQL中,用于删除表中所有数据但不删除表结构的关键字是?A.DELETETABLEB.DROPTABLEC.TRUNCATETABLED.REMOVETABLE答案:【C】解析:TRUNCATETABLE用于删除表中的所有行,但保留表结构。DELETETABLE不是有效命令,DROPTABLE用于删除整个表,包括结构。TRUNCATE比DELETE更快,因为它不记录每行的删除操作,但通常不能回滚。14.以下哪个SQL函数用于返回当前日期和时间?A.NOW()B.CURRENT_DATE()C.GETDATE()D.以上都是答案:【D】解析:NOW()在MySQL和SQLite中返回当前日期和时间,CURRENT_DATE()在某些数据库中返回当前日期,GETDATE()在SQLServer中返回当前日期和时间。不同数据库系统可能有不同的函数名称来获取当前日期和时间,但都提供类似功能。15.在SQL中,用于创建视图的关键字是?A.CREATEVIEWB.MAKEVIEWC.NEWVIEWD.ADDVIEW答案:【A】解析:CREATEVIEW是SQL中用于创建视图的关键字。MAKEVIEW、NEWVIEW和ADDVIEW不是标准SQL命令。视图是虚拟表,基于SQL结果集,可以简化复杂查询并提高数据安全性。二、填空题(20分)1.在SQL中,使用______关键字可以对查询结果进行分组后过滤。答案:【HAVING】解析:HAVING子句用于对分组后的结果进行过滤。与WHERE子句不同,WHERE在分组前过滤数据,而HAVING在分组后过滤。易错警示:初学者常混淆WHERE和HAVING的使用场景,记住WHERE过滤行,HAVING过滤组。2.SQL中的______约束确保列不能包含NULL值。答案:【NOTNULL】解析:NOTNULL约束确保列不接受NULL值,即该列必须包含值。这是数据库设计中常用的约束,用于确保数据的完整性。定义:NOTNULL约束是一种列级约束,强制列必须始终包含值,不允许为空。3.在SQL中,使用______运算符可以进行模糊匹配,通常与通配符%和_一起使用。答案:【LIKE】解析:LIKE运算符用于在WHERE子句中进行模式匹配,通常与通配符一起使用。%表示零个或多个字符,_表示单个字符。例如,'LIKE'A%''匹配以A开头的所有字符串。4.SQL中的______函数用于计算指定列中值的数量。答案:【COUNT】解析:COUNT()是SQL聚合函数,用于计算表中行的数量或指定列中非NULL值的数量。COUNT()计算所有行,COUNT(column)计算指定列中非NULL值的数量。这是数据分析中常用的基础函数。5.在SQL中,使用______关键字可以创建一个虚拟表,基于SQL查询的结果。答案:【CREATEVIEW】解析:CREATEVIEW用于创建视图,视图是虚拟表,其内容由存储的查询定义。视图可以简化复杂查询,限制数据访问,并提高数据安全性。应用场景:视图常用于简化复杂查询、提供数据抽象层和实现安全访问控制。6.SQL中的______约束用于确保两个表之间的关系,确保引用完整性。答案:【FOREIGNKEY】解析:FOREIGNKEY约束用于创建和强制表之间的链接,确保引用完整性。它是一个表中的一个字段或字段组合,是另一个表的主键。定义:外键是一个表中的一个字段,它引用另一个表的主键,用于维护两个表之间的关系。7.在SQL中,使用______关键字可以合并两个或多个SELECT语句的结果,并去除重复行。答案:【UNION】解析:UNION操作符用于合并两个或多个SELECT语句的结果集,并自动去除重复行。如果需要保留所有行(包括重复行),应使用UNIONALL。易错警示:UNION要求所有SELECT语句的列数和对应列的数据类型必须相同。8.SQL中的______函数用于计算指定列的总和。答案:【SUM】解析:SUM()是SQL聚合函数,用于计算数值列的总和。它通常与GROUPBY子句一起使用,以计算每个组的总和。公式:SUM(column)=所有非NULL值的总和。这是财务统计和数据分析中常用的函数。9.在SQL中,使用______关键字可以修改表的结构,如添加、删除或修改列。答案:【ALTERTABLE】解析:ALTERTABLE是SQL命令,用于修改现有表的结构。它可以添加、删除或修改列,添加或删除约束,重命名表等。这是数据库管理中常用的操作,用于适应业务需求的变化。10.SQL中的______约束用于确保表中的每一行都有一个唯一标识,且不允许NULL值。答案:【PRIMARYKEY】解析:PRIMARYKEY约束用于唯一标识表中的每一行记录,确保唯一性且不允许NULL值。一个表只能有一个主键,但可以由多个列组成(复合主键)。定义:主键是表中一个或多个字段的组合,用于唯一标识表中的每一行记录。三、判断题(10分)1.SQL中的WHERE子句用于对分组后的结果进行过滤。答案:【错误】解析:WHERE子句用于对分组前的行进行过滤,而对分组后的结果进行过滤应使用HAVING子句。这是SQL中常见的易错点,理解WHERE和HAVING的区别对于编写正确的分组查询至关重要。2.在SQL中,DELETE语句用于删除表中的数据,而DROP语句用于删除整个表结构。答案:【正确】解析:DELETE语句用于删除表中的行数据,但保留表结构;DROP语句用于删除整个表,包括表结构和数据。这是数据库操作中的基本区别,正确使用这两个命令对于数据管理非常重要。3.SQL中的COUNT()函数计算表中的所有行,包括NULL值。答案:【正确】解析:COUNT()函数计算表中的所有行,无论列值是否为NULL。这与COUNT(column)不同,后者只计算指定列中非NULL值的数量。易错警示:很多人误以为COUNT()会忽略NULL值,实际上它会计算所有行。4.在SQL中,UNION操作符会合并两个SELECT语句的结果,并自动去除重复行。答案:【正确】解析:UNION操作符用于合并两个或多个SELECT语句的结果集,并自动去除重复行。如果需要保留所有行(包括重复行),应使用UNIONALL。这是SQL中集合操作的基础知识点。5.SQL中的视图是物理存在的表,存储在数据库中。答案:【错误】解析:视图是虚拟表,不存储实际数据,而是存储定义视图的SQL查询。视图的数据来自于基本表,当基本表数据变化时,视图数据也会相应变化。理解视图的虚拟特性对于正确使用视图非常重要。6.在SQL中,TRUNCATETABLE命令可以回滚,而DELETETABLE命令不能回滚。答案:【错误】解析:TRUNCATETABLE通常不能回滚(在某些数据库系统中可能可以),而DELETETABLE可以回滚。TRUNCATE是DDL命令,删除速度快但不记录每行的删除操作;DELETE是DML命令,速度慢但可以回滚。易错警示:很多人误以为TRUNCATE可以回滚,实际上它通常不能。7.SQL中的INNERJOIN返回两个表中匹配的行,而LEFTJOIN返回左表中的所有行和右表中匹配的行。答案:【正确】解析:INNERJOIN只返回两个表中匹配的行;LEFTJOIN(或LEFTOUTERJOIN)返回左表中的所有行,以及右表中匹配的行,如果右表没有匹配则结果中右表的列为NULL。这是SQL中JOIN操作的基础知识点,理解不同JOIN类型的区别对于编写正确的查询至关重要。8.在SQL中,NULL表示未知或缺失的值,NULL等于NULL。答案:【错误】解析:NULL表示未知或缺失的值,但在SQL中,NULL不等于NULL。任何与NULL的比较都会返回UNKNOWN,而不是TRUE或FALSE。这是SQL中处理NULL值的重要特性,正确理解NULL的行为对于编写健壮的查询至关重要。9.SQL中的UPDATE语句用于修改表中的数据,可以同时更新多行和多列。答案:【正确】解析:UPDATE语句用于修改表中的现有数据,语法为"UPDATEtable_nameSETcolumn1=value1,column2=value2WHEREcondition;"。它可以同时更新多行(如果WHERE条件匹配多行)和多列。这是数据库操作中的基本命令。10.在SQL中,索引总是提高查询性能,但会降低写入性能。答案:【正确】解析:索引可以显著提高查询速度,特别是对于大型表,但会增加写入操作(INSERT、UPDATE、DELETE)的开销,因为索引也需要更新。理解索引的优缺点对于数据库性能优化至关重要,需要根据查询模式合理设计索引。四、简答题(20分)1.解释SQL中INNERJOIN、LEFTJOIN和RIGHTJOIN的区别,并举例说明各自的使用场景。答案:INNERJOIN(内连接)只返回两个表中匹配的行。如果没有匹配,则该行不会出现在结果中。LEFTJOIN(左连接)返回左表中的所有行,以及右表中匹配的行。如果右表没有匹配,结果中右表的列将显示为NULL。RIGHTJOIN(右连接)返回右表中的所有行,以及左表中匹配的行。如果左表没有匹配,结果中左表的列将显示为NULL。使用场景:-INNERJOIN:当只需要两个表中都有匹配的记录时,例如查询同时有订单和客户信息的订单记录。-LEFTJOIN:当需要保留左表中的所有记录,即使右表没有匹配,例如查询所有客户及其订单信息(包括没有订单的客户)。-RIGHTJOIN:当需要保留右表中的所有记录,即使左表没有匹配,例如查询所有产品及其销售信息(包括尚未销售的产品)。解析:JOIN操作是SQL中实现表关联的核心功能,理解不同JOIN类型的区别对于编写正确的查询至关重要。INNERJOIN适用于需要严格匹配的场景,而LEFTJOIN和RIGHTJOIN适用于需要保留一侧所有数据的场景。在实际应用中,LEFTJOIN更为常用,因为通常我们更关心保留主表中的所有记录。易错警示:初学者常混淆LEFTJOIN和RIGHTJOIN的使用,应根据业务需求选择合适的连接方式,而不是随意使用。此外,注意JOIN条件的正确编写,避免笛卡尔积的产生。2.解释SQL中的事务(Transaction)及其ACID特性,并举例说明事务的使用场景。答案:事务是SQL中的一个逻辑单元,由一个或多个SQL语句组成,作为一个整体执行。事务确保数据库从一个一致状态转换到另一个一致状态。ACID特性包括:-原子性(Atomicity):事务是一个不可分割的工作单元,事务中的所有操作要么全部成功,要么全部失败回滚。-一致性(Consistency):事务必须使数据库从一个一致状态转换到另一个一致状态,保持数据库的完整性约束。-隔离性(Isolation):并发执行的事务是相互隔离的,一个事务的执行不应影响其他事务。-持久性(Durability):一旦事务提交,其对数据库的修改就是永久性的,即使系统发生故障也不会丢失。使用场景:-银行转账:从一个账户扣款,同时向另一个账户存款,这两个操作必须作为一个事务执行,确保要么全部成功,要么全部回滚。-订单处理:创建订单、减少库存、生成支付记录等操作需要作为一个事务执行,确保数据一致性。-票务系统:购买火车票时,需要检查座位可用性、锁定座位、生成订单等操作作为一个事务执行,避免同一座位被多次出售。解析:事务是数据库管理系统的核心概念,ACID特性确保了数据的完整性和一致性。在实际应用中,正确使用事务可以避免数据不一致的问题。例如,在银行转账场景中,如果没有事务机制,可能出现从一个账户扣款成功但向另一个账户存款失败的情况,导致资金丢失。定义:事务是数据库操作的逻辑单元,它确保一组操作要么全部成功,要么全部失败,维护数据库的完整性。易错警示:开发者在使用事务时,应注意事务的范围不宜过大,长时间运行的事务会影响系统性能;同时,应确保在适当的时候提交或回滚事务,避免资源锁定问题。3.解释SQL中的索引(Index)及其优缺点,并举例说明适合创建索引的列。答案:索引是数据库表中一列或多列值的排序结构,用于快速查询和检索数据。索引类似于书籍的目录,通过索引可以快速定位到所需数据。优点:-大幅提高查询速度,特别是对于大型表-确保数据的唯一性(如主键索引)-加速表与表之间的连接-减少排序和分组的时间缺点:-占用额外的存储空间-降低INSERT、UPDATE和DELETE操作的速度,因为索引也需要更新-创建和维护索引需要时间适合创建索引的列:-经常用于查询条件的列(如WHERE子句中的列)-经常用于排序的列(如ORDERBY子句中的列)-经常用于连接的列(如JOIN条件中的列)-主键列(自动创建索引)-外键列(通常建议创建索引)-唯一性约束列(自动创建索引)不适合创建索引的列:-数据量小的表(创建索引可能得不偿失)-更新非常频繁的列(索引维护开销大)-基数低的列(如性别列,只有很少的不同值)-很少用于查询条件的列解析:索引是数据库性能优化的重要手段,合理使用索引可以显著提高查询性能。然而,索引不是越多越好,因为索引会增加存储空间和写入开销。在实际应用中,应根据查询模式和数据特征创建适当的索引。例如,在一个用户管理系统中,用户ID、用户名和邮箱等经常用于查询条件的列适合创建索引;而用户注册时间虽然经常用于排序,但如果查询条件很少使用,则可以考虑是否创建索引。计算过程:索引的选择通常基于查询的执行计划,通过分析查询的频率和性能影响来确定哪些列需要索引。易错警示:开发者常误以为索引越多越好,实际上过多的索引会增加写入开销和存储空间,应根据实际查询需求合理创建索引。4.解释SQL中的窗口函数(WindowFunction)及其与聚合函数的区别,并举例说明窗口函数的常见应用场景。答案:窗口函数是在查询结果集的特定窗口上执行计算的函数,它不会将多行压缩成一行,而是为每一行返回一个值。窗口函数通常与OVER子一起使用。与聚合函数的区别:-聚合函数将多行压缩成一行,而窗口函数为每一行返回一个值-聚合函数通常与GROUPBY子句一起使用,而窗口函数不使用GROUPBY-聚合函数生成汇总结果,而窗口函数可以在不改变行数的情况下添加汇总信息常见的窗口函数:-排序函数:ROW_NUMBER(),RANK(),DENSE_RANK(),NTILE()-聚合窗口函数:SUM(),AVG(),COUNT(),MAX(),MIN()-偏移函数:LAG(),LEAD()-其他:FIRST_VALUE(),LAST_VALUE()常见应用场景:-计算排名:如员工销售额排名、学生成绩排名-计算移动平均:如计算过去7天的平均销售额-计算同比/环比:如比较本月与上月或去年同期的销售数据-计算累计总和:如计算到当前日期的累计销售额-查找前后行数据:如查找每个员工的前一个和后一个员工的信息语法示例:SELECTemployee_id,salary,AVG(salary)OVER(PARTITIONBYdepartment_id)ASavg_salary_by_dept,RANK()OVER(ORDERBYsalaryDESC)ASsalary_rankFROMemployees;解析:窗口函数是SQL中非常强大的功能,它允许在不改变查询结果行数的情况下进行复杂的计算。与传统的聚合函数不同,窗口函数为每一行返回一个值,这使得它在分析型查询中非常有用。例如,在销售数据分析中,我们可以使用窗口函数同时查看每个销售人员的销售额、部门的平均销售额以及所有销售人员的销售额排名。公式:窗口函数的基本语法为"function()OVER(PARTITIONBYcolumn1ORDERBYcolumn2)",其中PARTITIONBY定义窗口的分区,ORDERBY定义窗口内的排序。易错警示:初学者常混淆窗口函数和聚合函数的使用场景,记住窗口函数不会减少结果集中的行数,而聚合函数会。此外,注意窗口函数的执行顺序,它在GROUPBY和HAVING之后、ORDERBY之前执行。五、计算题(10分)1.假设有一个学生表(students)和一个成绩表(grades),表结构如下:students表:-student_id(INT,主键)-student_name(VARCHAR)-gender(VARCHAR)-age(INT)grades表:-grade_id(INT,主键)-student_id(INT,外键)-subject(VARCHAR)-score(FLOAT)请编写SQL查询,找出每个学生的平均成绩,并按照平均成绩降序排列,同时显示每个学生的姓名和年龄。答案:```sqlSELECTs.student_name,s.age,AVG(g.score)ASaverage_scoreFROMstudentssJOINgradesgONs.student_id=g.student_idGROUPBYs.student_id,s.student_name,s.ageORDERBYaverage_scoreDESC;```解析:此查询使用了JOIN连接学生表和成绩表,然后使用GROUPBY按学生ID、姓名和年龄分组,计算每个学生的平均成绩。最后使用ORDERBY按平均成绩降序排列。计算过程:首先通过JOIN将两个表关联起来,然后使用GROUPBY将相同学生的成绩分组,最后使用AVG()函数计算每个组的平均值。易错警示:在GROUPBY子句中必须包含所有非聚合列,否则会导致错误。此外,注意JOIN条件必须正确指定,以避免笛卡尔积。2.假设有一个订单表(orders)和一个订单详情表(order_items),表结构如下:orders表:-order_id(INT,主键)-customer_id(INT)-order_date(DATE)-total_amount(DECIMAL)order_items表:-item_id(INT,主键)-order_id(INT,外键)-product_id(INT)-quantity(INT)-unit_price(DECIMAL)请编写SQL查询,找出2023年销售额最高的前5个产品,并计算每个产品的总销售额和销售数量。答案:```sqlSELECTduct_id,SUM(oi.quantityoi.unit_price)AStotal_sales,SUM(oi.quantity)AStotal_quantityFROMorder_itemsoiJOINordersoONoi.order_id=o.order_idWHEREo.order_dateBETWEEN'2023-01-01'AND'2023-12-31'GROUPBYduct_idORDERBYtotal_salesDESCLIMIT5;```解析:此查询首先通过JOIN将订单详情表和订单表关联起来,然后筛选出2023年的订单。接着按产品ID分组,计算每个产品的总销售额(销售数量×单价)和总销售数量。最后按照总销售额降序排列,并限制结果为前5条记录。计算过程:使用SUM()函数计算每个产品的总销售额和销售数量,其中总销售额=SUM(quantityunit_price),总销售数量=SUM(quantity)。易错警示:在计算总销售额时,应使用quantityunit_price而不是直接使用订单的总金额,因为一个订单可能包含多个产品。此外,注意日期条件的正确编写,确保使用BETWEEN或适当的日期比较。六、材料综合题(10分)1.假设有一个电子商务系统的数据库,包含以下表结构:customers表:-customer_id(INT,主键)-customer_name(VARCHAR)-email(VARCHAR,唯一)-registration_date(DATE)-status(VARCHAR:'active','inactive')products表:-product_id(INT,主键)-product_name(VARCHAR)-category_id(INT)-price(DECIMAL)-stock_quantity(INT)categories表:-category_id(INT,主键)-category_name(VARCHAR)orders表:-order_id(INT,主键)-customer_id(INT,外键)-order_date(DATE)-total_amount(DECIMAL)-status(VARCHAR:'pending','processing','shipped','delivered','cancelled')order_items表:-item_id(INT,主键)-order_id(INT,外键)-product_id(INT,外键)-quantity(INT)-unit_price(DECIMAL)请根据上述表结构,编写SQL查询完成以下任务:a)找出2023年每个类别的销售总额,并按照销售总额降序排列。b)找出购买了至少3个不同类别产品的活跃客户,并显示这些客户的ID、名称和购买的不同类别数量。c)找出每个产品的平均销售价格(与产品原价比较),并计算每个产品的价格差异(平均销售价格-产品原价)。d)找出订单状态为"delivered"但超过30天未完成(从订单日期到当前日期)的订单,并显示订单ID、客户名称和订单日期。答案:```sql--a)找出2023年每个类别的销售总额,并按照销售总额降序排列SELECTc.category_name,SUM(oi.quantityoi.unit_price)AStotal_salesFROMorder_itemsoiJOINordersoONoi.order_id=o.order_idJOINproductspONduct_id=duct_idJOINcategoriescONp.category_id=c.category_idWHEREo.order_dateBETWEEN'2023-01-01'AND'2023-12-31'ANDo.status='delivered'GROUPBYc.category_nameORDERBYtotal_salesDESC;--b)找出购买了至少3个不同类别产品的活跃客户,并显示这些客户的ID、名称和购买的不同类别数量SELECTc.customer_id,c.customer_name,COUNT(DISTINCTp.category_id)ASunique_categories_countFROM

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论