系统设计与数据库系统 作业二 Advanced SQL LAB(二)

简介: 系统设计与数据库系统 作业二 Advanced SQL LAB(二)
  1. Issue the same query as the previous one except that this time truncate (TRUNC) to the nearest penny rather than round.
SELECT 
    *
FROM
    (SELECT 
        FLOOR(SUM(SAL) / COUNT(*) / 22) AS 'daily salary'
    FROM
        emp2019284073
    WHERE
        DEPTNO = 30) temp1,
    (SELECT 
        FLOOR(SUM(SAL) / COUNT(*) / 22 / 8) AS 'hourly salary'
    FROM
        emp2019284073
    WHERE
        DEPTNO = 30) temp2;

5e019ac07a6e49cb8db5f2c46e9bc463.png

EXERCISES 4 DATES


  1. Select the name, job, and date of hire of the employees in department 20. (Format the hiredate column using a picture MM/DD/YY)
SELECT 
    ename, job, DATE_FORMAT(hiredate, '%M-%D-%Y')
FROM
    emp2019284073
WHERE
    deptno = 20;

f5784f278df045ffbd76d96b0b714b6f.png


Use a picture to format hiredate as DAY(day of the week), MONTH (name of the month, ) DD (day of the month) and YYYY(year)


SELECT 
    ename, job, DATE_FORMAT(hiredate, '%a-%M-%D-%Y')
FROM
    emp2019284073
WHERE
    deptno = 20;

47279168aa5e419f8fbb0563d4e9f655.png


  1. Which employees were hired in March?
SELECT 
    *
FROM
    emp2019284073
WHERE
    DATE_FORMAT(hiredate, '%M') LIKE '%March%'

a46dbff04abe4dd0a4183ba0433e5bd7.png


  1. Which employees were hired on a Tuesday?


SELECT 
    *
FROM
    emp2019284073
WHERE
    DATE_FORMAT(hiredate, '%W') LIKE '%Tuesday%'

722efd3543bb411b969ed13421a7a7a6.png


  1. Are there any employees who have worked more than 16 years for the company?
SELECT 
    *
FROM
    emp2019284073
WHERE
    TIMESTAMPDIFF(YEAR, hiredate, NOW()) > 16

ff36f64f6e1d482aae5b98cdd4a86c85.png



  1. Show the weekday of the first day of the month in which each employee was hired. (plus their names)
(SELECT 
    ENAME,
    WEEKDAY(DATE_ADD(HIREDATE,
                INTERVAL - DAY(HIREDATE) + 1 DAY))
FROM
    emp2019284073)


46bbb8efb146426abc65125e60c9e49b.png


  1. Show details of employee hiredates and the date of their first payday. (Paydays occur on the last Friday of each month) (plus their names)
set global log_bin_trust_function_creators=TRUE;
DELIMITER $$
DROP FUNCTION IF EXISTS last_friday $$
CREATE FUNCTION last_friday (dt DATE) RETURNS DATE
BEGIN
DECLARE last DATE;
SET last=LAST_DAY(dt);
WHILE DATE_FORMAT(last, "%W")!='Friday' DO
SET last=DATE_SUB(last, interval 1 day);
END WHILE;
RETURN last;
END $$
SELECT 
    ENAME, HIREDATE, LAST_FRIDAY(HIREDATE) first_payday
FROM
    emp2019284073;

46bbb8efb146426abc65125e60c9e49b.png


  1. Refine your answer to 7 such that it works even if an employee is hired after the last Friday of the month (cf Martin)
set global log_bin_trust_function_creators=TRUE;
DELIMITER $$
DROP FUNCTION IF EXISTS last_friday $$
CREATE FUNCTION last_friday (dt DATE) RETURNS DATE
BEGIN
DECLARE last DATE;
SET last=LAST_DAY(dt);
WHILE DATE_FORMAT(last, "%W")!='Friday' DO
SET last=DATE_SUB(last, interval 1 day);
END WHILE;
RETURN last;
END $$
SELECT 
    ENAME, HIREDATE, LAST_FRIDAY(HIREDATE) first_payday
FROM
    emp2019284073;

