【Mysql学习笔记】3 - 本章作业

1.判断

1. 这句话表示ename as name 可以不要这个as,同理后面的sal salary也是别名,而选项D的Annual Salary中间也有空格,程序会判断为as 但as不能连用,所以错误,选D

2.选B,因为null不能加上判断符号<> C显而易见

3.AB正确,因为sal salary为as别名,所以C错误,3无法找到

2.DESC

-- 查看表结构DESC dept
DESC emp

3. select语句 流程控制函数

-- 显示所有部门信息
SELECT *FROM dept
-- 显示所有雇员名及其全年收入
-- (2)显示所有雇员名及其全年收入13月(工资+补助),并指定列别名"年收入”
SELECT ename,(sal * 13)+IFNULL(comm,0) AS '年收入'FROM emp

4.WHERE语句

-- 4.限制查询数据。
-- (1)显示工资超过2850的雇员姓名和工资。
SELECT ename,sal salaryFROM empWHERE sal > 2850-- (2)显示工资不在1500到2850之间的所有雇员名及工资。
SELECT ename,sal salaryFROM empWHERE sal < 2850 AND sal > 1500
-- (3)显示编号为7566的雇员姓名及所在部门编号。
SELECT empno,ename,deptnoFROM empWHERE empno IN (7566)
-- (4)显示部门10和30中工资超过1500的雇员名及工资。
SELECT ename,sal salary,deptnoFROM empWHERE deptno = 10 OR deptno = 30 AND sal > 1500
-- (5)显示无管理者的雇员名及岗位。
SELECT ename,jobFROM empWHERE mgr IS NULL

5.where语句,order by 排序

-- 5.排序数据。
-- (1)显示在1991年2月1日到1991年5月1日之间雇用的雇员名,岗位及雇佣日期,并以雇佣日期进行排序。I
SELECT ename,job,hiredateFROM emp-- 	WHERE hiredate >= '1991-2-1' AND hiredate <= '1991-5-1'WHERE DATEDIFF(hiredate,'1991-2-1') >= 0 AND DATEDIFF(hiredate,'1991-5-1') <= 0ORDER BY hiredate
-- (2)显示获得补助的所有雇员名工资及补助,并以工资降序排序
SELECT ename,sal,commFROM empWHERE comm IS NOT NULLORDER BY sal

6.基础的sql查询,函数调用

-- 1.选择部门30中的所有员工.
SELECT * FROM empWHERE deptno = 30

-- 2.列出所有办事员(CLERK)的姓名,编号和部门门编号.
SELECT ename,empno,deptnoFROM empWHERE job = 'CLERK'

-- 3.找出佣金高于薪金的员工.
SELECT *FROM empWHERE comm > sal

-- 4.找出佣金高于薪金60%的员工.
SELECT *FROM empWHERE comm > (sal * 0.6)

-- 5.找出部门10中所有经理(MANAGER)和部门20中所有办事员(CLERK)的详细资料.
SELECT *FROM empWHERE deptno = 10 AND job = 'MANAGER' OR deptno = 20 AND job = 'CLERK'

-- 6.找出部门10中所有经理(MANAGER)部门20中所有办事员(CLERK),还有既不是经理又不是办事员
-- 但其薪金大于或等于2000的所有员工的详细资料.
SELECT *FROM empWHERE deptno = 10 AND job = 'MANAGER' OR deptno = 20 AND job = 'CLERK' OR sal > 2000 AND job

-- 7.找出收取佣金的员工的不同工作.
SELECT DISTINCT jobFROM empWHERE comm IS NOT NULL

-- 8.找出不收取佣金或收取的佣金低于100的员工
SELECT *FROM emp-- where comm is null or comm < 100 -- 最好不要用null参与比较 改为下句WHERE comm IS NULL OR IFNULL(comm,0) < 100

-- 9.找出各月倒数第3天受雇的所有员工.
-- 提示: last_day(日期), 可以返回该日期所在月份的最后一天
-- last_day(日期) - 2 得到日期所有月份的倒数第3天
SELECT * FROM empWHERE LAST_DAY(hiredate) - 2  =  hiredate

