Oracle_sql练习题1

1. **题目:** 创建一个名为`employees`的表,包含员工的ID、姓名、部门ID和薪水。编写一个SQL查询,找出每个部门的平均薪水。

   **答案和解析:**

   SELECT department_id, AVG(salary) AS avg_salary
   FROM employees
   GROUP BY department_id;

这个查询使用了`GROUP BY`子句按部门ID对数据进行分组,并使用了聚合函数`AVG()`来计算每个部门的平均薪水。

2. **题目:** 在上一个练习的基础上,编写一个SQL查询,找出每个部门中薪水最高的员工的姓名和薪水。

   **答案和解析:**

   SELECT department_id, MAX(salary) AS max_salary
   FROM employees
   GROUP BY department_id;

此查询也使用了`GROUP BY`子句按部门ID进行分组,然后使用`MAX()`函数找出每个部门中薪水最高的员工的薪水。

3. **题目:** 编写一个SQL查询,列出超过平均薪水的员工。

   **答案和解析:**

   SELECT *
   FROM employees
   WHERE salary > (SELECT AVG(salary) FROM employees);
   

这个查询使用了子查询来计算平均薪水,并通过`WHERE`子句筛选出薪水高于平均值的员工。

4. **题目:** 创建一个名为`orders`的表,包含订单的ID、客户ID、订单日期和订单总额。编写一个SQL查询,找出每个客户的订单总额。

   **答案和解析:**

   SELECT customer_id, SUM(order_amount) AS total_order_amount
   FROM orders
   GROUP BY customer_id;

这个查询使用了`SUM()`函数来计算每个客户的订单总额,并通过`GROUP BY`子句按客户ID进行分组。

5. **题目:** 编写一个SQL查询,列出在2019年至2020年之间的订单。

  **答案和解析:**

   SELECT *
   FROM orders
   WHERE order_date BETWEEN TO_DATE('2019-01-01', 'YYYY-MM-DD') AND TO_DATE('2020-12-31', 'YYYY-MM-DD');

这个查询使用了`BETWEEN`运算符来筛选出订单日期在2019年至2020年之间的订单。

6. **题目:** 编写一个SQL查询,找出每个月的订单总额,并按月份排序。

   **答案和解析:**

   SELECT EXTRACT(MONTH FROM order_date) AS month, SUM(order_amount) AS total_order_amount
   FROM orders
   GROUP BY EXTRACT(MONTH FROM order_date)
   ORDER BY EXTRACT(MONTH FROM order_date);

这个查询使用了`EXTRACT()`函数提取订单日期中的月份,并通过`GROUP BY`子句按月份进行分组,并按月份排序。

7. **题目:** 创建一个名为`products`的表,包含产品的ID、名称和价格。编写一个SQL查询,找出价格最高的产品。

   **答案和解析:**

   SELECT *
   FROM products
   ORDER BY price DESC
   FETCH FIRST 1 ROWS ONLY;

这个查询使用`ORDER BY`子句按价格降序排序,并使用`FETCH FIRST`子句获取价格最高的产品。

8. **题目:** 编写一个SQL查询,找出每个产品的销售总额(假设有一个`order_items`表,包含产品ID、订单ID和数量)。

   **答案和解析:**

   SELECT oi.product_id, SUM(oi.quantity * p.price) AS total_sales
   FROM order_items oi
   JOIN products p ON oi.product_id = p.product_id
   GROUP BY oi.product_id;

这个查询使用了`JOIN`来连接`order_items`和`products`表,并使用了`SUM()`函数计算每个产品的销售总额。

9. **题目:** 创建一个名为`customers`的表,包含客户的ID、姓名和注册日期。编写一个SQL查询,找出每个月注册的客户数量。

   **答案和解析:**

   SELECT EXTRACT(MONTH FROM registration_date) AS month, COUNT(*) AS customer_count
   FROM customers
   GROUP BY EXTRACT(MONTH FROM registration_date);

这个查询使用`EXTRACT()`函数提取注册日期中的月份,并使用`GROUP BY`子句按月份进行分组,并计算每个月注册的客户数量。

10. **题目:** 编写一个SQL查询,找出在某个特定月份注册的客户的姓名和注册日期。

   **答案和解析:**

   SELECT customer_name, registration_date
   FROM customers
   WHERE EXTRACT(MONTH FROM registration_date) = 4 AND EXTRACT(YEAR FROM registration_date) = 2023;

这个查询使用了`WHERE`子句筛选出注册日期为特定月份的客户,并列出他们的姓名和注册日期。

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值