2025年sql查询题库及答案_第1页
2025年sql查询题库及答案_第2页
2025年sql查询题库及答案_第3页
2025年sql查询题库及答案_第4页
2025年sql查询题库及答案_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

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

文档简介

2025年sql查询题库及答案基础查询1.简单查询题目:从名为“employees”的表中查询所有员工的姓名(name)和工资(salary)。答案:```sqlSELECTname,salaryFROMemployees;```解释:使用`SELECT`关键字指定要查询的列名,`FROM`关键字指定要查询的表名。2.查询特定列题目:从“products”表中查询产品的名称(product_name)和价格(price),只显示价格大于100的记录。答案:```sqlSELECTproduct_name,priceFROMproductsWHEREprice>100;```解释:在`SELECT`语句中使用`WHERE`子句来过滤满足条件的记录,这里的条件是价格大于100。3.查询唯一值题目:从“orders”表中查询所有不同的客户ID(customer_id)。答案:```sqlSELECTDISTINCTcustomer_idFROMorders;```解释:`DISTINCT`关键字用于去除查询结果中的重复值。4.查询排序题目:从“students”表中查询学生的姓名(student_name)和成绩(score),并按照成绩从高到低排序。答案:```sqlSELECTstudent_name,scoreFROMstudentsORDERBYscoreDESC;```解释:`ORDERBY`关键字用于对查询结果进行排序,`DESC`表示降序排列,默认是升序(ASC)。5.限制查询结果数量题目:从“employees”表中查询前10条员工记录,显示员工的姓名(name)和部门(department)。答案:```sqlSELECTname,departmentFROMemployeesLIMIT10;```解释:`LIMIT`关键字用于限制查询结果返回的记录数量。聚合函数与分组查询1.求和题目:从“sales”表中查询所有销售记录的销售总额(使用amount列)。答案:```sqlSELECTSUM(amount)FROMsales;```解释:`SUM`是聚合函数,用于计算指定列的总和。2.求平均值题目:从“students”表中查询学提供绩(score列)的平均值。答案:```sqlSELECTAVG(score)FROMstudents;```解释:`AVG`函数用于计算指定列的平均值。3.计数题目:从“employees”表中统计员工的数量。答案:```sqlSELECTCOUNT()FROMemployees;```解释:`COUNT()`用于统计表中的记录总数。4.分组查询题目:从“orders”表中按客户ID(customer_id)分组,统计每个客户的订单数量。答案:```sqlSELECTcustomer_id,COUNT()FROMordersGROUPBYcustomer_id;```解释:`GROUPBY`关键字用于将查询结果按照指定列进行分组,这里按照客户ID分组,然后使用`COUNT()`统计每个组的记录数量。5.分组过滤题目:从“products”表中按类别(category)分组,查询平均价格大于50的类别及其平均价格。答案:```sqlSELECTcategory,AVG(price)FROMproductsGROUPBYcategoryHAVINGAVG(price)>50;```解释:`HAVING`子句用于在分组之后过滤满足条件的组,这里过滤出平均价格大于50的组。连接查询1.内连接题目:有“employees”表(包含员工ID:employee_id,员工姓名:name)和“departments”表(包含部门ID:department_id,部门名称:department_name,员工ID:employee_id),查询每个员工所属部门的名称。答案:```sqlSELECT,departments.department_nameFROMemployeesINNERJOINdepartmentsONemployees.employee_id=departments.employee_id;```解释:`INNERJOIN`用于连接两个表,`ON`关键字指定连接条件,这里通过员工ID进行连接,只返回两个表中匹配的记录。2.左连接题目:从“customers”表(包含客户ID:customer_id,客户姓名:customer_name)和“orders”表(包含订单ID:order_id,客户ID:customer_id),查询所有客户及其订单数量,即使客户没有订单也显示。答案:```sqlSELECTcustomers.customer_name,COUNT(orders.order_id)FROMcustomersLEFTJOINordersONcustomers.customer_id=orders.customer_idGROUPBYcustomers.customer_name;```解释:`LEFTJOIN`会返回左表(customers)中的所有记录,以及右表(orders)中匹配的记录,对于左表中没有匹配的记录,右表的列会显示为`NULL`,然后使用`GROUPBY`和`COUNT`统计每个客户的订单数量。3.右连接题目:有“products”表(包含产品ID:product_id,产品名称:product_name)和“sales”表(包含销售ID:sale_id,产品ID:product_id),查询所有销售记录对应的产品名称,即使产品没有销售记录也显示。答案:```sqlSELECTduct_name,sales.sale_idFROMproductsRIGHTJOINsalesONduct_id=duct_id;```解释:`RIGHTJOIN`返回右表(sales)中的所有记录,以及左表(products)中匹配的记录,对于右表中没有匹配的记录,左表的列会显示为`NULL`。4.全外连接(部分数据库支持)题目:在支持全外连接的数据库中,从“employees”表(员工ID:employee_id)和“projects”表(项目ID:project_id,员工ID:employee_id),查询所有员工和项目的关联信息,包括没有参与项目的员工和没有员工参与的项目。答案:```sqlSELECTemployees.employee_id,ject_idFROMemployeesFULLOUTERJOINprojectsONemployees.employee_id=projects.employee_id;```解释:`FULLOUTERJOIN`返回两个表中的所有记录,匹配的记录正常显示,不匹配的记录在对方表的列显示为`NULL`。子查询1.标量子查询题目:从“employees”表中查询工资高于平均工资的员工姓名。答案:```sqlSELECTnameFROMemployeesWHEREsalary>(SELECTAVG(salary)FROMemployees);```解释:子查询`(SELECTAVG(salary)FROMemployees)`返回员工的平均工资,外层查询根据这个结果过滤出工资高于平均工资的员工。2.列子查询题目:从“orders”表中查询客户ID在特定客户列表中的订单记录。假设特定客户列表为`(1,3,5)`。答案:```sqlSELECTFROMordersWHEREcustomer_idIN(SELECTcustomer_idFROMcustomersWHEREcustomer_idIN(1,3,5));```解释:子查询返回特定客户列表中的客户ID,外层查询使用`IN`操作符过滤出客户ID在该列表中的订单记录。3.行子查询题目:从“products”表中查询价格和库存数量与特定产品(假设产品ID为10)相同的产品记录。答案:```sqlSELECTFROMproductsWHERE(price,stock)=(SELECTprice,stockFROMproductsWHEREproduct_id=10);```解释:子查询返回特定产品的价格和库存数量,外层查询通过行比较(`(price,stock)`)找出与之相同的产品记录。4.相关子查询题目:从“employees”表中查询每个部门工资最高的员工姓名和工资。答案:```sqlSELECT,e1.salaryFROMemployeese1WHEREe1.salary=(SELECTMAX(e2.salary)FROMemployeese2WHEREe2.department=e1.department);```解释:相关子查询会根据外层查询的每一行记录进行计算,这里对于每个员工,子查询会计算其所在部门的最高工资,外层查询找出工资等于该最高工资的员工。数据更新与删除1.更新数据题目:从“products”表中将所有价格低于50的产品价格提高10%。答案:```sqlUPDATEproductsSETprice=price1.1WHEREprice<50;```解释:`UPDATE`语句用于更新表中的数据,`SET`关键字指定要更新的列和新的值,`WHERE`子句指定更新的条件。2.删除数据题目:从“orders”表中删除所有下单日期早于2024年1月1日的订单记录。答案:```sqlDELETEFROMordersWHEREorder_date<'2024-01-01';```解释:`DELETE`语句用于删除表中的记录,`WHERE`子句指定删除的条件。高级查询1.窗口函数题目:从“sales”表中按销售日期(sale_date)排序,查询每条销售记录的销售金额(amount)以及当前日期之前的累计销售金额。答案:```sqlSELECTsale_date,amount,SUM(amount)OVER(ORDERBYsale_date)AScumulative_amountFROMsales;```解释:窗口函数`SUM(amount)OVER(ORDERBYsale_date)`会在按销售日期排序的结果集上计算累计销售金额。2.公用表表达式(CTE)题目:从“employees”表中找出工资最高的员工和工资最低的员工。答案:```sqlWITHhighest_lowestAS(SELECTMAX(salary)ASmax_salary,MIN(salary)ASmin_salaryFROMemployees)SELECTname,salaryFROMemployeesWHEREsalaryIN(SELECTmax_salaryFROMhighest_lowestUNIONSELECTmin_salaryFROMhighest_lowest);```解释:`WITH`关键字用于定义CTE(公用表表达式),这里的CTE计算出最高工资和最低工资,外层查询根据这两个值找出对应的员工。3.正则表达式查询(部分数据库支持)题目:从“customers”表中查询姓名以“张”开头的客户记录。答案(以MySQL为例):```sqlSELECTFROMcustomersWHEREcustomer_nameREGEXP'^张';```解释:`REGEXP`用于在MySQL中进行正则表达式匹配,`^张`表示以“张”开头。4.条件表达式题目:从“studen

温馨提示

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

评论

0/150

提交评论