-- 10.找出早于12年前受雇的员工.
SELECT *FROM emp-- where abs(DATEDIFF(hiredate,CURRENT_DATE()))  > 12 * 365WHERE DATE_ADD(hiredate,INTERVAL 12 YEAR) < NOW()

-- 11.以首字母小写的方式显示所有员工的姓名.
SELECT CONCAT(LCASE(SUBSTRING(ename,1,1)), SUBSTRING(ename,2))FROM emp

-- 12.显示正好为5个字符的员工的姓名.
SELECT *FROM empWHERE LENGTH(ename) = 5

6.1

-- 13.显示不带有"R"的员工的姓名.
SELECT *FROM empWHERE ename NOT LIKE '%R%'

-- 14.显示所有 员工姓名的前三个字符
SELECT SUBSTRING(ename,1,3)FROM emp

-- 15.显示所有员工的姓名,用a替换所有"A"
SELECT REPLACE(ename,'A','a')FROM emp

-- 16.显示满10年服务年限的员工的姓名和受雇日期. 
SELECT ename,hiredateFROM empWHERE DATE_ADD(hiredate,INTERVAL 12 YEAR) < NOW()

-- 17.显示员工的详细资料按姓名排序
SELECT *FROM empORDER BY ename

.

-- 18.显示员工的姓名和受雇日期,根据其服务年限,将最老的员工排在最前面.
SELECT ename,hiredateFROM empORDER BY hiredate 

-- 19.显示所有员工的姓名、工作和薪金按工作降序排序,若工作相同则按薪金排序
SELECT ename,job,salFROM empORDER BY job DESC,sal

-- 20.显示所有员工的姓名、加入公司的年份和月份按受雇日期所在月排序,若月份相同则将最早年份
-- 的员工排在最前面.
SELECT ename,YEAR(hiredate),MONTH(hiredate)FROM empORDER BY MONTH(hiredate),YEAR(hiredate)

-- 21.显示在一个月为30天的情况所有员工的日薪金,忽略余数.
SELECT ename,FLOOR (sal / 30) AS 'daySal'FROM empORDER BY daySal

-- 21.显示在一个月为30天的情况所有员工的日薪金,忽略余数.
SELECT ename,FLOOR (sal / 30) AS 'daySal' -- 使用ROUND四舍五入FROM empORDER BY daySal

 

-- 22.找出在(任何年份的)2月受聘的所有员工。
SELECT ename,hiredateFROM empWHERE MONTH(hiredate) = 2

-- 23.对于每个员工,显示其加入公司的天数.
SELECT ename, hiredate , DATEDIFF(CURRENT_DATE,hiredate)FROM emp

-- 24. 显示姓名字段的任何位置包含" A"的所有员工的姓名.
SELECT enameFROM empWHERE ename LIKE '%A%'

-- 25.以年月日的方式显示所有员工的服务年限(大概)
SELECT ename,FLOOR(DATEDIFF(NOW(),hiredate) / 365 ) AS '工作年' ,FLOOR(DATEDIFF(NOW(),hiredate) % 365 / 31) AS '工作月',DATEDIFF(NOW(),hiredate) % 31 AS '工作日'FROM emp

7.多表查询,子查询,子列

-- (1).列出至少有一个员工的所有部门
SELECT COUNT(*) AS c,deptnoFROM empGROUP BY deptnoHAVING c > 1

-- (2).列出薪金比"SMITH"多的所有员工。
SELECT *FROM empWHERE sal > (SELECT salFROM empWHERE ename = 'SMITH') -- 把该查询做一个子查询

-- (3).列出受雇日期晚于其直接上级的所有员工。
/*先把emp表当做两张表 worker,leader条件 1. worker.hiredate > leader.hiredate
*/
SELECT worker.ename AS '员工名字',worker.hiredate, leader.ename AS '领导名字',leader.hiredateFROM emp worker,emp leaderWHERE worker.hiredate > leader.hiredateAND worker.mgr = leader.empno

 