02170be89af243b29b64ec375340c0cb.png


EXERCISES 5 GROUP BY & HAVING


  1. List the department number and average salary of each department.


SELECT 
    DEPTNO, AVG(SAL)
FROM
    emp2019284073
GROUP BY DEPTNO


cefc6c50a7654d66b4ce78a348abcfde.png

Divide all employees into groups by department and by job within department. Count the employees in each group and compute each group’s average annual salary.

SELECT 
    DEPTNO, JOB, COUNT(ENAME), AVG(SAL)
FROM
    emp2019284073
GROUP BY DEPTNO , JOB

9e2d07ed915e4a89a824bbea295a698c.png

  1. Issue the same query as above except list the department name rather than the department number.
SELECT 
    DNAME, JOB, COUNT(*), AVG(SAL)
FROM
    (SELECT 
        *
    FROM
        emp2019284073 e
    JOIN dept2019284073 d USING (DEPTNO)) a
GROUP BY DNAME , JOB

fc0a2d8d13804dea8e7145f972508102.png

  1. List the average annual salary for all job groups having more than 2 employees in the group.
SELECT 
    JOB, AVG(SAL)
FROM
    emp2019284073
GROUP BY JOB
HAVING COUNT(*) > 2

886b4683d5784efeb500e8ba239b5d52.png

5. Find all departments with an average commission greater than 25% of average salary.

SELECT 
    DEPTNO
FROM
    emp2019284073
GROUP BY DEPTNO
HAVING (AVG(COMM) > 0.25 * AVG(SAL))

301e8722d81443428fa6aff5248e6738.png

  1. Find each department’s average annual salary for all its employees except the managers and the president.
SELECT 
    DEPTNO, COUNT(*), AVG(SAL)
FROM
    emp2019284073
WHERE
    JOB != 'MANAGER' AND JOB != 'PRESIDENT'
GROUP BY DEPTNO

adb564efa93843068896ac2eaf480481.png

  1. List the Department ID and Name where there are at least one Manager and two clerks.
SELECT 
    DEPTNO, DNAME
FROM
    dept2019284073
WHERE
    DEPTNO = ANY (SELECT 
            DEPTNO
        FROM
            emp2019284073
        WHERE
            JOB = 'MANAGER'
        GROUP BY DEPTNO , JOB
        HAVING COUNT(*) >= 1)
        AND DEPTNO = ANY (SELECT 
            DEPTNO
        FROM
            emp2019284073
        WHERE
            JOB = 'CLERK'
        GROUP BY DEPTNO , JOB
        HAVING COUNT(*) >= 2);

676686a9dae7438eadfbe6971ea6c88d.png

List the Department ID and Name where there are at least one Manager and two clerk and whose average salary is greater that the company’s average salary.

SELECT 
    DEPTNO, DNAME
FROM
    dept2019284073
WHERE
    DEPTNO = ANY (SELECT 
            DEPTNO
        FROM
            emp2019284073
        WHERE
            JOB = 'MANAGER'
        GROUP BY DEPTNO , JOB
        HAVING COUNT(*) >= 1)
        AND DEPTNO = ANY (SELECT 
            DEPTNO
        FROM
            emp2019284073
        WHERE
            JOB = 'CLERK'
        GROUP BY DEPTNO , JOB
        HAVING COUNT(*) >= 2)
        AND DEPTNO = ANY (SELECT 
            DEPTNO
        FROM
            emp2019284073
        GROUP BY DEPTNO , JOB
        HAVING AVG(SAL) > (SELECT 
                AVG(SAL)
            FROM
                emp2019284073))
  1. List the name of the Manager who manages most employee
SELECT 
    ENAME, NUM
FROM
    (SELECT 
        e1.ENAME, COUNT(*) NUM
    FROM
        emp2019284073 e1
    JOIN emp2019284073 e2 ON e1.EMPNO = e2.MGR
    GROUP BY e1.ENAME
    ORDER BY COUNT(*) DESC) e3
LIMIT 1

948ccc5c326349fa987f8209cb781cc3.png

