实验4 mySQL查询和视图

一、实验目的

  1. 掌握SELECT语句的基本语法
  2. 多表连接查询
  3. GROUP BY的使用方法。
  4. ORDER BY的使用方法。

二、实验步骤、内容、结果

实验内容:

实验4.1数据库的查询

目的与要求

(1)掌握SELECT语句的基本语法。

(2)掌握子查询的表示。

(3)掌握连接查询的表示。

(4)掌握SELECT语句的GROUP BY子句的作用和使用方法。

(5)掌握SELECT语句的ORDER BY子句的作用和使用方法。

(6)掌握SELECT语句的LIMIT子句的作用和使用方法。

实验准备

(1)了解SELECT语句的基本语法格式。

(2)了解SELECT语句的执行方法。

(3)了解子查询的表示方法。

(4) 了解连接查询的表示。

(5)了解SELECT语句的GROUPBY子句的作用和使用方法。(6)了解SELECT语句的ORDER BY子句的作用。

  1. 了解SELECT语句的LIMIT子句的作用。

实验内容

  1. SELECT语句的基本使用
  1. 对于实验2给出的数据库表结构,查询每个雇员的所有数据。
  2. 查询每个雇员的姓名、地址和电话。
  3. 查询EmployeeID为000001的雇员的地址和电话。
  4. 查询Employees表中女雇员的地址和电话,使用As子句将结果中各列的标题分别指定为地址、电话。
  5. 查询Employees.表中雇员的姓名和性别,要求Sex值为1时显示为“男”,为0时显示为“女”。
  6. 计算每个雇员的实际收入。
  7. 获得雇员总数。
  8. 找出所有姓王的雇员的部门号。
  9. 找出所有收入为2009—3000元的雇员号码。
  1. 子查询的使用
  1. 查找在财务部工作的雇员情况。
  2. 查找研发部年龄不低于市场部所有雇员年龄的雇员姓名。
  3. 查找比广告部所有的雇员收入都高的姓名。
  1. 连接查询的使用
  1. 查询每个雇员的情况及其薪水的情况。
  2. 使用内连接的方法查询名字为“王林”的雇员所在部门。
  3. 查找广告部收入在2000元以上的雇员姓名及其薪水详情。
  1. GROUP BY、ORDER BY 和LIMIT子句的使用。
  1. 查找Employees中男性和女性的人数。
  2. 查找雇员数超过2人的部门名称和雇员数量。
  3. 将Employees表中的雇员号码由大到小排列。
  4. 返回Employees表中的前5位雇员的信息。

实验4.2视图的使用

目的和要求

(1)熟悉规图的概念和作用

(2)掌握视图的创建方法

(3)掌握如何查询和修改视图

实验准备

(1)了解视图的概念.

(2)了解创建视图的方法。

(3)了解对视图的操作。

实验内容

1.创建视图

  1. 创建YGGL数据库上的视图DS_ VIEW,视图包含Departments表的全部列。
  2. 创建YGGL数据库上的视图Employees_view,视图包含员工号码、姓名和实际收入,使用如下SQL语句:

2.查询视图

(1)从视图DS_VIEW中查询出部门号为3的部门名称

(2)从视图Employees_view查询出姓名为“王林”的员工的实际收入

3.更新视图

在更新视图前需要了解可更新视图的概念,了解什么视图是不可以进行修改的。更新视图真正更新的是与视图关联的表。

(1)向视图DS_VIEW中插入一行数据:6,财务部,财务管理

(2)修改视图DS_VIEW,将部门号为5的部门名称修改为“生产车间”

(3)修改视图Employees_view中号码为000001的员工的姓名为“王浩”

(4)删除视图DS_VIEW中部门号为“1”的数据

4.删除视图

删除DS_VIEW。

实验步骤:

打开Navicat Premium 15编辑器,编辑代码运行

代码:

#创建YGGL数据库

create database YGGL;

#使用数据库

use YGGL;

/*

实验一

*/