-- (4).列出部门名称和这些部门的员工信息,同时列出那些没有员工的部门。
SELECT dname,emp.*FROM dept -- 使用左连接 外连接LEFT JOIN emp ON dept.deptno = emp.deptnoORDER BY dname

 

 

-- (5).列出所有"CLERK" : (办事员)的姓名及其部门名称。
SELECT dname,emp.*FROM emp,dept -- 使用左连接 外连接WHERE emp.job = 'CLERK'ORDER BY dname

 

 

-- (6).列出最低薪金大于1500的各种工作。
SELECT MIN(sal) AS min_sal , jobFROM empGROUP BY jobHAVING min_sal > 1500

 

-- (7).列出在部门"SALES"销售部) 工作的员工的姓名。
SELECT ename,dnameFROM emp,deptWHERE emp.deptno = dept.deptno AND dname = 'SALES'

 

-- (8).列出薪金高于公司平均薪金的所有员工。SELECT *FROM empWHERE sal > (SELECT AVG(sal)FROM emp)

 

-- (9).列出与"SCOTT"从事相同工作的所有员工。
SELECT *FROM empWHERE job = (SELECT jobFROM empWHERE ename = 'SCOTT')

 

-- (10).列出薪金高于在部门30工作的所有员工的薪金的员工姓名和薪金。
SELECT ename,salFROM empWHERE sal > (SELECT MAX(sal) FROM empWHERE deptno = 30 /*先查出30号部门里最大的工资*/)

-- (11).列出在每个部门工作的员工数量、平均工资和平均服务期限。
SELECT COUNT(*) AS '各部门的员工数量',FLOOR(AVG(sal)) AS '平均工资',FLOOR (AVG(DATEDIFF(NOW(),hiredate))) AS '平均服务期限'FROM empGROUP BY deptno

-- (11).列出在每个部门工作的员工数量、平均工资和平均服务期限。
SELECT COUNT(*) AS '各部门的员工数量',FORMAT(AVG(sal),2) AS '平均工资',FORMAT (AVG(DATEDIFF(NOW(),hiredate)) / 365,2) AS '平均服务期限(年)'FROM empGROUP BY deptno

-- (12).列出所有员工的姓名、部门名称和工资。
SELECT *FROM empJOIN dept ON emp.deptno = dept.deptno

-- (13).列出所有部门的详细信息和部门人数。
SELECT dept.*,cFROM dept,(SELECT COUNT(*) AS c,deptnoFROM empGROUP BY deptno /*-- 看作子查询*/)tmpWHERE tmp.deptno = dept.deptno

-- (14).列出各种工作的最低工资。
SELECT MIN(sal),jobFROM empGROUP BY job

-- (15).列出MANAGER (经理)的最低薪金。
SELECT MIN(sal),jobFROM empWHERE job = 'MANAGER'GROUP BY job

 

 


-- (16).列出所有员工的年工资,按年薪从低到高排序。
SELECT ename,(sal + IFNULL(comm,0)) * 12 yearSalFROM empORDER BY yearSal

8.综合

 

