MySQL练习题(五)

news2024/11/23 21:01:41

环境搭建(MySQL:8.0.25):

CREATE TABLE DEPT
(
    DEPTNO int PRIMARY KEY,##部门编号
    DNAME  VARCHAR(14),    ##部门名称
    LOC    VARCHAR(13)     ##部门地址
);
INSERT INTO DEPT
VALUES (10, 'ACCOUNTING', 'NEW YORK');
INSERT INTO DEPT
VALUES (20, 'RESEARCH', 'DALLAS');
INSERT INTO DEPT
VALUES (30, 'SALES', 'CHICAGO');
INSERT INTO DEPT
VALUES (40, 'OPERATIONS', 'BOSTON');


CREATE TABLE EMP
(
    EMPNO    int PRIMARY KEY, #员工编号
    ENAME    VARCHAR(10),     #员工姓名
    JOB      VARCHAR(9),      #员工工作
    MGR      int,             #员工直属领导编号
    HIREDATE DATE,            #入职时间
    SAL      double,          #工资
    COMM     double,          #奖金
    DEPTNO   int              #对应dept表的外键
);



INSERT INTO EMP
VALUES (7369, 'SMITH', 'CLERK', 7902, '1980-12-17', 800, NULL, 20);
INSERT INTO EMP
VALUES (7499, 'ALLEN', 'SALESMAN', 7698, '1981-02-20', 1600, 300, 30);
INSERT INTO EMP
VALUES (7521, 'WARD', 'SALESMAN', 7698, '1981-02-22', 1250, 500, 30);
INSERT INTO EMP
VALUES (7566, 'JONES', 'MANAGER', 7839, '1981-04-02', 2975, NULL, 20);
INSERT INTO EMP
VALUES (7654, 'MARTIN', 'SALESMAN', 7698, '1981-09-28', 1250, 1400, 30);
INSERT INTO EMP
VALUES (7698, 'BLAKE', 'MANAGER', 7839, '1981-05-01', 2850, NULL, 30);
INSERT INTO EMP
VALUES (7782, 'CLARK', 'MANAGER', 7839, '1981-06-09', 2450, NULL, 10);
INSERT INTO EMP
VALUES (7788, 'SCOTT', 'ANALYST', 7566, '1987-07-03', 3000, NULL, 20);
INSERT INTO EMP
VALUES (7839, 'KING', 'PRESIDENT', NULL, '1981-11-17', 5000, NULL, 10);
INSERT INTO EMP
VALUES (7844, 'TURNER', 'SALESMAN', 7698, '1981-09-08', 1500, 0, 30);
INSERT INTO EMP
VALUES (7876, 'ADAMS', 'CLERK', 7788, '1987-07-13', 1100, NULL, 20);
INSERT INTO EMP
VALUES (7900, 'JAMES', 'CLERK', 7698, '1981-12-03', 950, NULL, 30);
INSERT INTO EMP
VALUES (7902, 'FORD', 'ANALYST', 7566, '1981-12-03', 3000, NULL, 20);
INSERT INTO EMP
VALUES (7934, 'MILLER', 'CLERK', 7782, '1981-01-23', 1300, NULL, 10);

-- 添加部门和员工的外键
ALTER TABLE EMP
    ADD CONSTRAINT FOREIGN KEY EMP (DEPTNO) REFERENCES DEPT (DEPTNO);


-- 工资等级表
CREATE TABLE SALGRADE
(
    GRADE int,    #等级
    LOSAL double, #最低工资
    HISAL double  #最高工资
);

INSERT INTO SALGRADE
VALUES (1, 700, 1200);
INSERT INTO SALGRADE
VALUES (2, 1201, 1400);
INSERT INTO SALGRADE
VALUES (3, 1401, 2000);
INSERT INTO SALGRADE
VALUES (4, 2001, 3000);
INSERT INTO SALGRADE
VALUES (5, 3001, 9999);

1、写出部门 和 员工之间的1-N外键关系语句:

ALTER TABLE EMP
   ADD CONSTRAINT FK_DEPTNO
       FOREIGN KEY (DEPTNO) REFERENCES DEPT (DEPTNO);

image-20240805202911340

2、找出从事clerk工作的员工的编号、姓名、部门号。

select ep.DEPTNO, ep.ENAME, ep.DEPTNO
from EMP ep
where ep.JOB = 'CLERK';

image-20240805203036772

3、检索出奖金多于基本工资60%的员工信息。

select *
from EMP ep
where ep.COMM > ep.SAL * 0.6;

image-20240805214408540

4、找出10部门的经理(MANAGER)、20部门的职员(CLERK) 的员工信息。

SELECT *
FROM EMP
WHERE (JOB = 'MANAGER' AND DEPTNO = 10)
  OR (JOB = 'CLERK' AND DEPTNO = 20);

image-20240805204806208

5、找出10部门的经理、20部门的职员 或者既不是经理也不是职员但是工资高于2000元的员工信息。

SELECT *
FROM EMP
WHERE (JOB = 'MANAGER' AND DEPTNO = 10)
  OR (JOB = 'CLERK' AND DEPTNO = 20)
  OR (JOB != 'CLERK' AND JOB != 'MANAGER' AND SAL > 2000);

image-20240805205252727

6、找出奖金少于100或者没有获得奖金的员工的信息。

select *
from EMP ep
where ep.COMM < 100
  or ep.COMM is null;

image-20240805214142013

7、找出姓名以A、B、S开始的员工信息。

select ep.ENAME
from EMP ep
where ep.ENAME like 'A%'
  or ep.ENAME like 'B%'
  or ep.ENAME like 'S%';

image-20240805205550817

8、找到名字长度为6个字符的员工信息。

select ep.ENAME
from EMP ep
where char_length(ep.ENAME) = 6;

image-20240805205917382

9、名字中不包含R字符的员工信息。

select ep.ENAME
from EMP ep
where ep.ENAME not like '%R%';

image-20240805210450889

10、返回员工的信息并按工作降序工资升序排列。

SELECT *
FROM EMP
ORDER BY JOB DESC, SAL ASC;

image-20240805210728481

11、工资水平多于smith的员工信息。

SELECT ep2.ENAME
FROM EMP ep1
        JOIN EMP ep2 ON ep2.SAL > ep1.SAL
WHERE ep1.ENAME = 'SMITH';

image-20240805215124655

12、返回从事clerk工作的员工姓名和所在部门名称。

SELECT ep.ENAME, dp.DNAME
FROM EMP ep
LEFT JOIN DEPT dp ON dp.DEPTNO = ep.DEPTNO
WHERE ep.JOB = 'CLERK';

image-20240805211358786

13、返回员工和所属经理的姓名。

SELECT ep1.ENAME AS Employee, ep2.ENAME AS Manager
FROM EMP ep1
        LEFT JOIN EMP ep2 ON ep1.MGR = ep2.EMPNO;

image-20240805212152799

14、返回雇员的雇佣日期早于其经理雇佣日期的员工及其经理姓名。

SELECT ep1.ENAME AS Employee, ep2.ENAME AS Manager
FROM EMP ep1
LEFT JOIN EMP ep2 ON ep1.MGR = ep2.EMPNO
WHERE ep1.HIREDATE < ep2.HIREDATE;

image-20240805212625945

15、返回销售部(sales)所有员工的姓名。

SELECT ep.ENAME
FROM EMP ep
        LEFT JOIN DEPT dp ON dp.DEPTNO = ep.DEPTNO
WHERE dp.DNAME = 'SALES';

image-20240805213046412

16、返回与SCOTT从事相同工作的员工。

select ep2.ENAME
from EMP ep1
         inner join EMP ep2 on ep1.JOB = ep2.JOB
where ep1.ENAME = 'SCOTT' and ep2.ENAME != 'SCOTT';