#创建表Employees

create table Employees

(

EmployeeID char(6) not null,

Name char(10) not null,

Education char(4) not null,

Birthday date not null,

Sex char(2) not null default '1',

WorkYear tinyint(1),

Address varchar(20),

PhoneNumber char(12),

DepartmentID char(3) not null,

primary key(EmployeeID)

)engine=innodb;

#创建表Departments

create table Departments

(

DepartmentID char(3) not null primary key,

DepartmentName char(20) not null,

Note text(16)

);

#创建表Salary

create table Salary(

EmployeeID char(6) not null,

InCome char(8) not null,

OutCome float(8) not null,

primary key(EmployeeID)

);

/*

create table Departments

(

DepartmenetID char(3) not null primary key,

DepartmentName char(20) not null,

Note text(16),

部门号 char(3) not null,

部门名称 char(20) not null,

备注 text(16)

);

create table Salary(

EmployeeID char(6) not null,

Income char(8) not null,

Outcome float(8) not null,

编号 char(6) not null,

收入 char(8) not null,

支出 float(8) not null,

primary key(EmployeeID)

);

*/

/*

实验二

*/

#向表Employees中插入数据

insert into Employees values('000001','王林','大专','1966-01-23',1,8,'中山路32-1-508','83355668',2);

insert into Employees values('010008','伍容华','本科','1976-03-28',1,3,'北京东路100-2','83321321',1);

insert into Employees values('020010','王向容','硕士','1982-12-09',1,2,'四牌楼10-0-108','83792361',1);

insert into Employees values('020018','李丽','大专','1960-07-30',0,6,'中山路102-2','83413301',1);

insert into Employees values('102201','刘明','本科','1972-10-18',1,3,'虎踞路100-2','83606608',5);

insert into Employees values('102208','朱俊','硕士','1965-09-28',1,2,'牌楼巷5-3-106','84708817',5);

insert into Employees values('108991','钟敏','硕士','1979-08-10',0,4,'中山路10-3-105','83346722',3);

insert into Employees values('111006','张石兵','本科','1974-10-01',1,1,'解放路34-1-203','84563418',5);

insert into Employees values('210678','林涛','大专','1977-04-02',1,2,'中山北路24-35','83467336',3);

insert into Employees values('302566','李玉珉','本科','1968-09-20',1,3,'热和路209-3','58765991',4);

insert into Employees values('308759','叶凡','本科','1978-11-18',1,2,'北京西路3-7-52','83308901',4);

insert into Employees values('504209','陈琳琳','大专','1969-09-03',0,5,'汉中路120-4-12','84468158',4);

#向表Salary中插入数据

insert into Salary values('000001','2100.8','123.09');

insert into Salary values('010008','1582.62','88.03');

insert into Salary values('102201','2569.88','185.65');

insert into Salary values('111006','1978.01','79.58');

insert into Salary values('504209','2066.15','108.0');

insert into Salary values('302566','2980.7','210.2');

insert into Salary values('108991','3259.98','281.52');

insert into Salary values('020010','2860.0','198.0');

insert into Salary values('020018','2347.68','180.0');

insert into Salary values('308759','2531.98','199.08');

insert into Salary values('210678','2240.0','121.0');

insert into Salary values('102208','1980.0','100.0');

/*

insert into Departments values(

('1','财务部','NULL'),

('2','人力资源部','NULL'),

('3','经理办公室','NULL'),

('4','研发部','NULL'),

('5','市场部','NULL'),

('','','')

);

*/

#向表 Departments中插入数据

insert into Departments values('1','财务部','NULL');

insert into Departments values('2','人力资源部','NULL');

insert into Departments values('3','经理办公室','NULL');

insert into Departments values('4','研发部','NULL');

insert into Departments values('5','市场部','NULL');

#insert into Departments values('','','');

/*

实验三

*/

#删除表Employees的第一行和表Salary的第一行

DELETE FROM `yggl`.`employees` WHERE `EmployeeID` = '000001';