-- 完成最后一个综合的练习-- 8. 设学校环境如下:一个系有若干个专业,每个专业一年只招一个班,每个班有若干个学生。
-- 现要建立关于系、学生、班级的数据库,关系模式为:
-- 班CLASS (班号classid,专业名subject,系名deptname,入学年份enrolltime,人数num)
-- 学生STUDENT (学号studentid,姓名name,年龄age,班号classid)
-- 系 DEPARTMENT (系号departmentid,系名deptname)
-- 试用SQL语言完成以下功能:  homework05.sql 10min 
-- 
-- (1) 建表,在定义中要求声明:
--     (1)每个表的主外码。
--     (2)deptname是唯一约束。
--     (3)学生姓名不能为空。-- 创建表 系 DEPARTMENT (系号departmentid,系名deptname)
CREATE TABLE DEPARTMENT (departmentid VARCHAR(32) PRIMARY KEY,deptname VARCHAR(32) UNIQUE NOT NULL);-- 班CLASS (班号classid,专业名subject,系名deptname,入学年份enrolltime,人数num)
CREATE TABLE `class` (classid INT PRIMARY KEY,`subject` VARCHAR(32) NOT NULL DEFAULT '',deptname VARCHAR(32) , -- 外键字段,在表定义后指定enrolltime INT NOT NULL DEFAULT 2000,num INT NOT NULL DEFAULT 0,FOREIGN KEY (deptname) REFERENCES  DEPARTMENT(deptname));-- 学生STUDENT (学号studentid,姓名name,年龄age,班号classid)
CREATE TABLE hsp_student (studentid INT PRIMARY KEY,`name` VARCHAR(32) NOT NULL DEFAULT '',age INT NOT NULL DEFAULT 0,classid INT, -- 外键FOREIGN KEY (classid) REFERENCES  `class`(classid));-- 添加测试数据INSERT INTO department VALUES('001','数学');
INSERT INTO department VALUES('002','计算机');
INSERT INTO department VALUES('003','化学');
INSERT INTO department VALUES('004','中文');
INSERT INTO department VALUES('005','经济');INSERT INTO class VALUES(101,'软件','计算机',1995,20);
INSERT INTO class VALUES(102,'微电子','计算机',1996,30);
INSERT INTO class VALUES(111,'无机化学','化学',1995,29);
INSERT INTO class VALUES(112,'高分子化学','化学',1996,25);
INSERT INTO class VALUES(121,'统计数学','数学',1995,20);
INSERT INTO class VALUES(131,'现代语言','中文',1996,20);
INSERT INTO class VALUES(141,'国际贸易','经济',1997,30);
INSERT INTO class VALUES(142,'国际金融','经济',1996,14);INSERT INTO hsp_student VALUES(8101,'张三',18,101);
INSERT INTO hsp_student VALUES(8102,'钱四',16,121);
INSERT INTO hsp_student VALUES(8103,'王玲',17,131);
INSERT INTO hsp_student VALUES(8105,'李飞',19,102);
INSERT INTO hsp_student VALUES(8109,'赵四',18,141);
INSERT INTO hsp_student VALUES(8110,'李可',20,142);
INSERT INTO hsp_student VALUES(8201,'张飞',18,111);
INSERT INTO hsp_student VALUES(8302,'周瑜',16,112);
INSERT INTO hsp_student VALUES(8203,'王亮',17,111);
INSERT INTO hsp_student VALUES(8305,'董庆',19,102);
INSERT INTO hsp_student VALUES(8409,'赵龙',18,101);SELECT * FROM department
SELECT * FROM class
SELECT * FROM hsp_student-- (3) 完成以下查询功能
--   3.1 找出所有姓李的学生。
-- 查表 hsp_student , like
SELECT * FROM hsp_studentWHERE `name` LIKE '李%' 
--   3.2 列出所有开设超过1个专业的系的名字。-- 1. 先查询各个系有多少个专业
SELECT COUNT(*) AS nums, deptname FROM classGROUP BY deptname HAVING nums > 1
--   3.3 列出人数大于等于30的系的编号和名字。
-- 1. 先查出各个系有多少人, 并得到 >= 30 的系SELECT SUM(num) AS nums, deptname  FROM class GROUP BY  deptname HAVING nums >= 30-- 2. 将上面的结果看成一个临时表 和 department 联合查询即可SELECT  tmp.*, department.departmentidFROM department , (SELECT SUM(num) AS nums, deptname  FROM class GROUP BY  deptname HAVING nums >= 30) tmp WHERE department.deptname = tmp.deptname;-- (4) 学校又新增加了一个物理系,编号为006
-- 添加一条数据
INSERT INTO department VALUES('006','物理系');
-- (5) 学生张三退学,请更新相关的表-- 分析:1. 张三所在班级的人数-1 2. 将张三从学生表删除  3. 需要使用事务控制-- 开启事务
START TRANSACTION;
-- 张三所在班级的人数-1 
UPDATE class SET num = num - 1WHERE classid = (SELECT classid FROM hsp_student WHERE NAME = '张三');DELETE FROM hsp_studentWHERE NAME = '张三';-- 提交事务
COMMIT;SELECT * FROM hsp_student;
SELECT * FROM class

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

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

相关文章