image-20240805213828351

17、返回部门号、部门名、部门所在位置及其每个部门的员工总数。

SELECT d.DEPTNO, d.DNAME, d.LOC, COUNT(e.EMPNO) AS EMP_COUNT
FROM DEPT d
         LEFT JOIN EMP e ON d.DEPTNO = e.DEPTNO
GROUP BY d.DEPTNO, d.DNAME, d.LOC;

image-20240805215841574

18、计算出员工的年薪,并且以年薪排序。

SELECT EMPNO, ENAME, JOB, SAL, (SAL * 12 + IFNULL(COMM, 0)) AS ANNUAL_SALARY
FROM EMP
ORDER BY ANNUAL_SALARY DESC;

image-20240805220552363

19、返回工资处于第四级别的员工的姓名。

SELECT e.ENAME
FROM EMP e
        JOIN SALGRADE s ON e.SAL BETWEEN s.LOSAL AND s.HISAL
WHERE s.GRADE = 4;

image-20240805220824624

20、工资等级多于smith的员工信息。

SELECT e.*
FROM EMP e
         JOIN SALGRADE s1 ON e.SAL BETWEEN s1.LOSAL AND s1.HISAL
         JOIN EMP smith ON smith.ENAME = 'SMITH'
         JOIN SALGRADE s2 ON smith.SAL BETWEEN s2.LOSAL AND s2.HISAL
WHERE s1.GRADE > s2.GRADE;

image-20240805220918286

21、创建一个存储过程proc_pager实现通用分页功能处理,具体要求如下:

提供如下输入参数变量:

表名p_table_name , 查询字段p_fields , 分页单位 p_page_size

当前页 p_curr_page , where条件p_where_string , 排序条件p_order_string

输出参数变量:

总记录数p_out_counts

DELIMITER //

CREATE PROCEDURE proc_pager(
    IN p_table_name VARCHAR(64),
    IN p_fields VARCHAR(255),
    IN p_page_size INT,
    IN p_curr_page INT,
    IN p_where_string VARCHAR(255),
    IN p_order_string VARCHAR(255),
    OUT p_out_counts INT
)
BEGIN
    DECLARE v_offset INT;
    DECLARE v_sql_query TEXT;
    DECLARE v_sql_count_query TEXT;

    -- 计算偏移量
    SET v_offset = (p_curr_page - 1) * p_page_size;

    -- 构建查询总记录数的SQL语句
    SET v_sql_count_query = CONCAT('SELECT COUNT(*) INTO @total_counts FROM ', p_table_name, ' WHERE ', p_where_string);

    -- 准备并执行查询总记录数的SQL语句
    SET @sql_count_query = v_sql_count_query;
    PREPARE count_stmt FROM @sql_count_query;
    EXECUTE count_stmt;
    DEALLOCATE PREPARE count_stmt;

    -- 将总记录数赋值给输出变量
    SET p_out_counts = @total_counts;

    -- 构建分页查询的SQL语句
    SET v_sql_query =
            CONCAT('SELECT ', p_fields, ' FROM ', p_table_name, ' WHERE ', p_where_string, ' ORDER BY ', p_order_string,
                   ' LIMIT ', v_offset, ', ', p_page_size);

    -- 准备并执行分页查询的SQL语句
    SET @sql_query = v_sql_query;
    PREPARE stmt FROM @sql_query;
    EXECUTE stmt;
    DEALLOCATE PREPARE stmt;

END //

DELIMITER ;
-- 定义一个变量来存储输出的总记录数
SET @total_counts = 0;

-- 调用存储过程
CALL proc_pager(
        'EMP', -- 表名
        'EMPNO, ENAME, JOB', -- 查询字段
        5, -- 每页记录数
        1, -- 当前页码
        '1=1', -- where 条件(这里没有实际条件,所以用 '1=1')
        'EMPNO ASC', -- 排序条件
        @total_counts -- 输出参数
     );