相关文章
|
5天前
|
SQL 人工智能 Linux
SQL Server 2025 RC1 发布 - 从本地到云端的 AI 就绪企业数据库
SQL Server 2025 RC1 发布 - 从本地到云端的 AI 就绪企业数据库
75 5
SQL Server 2025 RC1 发布 - 从本地到云端的 AI 就绪企业数据库
|
4天前
|
关系型数据库 MySQL 数据库
阿里云数据库RDS费用价格:MySQL、SQL Server、PostgreSQL和MariaDB引擎收费标准
阿里云RDS数据库支持MySQL、SQL Server、PostgreSQL、MariaDB,多种引擎优惠上线!MySQL倚天版88元/年,SQL Server 2核4G仅299元/年,PostgreSQL 227元/年起。高可用、可弹性伸缩,安全稳定。详情见官网活动页。
|
5天前
|
关系型数据库 分布式数据库 数据库
阿里云数据库收费价格:MySQL、PostgreSQL、SQL Server和MariaDB引擎费用整理
阿里云数据库提供多种类型,包括关系型与NoSQL,主流如PolarDB、RDS MySQL/PostgreSQL、Redis等。价格低至21元/月起,支持按需付费与优惠套餐,适用于各类应用场景。
|
4月前
|
SQL 存储 关系型数据库
第二篇:关系型数据库的核心概念与 SQL 基础
本篇内容深入浅出地讲解了关系型数据库的核心概念与SQL基础,适合有一定计算机基础的学习者。文章涵盖数据库的基本操作(CRUD)、数据类型、表的创建与管理等内容,并通过实例解析SELECT、INSERT、UPDATE、DELETE等语句的用法。此外,还推荐了多种学习资源与实践建议,帮助读者巩固知识。学完后,你将掌握基础数据库操作,为后续高级学习铺平道路。
235 1
|
22天前
|
SQL Oracle 关系型数据库
Oracle数据库创建表空间和索引的SQL语法示例
以上SQL语法提供了一种标准方式去组织Oracle数据库内部结构,并且通过合理使用可以显著改善查询速度及整体性能。需要注意,在实际应用过程当中应该根据具体业务需求、系统资源状况以及预期目标去合理规划并调整参数设置以达到最佳效果。
81 8
|
27天前
|
SQL 人工智能 Java
用 LangChain4j+Ollama 打造 Text-to-SQL AI Agent,数据库想问就问
本文介绍了如何利用AI技术简化SQL查询操作,让不懂技术的用户也能轻松从数据库中获取信息。通过本地部署PostgreSQL数据库和Ollama模型,结合Java代码,实现将自然语言问题自动转换为SQL查询,并将结果以易懂的方式呈现。整个流程简单直观,适合初学者动手实践,同时也展示了AI在数据查询中的潜力与局限。
183 8
|
5月前
|
SQL 数据库 数据安全/隐私保护
数据库数据恢复——sql server数据库被加密的数据恢复案例
SQL server数据库数据故障: SQL server数据库被加密,无法使用。 数据库MDF、LDF、log日志文件名字被篡改。 数据库备份被加密,文件名字被篡改。
|
10天前
|
关系型数据库 MySQL 数据库
阿里云数据库RDS支持MySQL、SQL Server、PostgreSQL和MariaDB引擎
阿里云数据库RDS支持MySQL、SQL Server、PostgreSQL和MariaDB引擎,提供高性价比、稳定安全的云数据库服务,适用于多种行业与业务场景。
|
3月前
|
SQL 关系型数据库 MySQL
Go语言数据库编程:使用 `database/sql` 与 MySQL/PostgreSQL
Go语言通过`database/sql`标准库提供统一数据库操作接口,支持MySQL、PostgreSQL等多种数据库。本文介绍了驱动安装、连接数据库、基本增删改查操作、预处理语句、事务处理及错误管理等内容,涵盖实际开发中常用的技巧与注意事项,适合快速掌握Go语言数据库编程基础。
272 62
|
2月前
|
SQL XML Java
配置Spring框架以连接SQL Server数据库
最后,需要集成Spring配置到应用中,这通常在 `main`方法或者Spring Boot的应用配置类中通过加载XML配置或使用注解来实现。
262 0