oracle rac环境归档日志清除

文章目录 一、处理步骤1、使用终端登录上服务器查看磁盘使用状态2、使用恢复备份管理工具RMAN删除归档日志 二、详细操作步骤三、定时任务自动清归档日志1、编写删除脚本4、测试脚本运行情况5、设置定时任务每周执行一次&#xff0c;并测试运行效果 昨天单位的所有系统都连不上…

JoyT的科研之旅第一周——科研工具学习及论文阅读收获

CiteSpace概述 CiteSpace 是一个用于可视化和分析科学文献的工具&#xff0c;它专门针对研究者进行文献回顾和趋势分析。CiteSpace 的核心功能是创建文献引用网络&#xff0c;这些网络揭示了研究领域内各个文献之间的相互关系。使用 CiteSpace 可以为论文研究做出贡献的几种方…

激光塑料透光率检测仪进行材料质量监控

焊接质量检测是对焊接成果的检测&#xff0c;目的是保证焊接结构的完整性、可靠性、安全性和使用性。焊接质量检测通常包括外观检验、内部检查、无损检测以及试件制作与送检等步骤。通过这些检测方法&#xff0c;可以全面评估焊接质量&#xff0c;确保其符合设计要求和规范标准…

jenkins + gitlab 自动部署(webhook)

Jenkins是一个流行的开源CI/CD工具&#xff0c;可以与Git等版本控制系统集成&#xff0c;实现自动构建、测试和部署。Webhook是一种机制&#xff0c;可以在Git仓库中设置&#xff0c;在代码提交或合并请求时触发Jenkins构建任务&#xff0c;以完成自动化部署。 实操 设备信息 …

Linux常用命令——bind命令

在线Linux命令查询工具 bind 显示或设置键盘按键与其相关的功能 补充说明 bind命令用于显示和设置命令行的键盘序列绑定功能。通过这一命令&#xff0c;可以提高命令行中操作效率。您可以利用bind命令了解有哪些按键组合与其功能&#xff0c;也可以自行指定要用哪些按键组合…

【Unity3D】MAX聚合广告SDK——Pangle广告接入

Pangle, App Monetization Simplified 注册 登录 创建应用 创建广告单元 将其应用ID和广告ID关联到MAX广告。 下载Pangle Unity Plugin包&#xff0c;新建一个空工程&#xff08;很重要&#xff09; Unity版本2019.4.0f1 gradle plugin 4.2.0 gradle版本6.7.1 build_tools 34.…

golang panic关键词执行原理与代码分析

使用的go版本为 go1.21.2 首先我们写一个简单的panic调度与捕获代码 package mainfunc main() {defer func() {recover()}()panic("panic test") }通过go build -gcflags -S main.go获取到对应的汇编代码 可以看到当我们调度panic时&#xff0c;Go的编译器会将这段…

数据链路层-以太网协议

目录 数据链路层的作用认识以太网以太网帧格式认识MAC地址对比理解MAC地址和IP地址认识MTUMTU对UDP协议的影响MTU对TCP协议的影响数据跨网络传输的过程ARP协议ARP协议作用ARP数据报的格式ARP协议的工作流程 数据链路层的作用 我们知道数据能在网络中从一台主机发送到另一台主机…

JavaScript字符串操作指南:跨行表示与模板字面量

背景: 在 JavaScript 中&#xff0c;如果一个字符串需要跨行表示&#xff0c;你可以使用多种方式来实现。 实现&#xff1a; 法一&#xff1a; 使用反斜杠&#xff08;\&#xff09;进行换行续行&#xff1a; let str "这是一个跨行的字符串&#xff0c;\ 我在这里使…

Windows核心编程 进程间通信

