2025年SQL高频考点冲刺试卷_第1页
2025年SQL高频考点冲刺试卷_第2页
2025年SQL高频考点冲刺试卷_第3页
2025年SQL高频考点冲刺试卷_第4页
2025年SQL高频考点冲刺试卷_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

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

文档简介

2025年SQL高频考点冲刺试卷考试时间:______分钟总分:______分姓名:______一、假设有一个名为`employees`的表,包含以下列:`employee_id`(INT,主键),`first_name`(VARCHAR),`last_name`(VARCHAR),`email`(VARCHAR),`department_id`(INT),`salary`(DECIMAL),`hire_date`(DATE)。请写出以下查询的SQL语句:1.查询所有员工的`first_name`、`last_name`和`email`信息。2.查询`salary`超过8000的所有员工的`employee_id`和`salary`。3.查询`department_id`为5的所有员工的`first_name`和`department_id`。4.查询`hire_date`在'2020-01-01'之后的员工数量。5.查询`department_id`为2或4的所有员工的`email`。二、假设存在两个表:`orders`(订单表)和`customers`(客户表)。`orders`表包含:`order_id`(INT,主键),`customer_id`(INT,外键关联到`customers`表),`order_date`(DATE),`total_amount`(DECIMAL)。`customers`表包含:`customer_id`(INT,主键),`customer_name`(VARCHAR),`city`(VARCHAR)。请写出以下查询的SQL语句:1.查询所有订单的`order_id`、`customer_id`和`total_amount`,并按`total_amount`降序排列。2.查询订单总金额超过10000的所有订单的`order_id`和对应的`customer_id`。3.查询来自'NewYork'的所有客户的`customer_id`和`customer_name`。4.查询每个客户的订单总数和订单总金额。要求只显示订单总数大于2的客户信息。5.查询订单日期在'2023-06-01'之后的,来自'London'的所有客户的`customer_id`。三、假设有一个名为`sales`的表,包含以下列:`sale_id`(INT,主键),`product_id`(INT),`sale_date`(DATE),`quantity`(INT),`unit_price`(DECIMAL)。请写出以下查询的SQL语句:1.查询每种产品的总销售数量(`total_quantity`)和总销售金额(`total_sales`)。要求按`product_id`升序排列。2.查询在'2023-12-01'到'2023-12-31'期间,每种产品的平均销售单价(`average_unit_price`)。3.查询销售数量超过50的所有记录的`sale_id`、`product_id`和`quantity`。4.查询每种产品的销售额(`sales_amount`),要求只显示销售额(`quantity`*`unit_price`)超过2000的产品。使用窗口函数完成此查询。5.查询每种产品最近一次销售记录的`sale_id`和`sale_date`。使用窗口函数完成此查询。四、使用以下SQL语句创建一个名为`sales_summary`的视图,该视图包含`product_id`、`total_quantity`(产品总销售数量)和`total_sales`(产品总销售金额)。```sqlCREATEVIEWsales_summaryASSELECTproduct_id,SUM(quantity)AStotal_quantity,SUM(quantity*unit_price)AStotal_salesFROMsalesGROUPBYproduct_id;```基于此视图,请写出以下查询的SQL语句:1.查询视图`sales_summary`中,`total_sales`超过10000的所有产品的`product_id`和`total_sales`。2.查询视图`sales_summary`中,`total_quantity`最多的前3个产品的`product_id`和`total_quantity`。3.删除刚才创建的`sales_summary`视图。五、假设有一个名为`products`的表,包含以下列:`product_id`(INT,主键),`product_name`(VARCHAR),`category`(VARCHAR),`price`(DECIMAL),`description`(TEXT)。请写出以下查询的SQL语句:1.查询所有产品信息,并按`category`分组,统计每个分类的产品数量(`count`)。2.查询价格在50到200之间的所有产品的`product_id`和`product_name`。3.为所有产品价格增加10%。4.查询产品描述中包含'wireless'的所有产品的`product_id`和`product_name`。5.创建一个新表`products_backup`,结构与`products`表完全相同,并将`products`表中的所有数据复制到`products_backup`中。六、请解释以下概念:1.什么是`INNERJOIN`?它与`LEFTJOIN`有什么主要区别?2.什么是事务(Transaction)?请简述事务的ACID特性。3.什么是索引(Index)?在什么情况下使用索引可以提高查询性能?请举例说明。试卷答案一、1.```sqlSELECTfirst_name,last_name,emailFROMemployees;```*解析思路:直接列出需要查询的列(`first_name`,`last_name`,`email`),从`employees`表中检索。2.```sqlSELECTemployee_id,salaryFROMemployeesWHEREsalary>8000;```*解析思路:选择`employee_id`和`salary`列,从`employees`表中筛选出`salary`值大于8000的记录。3.```sqlSELECTfirst_name,department_idFROMemployeesWHEREdepartment_id=5;```*解析思路:选择`first_name`和`department_id`列,从`employees`表中筛选出`department_id`值等于5的记录。4.```sqlSELECTCOUNT(*)FROMemployeesWHEREhire_date>'2020-01-01';```*解析思路:使用`COUNT(*)`聚合函数计算满足条件(`hire_date`在'2020-01-01'之后)的记录总数。需要指定从`employees`表中统计。5.```sqlSELECTemailFROMemployeesWHEREdepartment_idIN(2,4);```*解析思路:选择`email`列,从`employees`表中筛选出`department_id`值为2或4的记录。使用`IN`子句简化多值条件查询。二、1.```sqlSELECTorder_id,customer_id,total_amountFROMordersORDERBYtotal_amountDESC;```*解析思路:选择`orders`表中的`order_id`,`customer_id`,`total_amount`列,使用`ORDERBY`子句按`total_amount`列降序排列结果。2.```sqlSELECTorder_id,customer_idFROMordersWHEREtotal_amount>10000;```*解析思路:选择`orders`表中的`order_id`和`customer_id`列,使用`WHERE`子句筛选出`total_amount`大于10000的订单记录。3.```sqlSELECTcustomer_id,customer_nameFROMcustomersWHEREcity='NewYork';```*解析思路:选择`customers`表中的`customer_id`和`customer_name`列,使用`WHERE`子句筛选出`city`值为'NewYork'的客户记录。4.```sqlSELECTc.customer_id,COUNT(o.order_id)ASorder_count,SUM(o.total_amount)AStotal_spentFROMcustomerscJOINordersoONc.customer_id=o.customer_idGROUPBYc.customer_idHAVINGCOUNT(o.order_id)>2;```*解析思路:使用`JOIN`将`customers`表(`c`)和`orders`表(`o`)通过`customer_id`关联起来。选择客户`customer_id`、订单数量(`COUNT(o.order_id)`)和总消费金额(`SUM(o.total_amount)`)。使用`GROUPBY`对每个客户进行分组。使用`HAVING`子句过滤出订单数量(`order_count`)大于2的客户。5.```sqlSELECTc.customer_idFROMcustomerscJOINordersoONc.customer_id=o.customer_idWHEREo.order_date>'2023-06-01'ANDc.city='London';```*解析思路:使用`JOIN`将`customers`表(`c`)和`orders`表(`o`)通过`customer_id`关联。选择`customers`表的`customer_id`列。使用`WHERE`子句同时筛选出`orders`表中`order_date`在'2023-06-01'之后的记录,以及`customers`表中`city`为'London'的记录。三、1.```sqlSELECTproduct_id,SUM(quantity)AStotal_quantity,SUM(quantity*unit_price)AStotal_salesFROMsalesGROUPBYproduct_idORDERBYproduct_idASC;```*解析思路:使用`SUM()`聚合函数计算每个`product_id`的总销售数量(`total_quantity`)和总销售金额(`total_sales`=`quantity`*`unit_price`)。使用`GROUPBY`子句按`product_id`分组数据。使用`ORDERBY`子句按`product_id`升序排列结果。2.```sqlSELECTproduct_id,AVG(unit_price)ASaverage_unit_priceFROMsalesWHEREsale_dateBETWEEN'2023-12-01'AND'2023-12-31'GROUPBYproduct_id;```*解析思路:使用`AVG()`聚合函数计算在指定日期范围('2023-12-01'到'2023-12-31')内,每个`product_id`的平均销售单价(`average_unit_price`)。使用`WHERE`子句限定日期范围。使用`GROUPBY`子句按`product_id`分组。3.```sqlSELECTsale_id,product_id,quantityFROMsalesWHEREquantity>50;```*解析思路:直接选择`sale_id`,`product_id`,`quantity`列,从`sales`表中筛选出`quantity`值大于50的记录。4.```sqlSELECTproduct_id,SUM(quantity*unit_price)ASsales_amountFROMsalesGROUPBYproduct_idHAVINGSUM(quantity*unit_price)>2000;```*解析思路:计算`product_id`的销售额(`sales_amount`=`quantity`*`unit_price`)。使用`SUM()`聚合函数计算每个产品的总销售额。使用`GROUPBY`子句按`product_id`分组。使用`HAVING`子句过滤出总销售额大于2000的产品。5.```sqlSELECTsale_id,sale_date,ROW_NUMBER()OVER(PARTITIONBYproduct_idORDERBYsale_dateDESC)ASrnFROMsalesWHEREproduct_idIN(SELECTDISTINCTproduct_idFROMsales);```*解析思路:使用窗口函数`ROW_NUMBER()`。`PARTITIONBYproduct_id`将数据按产品分组。`ORDERBYsale_dateDESC`在每个产品组内按销售日期降序排列。`ROW_NUMBER()`为每个组内的记录分配一个唯一的序号(`rn`)。外层查询选择`sale_id`和`sale_date`,并通过`WHERE`子句确保每个产品的记录都被包含在窗口函数计算中(这里用子查询确保,实际中可能不需要,因为窗口函数会处理表内所有行)。最后,需要筛选出每个产品组中`rn`为1的记录,即最新的一条记录。更简洁的方式是:```sqlSELECTsale_id,sale_dateFROM(SELECTsale_id,sale_date,ROW_NUMBER()OVER(PARTITIONBYproduct_idORDERBYsale_dateDESC)ASrnFROMsales)ASsubWHEREsub.rn=1;```四、1.```sqlSELECTproduct_id,total_quantity,total_salesFROMsales_summaryWHEREtotal_sales>10000;```*解析思路:直接从名为`sales_summary`的视图中选择`product_id`,`total_quantity`,`total_sales`列,并使用`WHERE`子句筛选出`total_sales`大于10000的记录。2.```sqlSELECTproduct_id,total_quantityFROMsales_summaryORDERBYtotal_quantityDESCLIMIT3;```*解析思路:从`sales_summary`视图中选择`product_id`和`total_quantity`列。使用`ORDERBYtotal_quantityDESC`按总数量降序排列。使用`LIMIT3`简单地获取前三条记录(注意:`LIMIT`的具体语法可能因数据库系统而异,如MySQL使用`LIMIT3`,SQLServer使用`TOP3`)。3.```sqlDROPVIEWsales_summary;```*解析思路:使用`DROPVIEW`语句删除名为`sales_summary`的视图。五、1.```sqlSELECTcategory,COUNT(*)AScountFROMproductsGROUPBYcategory;```*解析思路:使用`COUNT(*)`计算每个`category`中的产品数量。使用`GROUPBYcategory`子句按产品分类进行分组。2.```sqlSELECTproduct_id,product_nameFROMproductsWHEREpriceBETWEEN50AND200;```*解析思路:选择`product_id`和`product_name`列,从`products`表中筛选出`price`值在50到200范围内的产品记录。3.```sqlUPDATEproductsSETprice=price*1.10;```*解析思路:使用`UPDATE`语句修改`products`表中的数据。将所有产品的`price`列值增加10%,通过`price=price*1.10`实现。4.```sqlSELECTproduct_id,product_nameFROMproductsWHEREdescriptionLIKE'%wireless%';```*解析思路:选择`product_id`和`product_name`列,从`products`表中筛选出`description`列值中包含子串'wireless'的产品记录。使用`LIKE'%wireless%'`进行模糊匹配。5.```sqlCREATETABLEproducts_backupASSELECT*FROMproducts;--或者对于SQLServer:--SELECT*INTOproducts_backupFROMproducts;--或者对于Oracle:--CREATETABLEproducts_backupASSELECT*FROMproducts;```*解析思路:使用`CREATETABLE`语句创建一个新表`products_backup`。通过`SELECT*FROMproducts`将`products`表中的所有列和所有数据选取出来,并作为`CREATETABLE`语句的数据源,从而创建结构相同并包含数据的新表。六、1.`INNERJOIN`是一种连接两个或多个表的方式,它仅返回所有连接条件都满足的记录的交集。换句话说,结果集中只会包含那些在所有参与连接的表中都有匹配键(通过`ON`子句指定的条件)的行。如果某一行在某个表中没有匹配的行,则该行不会出现在结果集中。与`LEFTJOIN`的主要区别在于,`LEFTJOIN`(左连接)会返回左边表(在`FROM`子句中列出的第一个表)的所有记录,即使右边表中没有匹配的行,对于右边表中没有匹配的行,其对应列将填充`

温馨提示

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

评论

0/150

提交评论