DELETE FROM `yggl`.`salary` WHERE `EmployeeID` = '000001';

/*

3.插入数据

(1)

*/

insert into Employees values('000001','王林','大专','1966-01-23','1',8,'中山路32-1-508','83355668','2');

/*

(2)

*/

insert into Salary set EmployeeID='000001',InCome=2100.8,OutCome=123.09;

/*

(3)

*/

replace into Departments values('1','广告部','负责推广产品');

#查看表Salary

select *  from  Departments;

/*

思考与练习

*/

#创建空表Employees2

create table Employees2

(

EmployeeID char(6) not null,

Name char(10) not null,

Education char(4) not null,

Birthday date not null,

Sex char(2) not null default '1',

WorkYear tinyint(1),

Address varchar(20),

PhoneNumber char(12),

DepartmentID char(3) not null,

primary key(EmployeeID)

)engine=innodb;

#(2)INSERT INTO 语句还可以通过 SELECT 子句来添加其他表中的数据,但是 SELECT 子句中的列要与添加表的列数目和数据类型都﹣﹣对应。假设有另一个空表Employees2,结构和 Employees 表完全相同,使明 INSERT INTO 语句将 Employees 表中数据添加到Employees2中,语句如下:

insert into Employees2 select * from Employees;

/*查看Employees2表中的变化,如图实验3.2所示。

可见,这时表Employees2中已经有了表 Employees 的全部数据

*/

select * from Employees2;

/*

4.使用 SQL 语句修改表数据

(1)使用 SQL 命令修改表 Salary 中的某个记录的字段值:

*/

update Salary  set InCome=2890 where EmployeeID='102201';

/*

(2)将所有职工收入增加100:

*/

update Salary set InCome =InCome+100;

/*说明:可以在界面工具中观察数据的变化,验证操作是否成功。

(3)使用 SQL 命令删除表 Employees 中编号为102201的职工信息:

*/

delete from Employees where EmployeeID='102201';

/*

(4)删除所有收入大于2500的员工信息:

*/

delete from Employees where EmployeeID=(select EmployeeID from Salary where InCome >2500);

/*

(5)使用TRUNCATE TABLE

*/

truncate table Salary;

/*

实验4.1 数据库的查询

1 .SELECT语句的基本使用

(1)对于实验2给出的数据库表结构,查询每个雇员的所有数据。

*/

use YGGL;

select * from Employees;

/*

(2)查询每个雇员的姓名、地址和电话。

*/

select Name,Address,PhoneNumber from Employees;

/*

(3)查询EmployeeID为000001的雇员的地址和电话。

*/

select Address,PhoneNumber from Employees where EmployeeID='000001';

/*

(4)查询Employees表中女雇员的地址和电话,使用As子句将结果中各列的标题分别指定为地址、电话。

*/

select Address as 地址,PhoneNumber as 电话 from Employees where sex='0';

/*

(5)查询Employees.表中雇员的姓名和性别,要求Sex值为1时显示为“男”,为0时显示为“女”。

*/

select Name as 姓名,

case

when Sex='1' then '男'

when Sex='0' then '女'

end as 性别

from Employees;

/*

(6)计算每个雇员的实际收入。

*/

select EmployeeID,InCome-OutCome as 实际收入 from Salary;

/*

(7)获得雇员总数。

*/

select COUNT(*) from Employees;

/*

(8)找出所有姓王的雇员的部门号。

*/

select DepartmentID from Employees where name like '王%';

/*

(9)找出所有收入为2009—3000元的雇员号码。

*/

select EmployeeID from Salary where InCome between 2000 and 3000;

/*

2.子查询的使用

(1)查找在财务部工作的雇员情况。

*/

select * from Employees

where DepartmentID=

(select DepartmentID

from Departments

where DepartmentName='广告部');

/*

(2)查找研发部年龄不低于市场部所有雇员年龄的雇员姓名。

*/

select Name from

Employees where DepartmentID in