-- 查询输出参数的值
SELECT @total_counts;

image-20240805223839887

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1983746.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

sqllab靶场练习第1~15关

1、第一关 代码解析 if(isset($_GET[id]))//判断获取的id字段是否为空 { $id$_GET[id]; //logging the connection parameters to a file for analysis. $fpfopen(result.txt,a);//打开这个文件&#xff0c;记录操作的日志 fwrite($fp,ID:.$id."\n"); fclose($fp);…

Java、PHP、Node 操作 MySQL 数据库常用方法

一、Java 操作 MySQL 数据库 1、Java 连接 MySQL 数据库 1. 使用 JDBC 驱动程序连接 使用这种方式&#xff0c;首先需要导入 MySQL 的 JDBC 驱动程序依赖&#xff0c;然后通过 Class.forName() 方法加载驱动程序类。其创建连接的过程相对直接&#xff0c;只需提供准确的数据库…

我不喜欢蔚来的原因

商业逻辑 蔚来主打的是换电和服务。 先说服务&#xff0c;这种极其依赖人工&#xff0c;打造极致尊贵感的服务&#xff0c;是完全无法随着销售规模扩大而降低成本的&#xff0c;相反&#xff0c;如果要保持相同水准的服务&#xff0c;可能会导致成本随着规模扩大而增高&#x…

桥田动态|盛夏官宣 · 桥田全新品牌形象正式发布

VISUAL IDENTITY 2024品牌革新 桥田智能品牌VI系统升级发布 Hi 各位伙伴们&#xff0c;很高兴的告知大家&#xff0c;我们的品牌形象VI和官方网站全面升级。全新的LOGO设计和官方网站将为您带来更为直观和互动的体验。 1 品牌标识 Brand identity 全新LOGO&#xff0c;彰显…

学习STM32(3)--STM32单片机中断的应用

1 引 言 本次实验旨在深入探究STM32F103单片机中断的应用。通过实验&#xff0c;我们将全面掌握STM32F103中断的定义、NVIC&#xff08;Nested Vectored Interrupt Controller&#xff0c;嵌套向量中断控制器&#xff09;的使用和开发&#xff0c;以及外部中断&#xff08;E…

SpringBoot AOP 简单的权限校验

本篇文章的主要内容是通过AOP切面编程实现简单的权限校验。 书接上回登录与注册功能 我们的用户表里面不是有role(权限)这个字段吗 在JWT令牌的生成中&#xff0c;我们加入了role字段。 那么接下来&#xff0c;我们就可以通过这个字段来实现权限校验。 我这里就很简单&#x…

pywinauto:Windows桌面应用自动化测试(七)

前言 上一篇文章地址&#xff1a; pywinauto&#xff1a;Windows桌面应用自动化测试&#xff08;六&#xff09;-CSDN博客 下一篇文章地址&#xff1a; 暂无 一、实战常用方法 1、通过Desktop快速获取窗口 通过之前章节我们了解到控制应用的方法为Application&#xff0…

实战OpenCV之环境安装与配置

OpenCV是什么 OpenCV&#xff0c;英文全称为Open Source Computer Vision Library&#xff0c;是一个开源的计算机视觉和机器学习软件库。它设计用于提供一系列功能强大的算法&#xff0c;以帮助开发者处理图像和视频数据&#xff0c;实现各种视觉任务&#xff0c;包括&#xf…

Nginx进阶-常见配置(三)

nginx 变量 Nginx的配置文件使用的语法的就是一门微型的编程语言。既然是编程语言&#xff0c;一般也就少不了“变量”这种东西。 Nginx配置文件使用的语法主要包括以下几个方面&#xff1a; &#xff08;1&#xff09;配置块 (Block Directives): Nginx配置文件由多个嵌套的…

渗透8-05作业