目录 进程间通信概述 发送消息 WM_COPYDATA DLL共享段 文件映射 文件相关API CreateFile ReadFile WriteFile CloseHandle SetFilePointerEx 设置文件指针 获取文件大小 GetFileSize 结构体 LARGE_INTEGER 文件映射用于读写文件数据 文件映射用于进程间通信(带文…

UVA437 巴比伦塔 The Tower of Babylon

UVA437 巴比伦塔 The Tower of Babylon 题面翻译 题目描述 你可能已经听说过巴比伦塔的传说。现在这个传说的许多细节已经被遗忘。所以本着本场比赛的教育性质&#xff0c;我们现在会告诉你整个传说&#xff1a; 巴比伦人有 n n n 种长方形方块&#xff0c;每种有无限个&a…

使用Pytorch从零开始构建Conditional PixelCNN

条件 PixelCNN PixelCNN 是 PixelRNN 的卷积版本&#xff0c;它将图像中的像素视为一个序列&#xff0c;并在看到前面的像素后预测每个像素&#xff08;定义如上和左&#xff0c;尽管这是任意的&#xff09;。PixelRNN 是图像联合先验分布的自回归模型&#xff1a; p ( x ) …

【开源】基于Vue和SpringBoot的食品生产管理系统

项目编号&#xff1a; S 044 &#xff0c;文末获取源码。 \color{red}{项目编号&#xff1a;S044&#xff0c;文末获取源码。} 项目编号&#xff1a;S044&#xff0c;文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 加工厂管理模块2.2 客户管理模块2.3…

【Proteus仿真】【STM32单片机】智能垃圾桶设计

文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用Proteus8仿真STM32单片机控制器&#xff0c;使用报警模块、LCD1602液晶模块、按键模块、人体红外传感器、HCSR04超声波、有害气体传感器、SG90舵机等。 主要功能&#xff1a; 系统运行后&…

文章解读与仿真程序复现思路——电网技术EI\CSCD\北大核心《基于Fisher时段划分的配电网源网荷储多时间尺度协调优化调控策略》

这个标题涉及到电力系统领域的一些关键概念和方法。让我们逐步解读&#xff1a; 基于Fisher时段划分&#xff1a; "基于"表示这个策略或方法的核心基础是某个特定的理论或技术。"Fisher时段划分"可能指的是使用Fisher信息矩阵进行时间划分。Fisher信息矩阵…

居家适老化设计第三十条---卫生间之坐便

以上产品图片均来源于淘宝 侵权联系删除 在居家适老化中&#xff0c;马桶是非常重要的设施之一&#xff0c;它能够提供方便、安全、舒适的上厕所体验。以下是一些居家适老化中常见的马桶设计和功能&#xff1a;1. 高度合适&#xff1a;为了方便老年人坐起和站起&#xff0c;马…

Da-transunet:将空间和通道双重关注与Transformer u-net相结合用于医学图像分割

DA-TRANSUNET: INTEGRATING SPATIAL AND CHANNEL DUAL ATTENTION WITH TRANSFORMER U-NET FOR MEDICAL IMAGE SEGMENTATION 1、方法1.1 模型1.2 双注意力模块&#xff08;DA-Block&#xff09;1.2.1 PAM&#xff08; 位置注意力模块&#xff09;1.2.2 CAM&#xff08;通道注意力…

NX二次开发UF_CURVE_ask_int_parms_sc 函数介绍

文章作者&#xff1a;里海 来源网站&#xff1a;https://blog.csdn.net/WangPaiFeiXingYuan UF_CURVE_ask_int_parms_sc Defined in: uf_curve.h int UF_CURVE_ask_int_parms_sc(tag_t int_curve_object, int * num_objects_set_1, tag_t * * object_set_1, int * num_object…

Swing程序设计(6)边界布局,网格布局

文章目录 前言一、布局介绍 1.边界布局2.网格布局3.网格组布局.总结 前言 Swing程序中还有两种方式边界布局&#xff0c;网格布局供程序员使用。这两种布局方式更能体现出软件日常制作的排列布局格式。 一、布局介绍 1.BorderLayout边界布局 语法&#xff1a;new BorderLayout …

laravel8安装多应用多模块(笔记三)

先安装laravel8 Laravel 安装&#xff08;笔记一&#xff09;-CSDN博客 一、进入项目根目录安装 laravel-modules composer require nwidart/laravel-modules 二、 大于laravel5需配置provider&#xff0c;自动生成配置文件 php artisan vendor:publish --provider"Nwid…