(select DepartmentID

from Departments

where DepartmentName='研发部')

and

Birthday <=ALL

(select Birthday

from Employees

 where DepartmentID in

 (select DepartmentID

 from Departments

 where DepartmentName='市场部'));

/*

(3)查找比广告部所有的雇员收入都高的姓名。

*/

select Name

from Employees

where EmployeeID in

(select EmployeeID

from Salary where InCome>

all (select InCome

from Salary

where EmployeeID in

 (select EmployeeID

 from Employees

 where  DepartmentID=

 (select DepartmentID

from Departments

where DepartmentName='广告部')

)

)

);

/*

3.连接查询的使用

(1)查询每个雇员的情况及其薪水的情况。

*/

select Employees.*,Salary.* from Employees,Salary where Employees.EmployeeID=Salary.EmployeeID;

/*

(2)使用内连接的方法查询名字为“王林”的雇员所在部门。

*/

select DepartmentName from Departments join Employees on Departments.DepartmentID=Employees.DepartmentID where Employees.Name='王林';

/*

(3)查找广告部收入在2000元以上的雇员姓名及其薪水详情。

*/

select Name,InCome,OutCome from Employees,Salary,Departments where Employees.EmployeeID=Salary.EmployeeID and Employees.DepartmentID=Departments.DepartmentID and DepartmentName='广告部' and InCome > 2000;

/*

4.GROUP BY、ORDER BY 和LIMIT子句的使用。

(1)查找Employees中男性和女性的人数。

*/

select Sex,COUNT(sex) from Employees group by Sex;

/*

(2)查找雇员数超过2人的部门名称和雇员数量。

*/

select DepartmentName,COUNT(*) AS 人数 from Employees,Departments where Employees.DepartmentID=

Departments.DepartmentID group by Employees.DepartmentID having COUNT(*) >2;

/*

(3)将Employees表中的雇员号码由大到小排列。

*/

select EmployeeID from Employees order by EmployeeID DESC;

/*

(4)返回Employees表中的前5位雇员的信息。

*/

select * from Employees limit 5;

/*

实验4.2

*/

/*

11.创建视图

(1)创建YGGL数据库上的视图DS_ VIEW,视图包含Departments表的全部列。

*/

create or replace view DS_VIEW as select * from Departments;

/*

(2)创建YGGL数据库上的视图Employees_view,视图包含员工号码、姓名和实际收入,

*/

create or replace view Employees_view(EmployeeID,Name,RealIncome) as select Employees.EmployeeID,Name,InCome-OutCome from Employees,Salary where Employees.EmployeeID=Salary.EmployeeID

/*

2.查询视图

(1)从视图DS_VIEW中查询出部门号为3的部门名称

*/

select DepartmentName from DS_VIEW where DepartmentID='3';

/*

(2)从视图Employees_view查询出姓名为“王林”的员工的实际收入

*/

select RealIncome from Employees_view where Name='王林';

/*

3.更新视图

(1)向视图DS_VIEW中插入一行数据:6,财务部,财务管理

*/

insert into DS_VIEW values('6','财务部','财务管理');

/*

(2)修改视图DS_VIEW,将部门号为5的部门名称修改为“生产车间”

*/

update DS_VIEW set DepartmentName='生产车间' where DepartmentID='5';

/*

(3)修改视图Employees_view中号码为000001的员工的姓名为“王浩”

*/

update Employees_view set Name='王浩' where EmployeeID='000001';

/*

(4)删除视图DS_VIEW中部门号为“1”的数据

*/

delete from DS_VIEW where DepartmentID='1';

/*

4.删除视图

删除DS_VIEW。

*/

drop view DS_VIEW

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

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

相关文章

【bug】fused_bias_act_kernel.cu卡住没反应

简述 在推理人脸修复face restoration算法 GPEN的时候&#xff0c;发现有时候fused_bias_act_kernel.cu卡住没反应。 解决 清理下缓存&#xff0c;让程序自己再编译下