第十五关: 利用时间盲注 拦截并放到intruder里 请求的参数替换或改写一下 uname1 OR IF(SUBSTRING((SELECT database()), 2, 1)e, sleep(1), 1) -- &passwd1&submitSubmit payload1设置 payload2设置&#xff08;点击从列表中添加可快速找到a到z的列表&#xff09; 开始…

Python | Leetcode Python题解之第326题3的幂

题目&#xff1a; 题解&#xff1a; class Solution:def isPowerOfThree(self, n: int) -> bool:return n > 0 and 1162261467 % n 0

spdlog日志库--基础介绍

文章目录 1. 简介1.1. spdlog代码特点1.2. 说明1.3. spdlog架构 2. spdlog的安装2.1. 使用包管理器安装2.2. 使用源码安装2.3. 仅使用头文件 3. 相关概念3.0 常用的头文件3.1. level_enum3.2. sink3.3. logger3.4 格式输出3.5 对齐方式3.6 截断3.7 字符串格式化fmt 4. 特性4.1.…

职业教育云计算实验实训室建设应用案例

云计算作为信息技术领域的一次革命&#xff0c;正在深刻改变着我们的工作和生活方式。随着企业对云计算技术的依赖日益加深&#xff0c;对具备云计算技能的专业人才的需求也日益迫切。职业院校面临着培养符合行业标准的云计算人才的挑战。唯众凭借其在教育技术领域的专业经验&a…

Web3时代的智能合约:区块链技术的革命性应用

随着区块链技术的发展&#xff0c;Web3时代已经悄然来临。智能合约作为这一时代的重要组成部分&#xff0c;正引领着技术应用的革命性变革。本文将深入解析智能合约的概念、工作原理、应用场景及其带来的挑战与机遇&#xff0c;全面展现其在Web3时代的重要作用。 一、智能合约…

Spring Cloud 整合 Nacos、Sentinel、OpenFigen 实战【微服务熔断降级实战】

前言&#xff1a; 上一篇我们分析了 Sentinel 的各种核心概念点以及 Sentinel 的执行流程&#xff0c;并分别演示了使用 Sentinel 编码和注解方式来管理资源的场景&#xff0c;加上我们前面学习的 Nacos&#xff0c;本篇来分享 Spring Cloud 整合 Nacos、Sentinel、OpenFigen …

密码学基础:搞懂Hash函数SHA1、SHA-2、SHA3(1)

目录 1.消息摘要(Hash) 2.SHA-1 3.SHA-2 4.小结 1.消息摘要(Hash) Hash函数是一种单向密码体制&#xff0c;把任意长度的输入经过变换得到一个固定长度的输出&#xff0c;同时它还具备单向性&#xff0c;只能从明文到密文&#xff0c;不能逆向&#xff0c;正是由于Hash函数…

Golang | Leetcode Golang题解之第326题3的幂

题目&#xff1a; 题解&#xff1a; func isPowerOfThree(n int) bool {return n > 0 && 1162261467%n 0 }

onlyoffice使用Https访问

开发服务器用的是http&#xff0c;一切正常使用&#xff0c;部署到服务器后&#xff0c;由于服务器使用了Https&#xff0c;导致访问onlyoffice时控制台报错。Mixed Content: The page at http://xxxxx// was loaded over HTTPS, but requested an insecure frame http://xxxxx…

Jpa-多表关联-OneToOne

Jpa-多表关联-OneToOne 准备JoinColumnOneToOne属性targetEntitycascade*PERSISTMERGEREMOVEREFRESH orphanRemovalfetchoptionalMappedBy* OneToOne在 hibernate中用于对表与表之间进行维护关联 准备 import com.alibaba.fastjson.JSON; import jakarta.persistence.*; impor…

K210烧录固件失败原因

1.检查固件信息&#xff0c;我这里用的是亚博智能提供的canmv固件 2.检查串口有无被占用&#xff0c;我就是因为打开了另一个正点原子的串口接收软件卡这么久 3.你要烧录canmv固件而非maixypy固件 若烧录maixypy要用maixipy来开发 4。可以看看换不同下载方式