.net/C#进程间通信技术方案总结

C# 应用进程间通信(IPC)技术方案 进程间通信(Inter-Process Communication, IPC)是不同进程之间交换数据和消息的机制。以下是C#中常用的IPC技术方案&#xff1a; 1. 命名管道(Named Pipes) 适用于本地机器上的进程通信&#xff0c;支持双向通信。 ​​服务端示例​​&…

阿里云服务器数据库故障排查指南?

阿里云服务器数据库故障排查指南? 以下是针对阿里云服务器&#xff08;如ECS自建数据库或阿里云RDS等托管数据库&#xff09;的故障排查指南&#xff0c;涵盖常见问题的定位与解决方案&#xff1a; 一、数据库连接失败 检查网络连通性 ECS自建数据库 确认安全组规则放行数据库…

深度学习 ———— 迁移学习

迁移学习原理 什么是迁移学习&#xff1f; 迁移学习利用在大规模数据集&#xff08;如ImageNet&#xff09;上预训练的模型&#xff0c;改装小数据集&#xff08;如CIFAR-10&#xff09;。优势&#xff1a; 减少训练时间&#xff1a;预训练模型已学习通用特征&#xff08;如边…

单调栈模版型题目(3)

单调栈型题目贡献法 基本模版 这是数组a中的 首先我们要明白什么叫做贡献&#xff0c;在一个数组b{1,3,5}中&#xff0c;连续包含1的连续子数组为{1}&#xff0c;{1,3}&#xff0c;{1,3,5}&#xff0c;一共有三个&#xff0c;这三个数一共能组成6个连续子数组&#xff0c;而其…

日常知识点之随手问题整理(思考单播,组播,广播哪个更省带宽)

新入职的公司在某些场景下无脑使用组播技术&#xff0c;自己突然就意识到一个问题&#xff1a;单播&#xff0c;组播&#xff0c;广播&#xff0c;哪个更省带宽&#xff1f; 有所收获&#xff0c;做点笔记&#xff0c;仅仅是个人理解~ 1&#xff1a;简单理解 单播&#xff1…

R1-Omni

一、Omni概述 Omni 文本视频音频&#xff0c;全模态。 R1Omni 强化学习全模态。 二、Omni举例-humanOmni humanOmni&#xff1a;以人体姿态和人物交互为中心的全模态模型。 visual projector有3个&#xff0c;分别负责人脸标签、姿态检测、人和物交互。有点像moe。text enc…

linux中的日志分割

1.问题背景&#xff0c;nginx日志过大不好删除 [rootlocalhost cron.daily]# cd /lk/nginx/log/ [rootlocalhost log]# ll 总用量 2386188 -rw-r--r--. 1 root root 2078699697 5月 9 13:02 access.log -rw-r--r--. 1 root root 11138 5月 6 10:28 error.log [rootloc…

华为云Flexus+DeepSeek征文|从开通到应用:华为云DeepSeek-V3/R1商用服务深度体验

前言 本文章主要讲述在华为云ModelArts Studio上 开通DeepSeek-V3/R1商用服务的流程&#xff0c;以及开通过程中的经验分享和使用感受帮我更多开发者&#xff0c;在华为云平台快速完成 DeepSeek-V3/R1商用服务的开通以及使用入门注意&#xff1a;避免测试过程中出现部署失败等问…

【机器学习-线性回归-5】多元线性回归:概念、原理与实现详解

线性回归是机器学习中最基础且广泛应用的算法之一&#xff0c;而多元线性回归则是其重要扩展。本文将全面介绍多元线性回归的核心概念、数学原理及多种实现方式&#xff0c;帮助读者深入理解这一强大的预测工具。 1. 多元线性回归概述 1.1 什么是多元线性回归 多元线性回归(…

GOC指令

网络版GoC常见绘图命令说明 &#xff08;V3.8&#xff09; 目录 l 基本画图命令 fd, bk, lt, rt l 设置笔状态命令 c, rgb, size, up, down l 状态命令 show, hide, speed, showXY, wait, pause, cls, clsRec l 增强画图命令 o, oo, e, ee, r, rr l 坐标命令 moveTo, lineTo, g…

Qt获取CPU使用率及内存占用大小

Qt 获取 CPU 使用率及内存占用大小 文章目录 Qt 获取 CPU 使用率及内存占用大小一、简介二、关键函数2.1 获取当前运行程序pid2.2 通过pid获取运行时间2.3 通过pid获取内存大小 三、具体实现五、写在最后 ​ 一、简介 近期在使用软件的过程中发现一个有意思的东西。如下所示&a…

期刊论文写作注意点

下面给出关于期刊写作的几个关键注意点 一、摘要突出创新点 最重要的是论文的摘要&#xff0c;因为在论文送审的时候&#xff0c;编辑如果没有时间&#xff0c;最先看的就是摘要。摘要要写好。如果投的是顶刊&#xff0c;在摘要里面尽量不要写是在什么方法的基础上进行改进之类…

Swagger 3.0 中注解详细示例

Swagger 3.0 提供了丰富的注解来详细描述 API 的请求和响应。以下是一个使用 Operation、Parameter、RequestBody 和 ApiResponse 注解的示例&#xff0c;展示了如何设置请求头、请求参数、路径变量、请求体和响应体。代码中未使用 DTO 对象&#xff0c;而是使用 Map 来传递参数…

切比雪夫不等式专题习题解析

切比雪夫不等式专题习题解析 前言 本文为概率论习题集专栏的切比雪夫不等式专题习题解析,针对习题篇中的10道题目提供详细解答。希望通过这些解析帮助大家深入理解切比雪夫不等式的应用和意义。 一、基础概念题解析 习题1解析: 错误。切比雪夫不等式适用于任何具有有限方…

软件测试的概念

需求的概念 开发模型 测试模型 1. 什么是需求 在多数软件公司&#xff0c;会有两部分需求&#xff0c;⼀部分是⽤⼾需求&#xff0c;⼀部分是软件需求。 1.1 ⽤⼾需求 ⽤⼾需求&#xff1a;可以简单理解为甲⽅提出的需求&#xff0c;如果没有甲⽅&#xff0c;那么就是终端⽤⼾…

前端面试每日三题 - Day 29

这是我为准备前端/全栈开发工程师面试整理的第29天每日三题练习&#xff1a; ✅ 题目1&#xff1a;Web Components技术全景解析 核心三要素 Custom Elements&#xff08;自定义元素&#xff09; class MyButton extends HTMLElement {constructor() {super();this.attachShado…

StreamRL:弹性、可扩展、异构的RLHF架构

StreamRL&#xff1a;弹性、可扩展、异构的RLHF架构 大语言模型&#xff08;LLMs&#xff09;的强化学习&#xff08;RL&#xff09;训练正处于快速发展阶段&#xff0c;但现有架构存在诸多问题。本文介绍的StreamRL框架为解决这些难题而来&#xff0c;它通过独特设计提升了训…

LVGL的核心:lv_timer_handler

文章目录 &#x1f9e0; 一句话总结 LVGL 的运行核心&#xff1a;&#x1f501; 1. while(1) 主循环中的 lv_task_handler()⏱️ 2. lv_timer_handler() 定时器调度核心✅ 并发控制✅ 关键行为流程&#xff1a;&#x1f300; 任务执行逻辑&#xff1a;&#x1f9ee; 计算下一次…

【数据机构】2. 线性表之“顺序表”

- 第 96 篇 - Date: 2025 - 05 - 09 Author: 郑龙浩/仟墨 【数据结构 2】 文章目录 数据结构 - 2 -线性表之“顺序表”1 基本概念2 顺序表(一般为数组)① 基本介绍② 分类 (静态与动态)③ 动态顺序表的实现**test.c文件:****SeqList.h文件:****SeqList.c文件:** 数据结构 - 2 …