【典型例题】数据库——用MySQL来建立创建员工表;

本文介绍如何通过MySQL命令行创建员工表,并演示添加、删除、修改及查询数据的具体步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

作业:

创建员工表(employee),要求包含字段(工号、姓名、年龄、性别、薪资、部门),主键为工号。

要求命令行完成以下操作:(禁止使用图形工具软件)

   1)添加三条员工信息

       分别是:        

         1,张三,18 , 男,5000 , IT部门

         3,李四,20,男,6000,市场部

         2,小红,28,女,10000,人事部

2)删除关于“张三“的记录

3)将“李四“的性别改为”女”

4)查询并显示员工表中所有的员工信息


首先我们需要运行MySQL软件,来操作;

1.首先,我们要在database数据库中创建一个员工表:create table employee( ① ); 

①为各个属性,比如姓名,年龄,性别,薪水,部门;

注意:

1)MySQL中的属性和该属性的类型是和java中相反的,如,在java中为:int age;而在MySQL中为 age int;

2)primary key为“主键”约束符,用来唯一标识某个属性,如id int primary key

3)auto_increment是自动顺序增长,用来逐个增加某个自然数;word文档里面,如果标记了序号,换行是可能会自动增长;

4)各个属性之间用逗号隔开"  , ",这个逗号必须是英文的逗号,中文的逗号不可以;

5)如果属性是字符串属性,不能用String,而是varchar( ),并且括号里必须规定长度;如果是字符,就使用char( );

6)可以在属性后面加上not null的约束条件来不让该属性的值为空;

7)使用show tables来查看名为employee的table表格中的状态;使用show table employee是错误的,下图第一次系统反馈ERROR ;

输入语句如下:



系统会提示,Query OK ——增删改查OK; 

0 rows affected(0.47s)——共0行(音hang2)受到影响(系统共花费0.47s);

使用select*from +[tableName]来查看结果


2)删除关于“张三“的记录

这里的删除用delete from + [tableName]+ where+条件,其中中括号的是表名;

例如:delete from employee where id=1;

  

这里的条件id=1表示id=1的那一行;


3)将“李四“的性别改为”女”;

使用updata employee set +[更改后的项目] +where +条件;

如:(注意不要混入中文符号,例如第一次查看时,结尾用了2个分号,而且都是中文的分好)



4.查询并显示员工表中所有的员工信息;

使用 select *from employee;语句,结果如下:



结束!

<think>我们正在寻找一个经典的数据库编程例题,涉及员工薪资查询。根据引用内容,常见的例题包括:1.查询薪资大于某个部门(如产品部)平均薪资的员工(引用[1]) 2.查询每个部门工资最高的员工(引用[2])3.查询大于所有平均年龄的员工(引用[3])——虽然这里是年龄,但思路类似这里我们以“查询每个部门工资最高的员工”为例,这是一个经典的例题,涉及分组聚合、子查询或连接操作。 ###例题:部门工资最高的员工**问题描述**假设有两个:-员工表(Employee),包含员工ID(id)、姓名(name)、薪资(salary)和部门ID(departmentId)-部门(Department),包含部门ID(id)和部门名称(name)编写一个SQL查询,找出每个部门工资最高的员工。如果有多个员工薪资相同且都是最高,则都列出。**示例数据**Employee:|id |name| salary| departmentId ||----|-------|--------|--------------||1|Joe|70000|1||2|Jim|90000|1||3|Henry |80000|2||4| Sam|60000|2||5| Max|90000|1|Department:| id| name||----|-------||1|IT||2| Sales|**预期输出**:| Department| Employee| Salary||------------|----------|--------|| IT|Jim|90000||IT| Max|90000|| Sales|Henry|80000|**解决方案**方法一:使用子查询和连接先按部门分组,找出每个部门的最高薪资,然后将结果与原连接,筛选出薪资等于该部门最高薪资的员工。 ```sqlSELECTd.name ASDepartment,e.name ASEmployee,e.salaryAS SalaryFROMEmployeeeINNER JOINDepartment dON e.departmentId =d.idWHERE(e.departmentId,e.salary)IN (SELECTdepartmentId,MAX(salary)FROMEmployeeGROUPBYdepartmentId);``` 方法二:使用窗口函数(适用于支持窗口函数的数据库,如MySQL8.0+)使用`DENSE_RANK()`或`RANK()`按部门分区按薪资降序排名,然后取排名为1的记录。```sqlWITHranked_employees AS(SELECTd.name ASDepartment,e.name ASEmployee,e.salaryASSalary,DENSE_RANK()OVER (PARTITIONBY e.departmentId ORDERBY e.salaryDESC)AS rnkFROMEmployee eJOINDepartmentd ONe.departmentId= d.id) SELECTDepartment,Employee,SalaryFROMranked_employeesWHERErnk=1;``` **说明**-方法一使用了子查询,先得到每个部门的最高工资,然后通过连接条件(部门ID和薪资)来匹配。注意,如果最高工资有多个,这种方法会返回所有最高工资的员工。-方法二使用了窗口函数,可以更高效地处理排名,并且同样能处理并列第一的情况。§§相关问题§§1.如果要求返回的结果中部门名称和员工信息,但员工表中没有部门名称,只有部门ID,该如何处理?2.在方法一中,为什么使用`IN`而不用`=`?3.如果某个部门没有员工,如何显示该部门(显示部门名称,员工和薪资为NULL)?4.窗口函数`DENSE_RANK()`和`RANK()`有什么区别?在这个场景下应该用哪个?</think>### 经典数据库编程例题:员工薪资查询 这里提供一个经典的员工薪资查询例题,结合了多连接、子查询和聚合函数,参考了企业级数据库应用场景[^4]。题目基于员工管理系统数据库结构: #### 数据库结构 ```sql -- 部门 CREATE TABLE department ( dept_id INT PRIMARY KEY, -- 部门ID dept_name VARCHAR(50) -- 部门名称 ); -- 员工表 CREATE TABLE employee ( emp_id INT PRIMARY KEY, -- 员工ID emp_name VARCHAR(50), -- 员工姓名 dept_id INT, -- 所属部门ID FOREIGN KEY (dept_id) REFERENCES department(dept_id) ); -- 薪资 CREATE TABLE salary ( salary_id INT PRIMARY KEY, emp_id INT, -- 员工ID base_salary DECIMAL(10,2),-- 基本薪资 bonus DECIMAL(10,2), -- 奖金 FOREIGN KEY (emp_id) REFERENCES employee(emp_id) ); ``` #### 例题:查询各部门薪资最高的员工 **问题描述** 编写SQL查询,返回每个部门中总薪资(基本薪资+奖金)最高的员工信息,输出部门名称、员工姓名和总薪资[^2]。 **参考实现** ```sql SELECT d.dept_name AS 部门名称, e.emp_name AS 员工姓名, (s.base_salary + s.bonus) AS 总薪资 FROM employee e JOIN salary s ON e.emp_id = s.emp_id JOIN department d ON e.dept_id = d.dept_id WHERE (s.base_salary + s.bonus) = ( SELECT MAX(s2.base_salary + s2.bonus) FROM salary s2 JOIN employee e2 ON s2.emp_id = e2.emp_id WHERE e2.dept_id = e.dept_id -- 关联子查询匹配部门 ); ``` #### 关键知识点解析 1. **多连接** 通过`JOIN`关联部门、员工、薪资三张,获取完整信息[^4]。 2. **关联子查询** 子查询 `(SELECT MAX(...) ... WHERE e2.dept_id = e.dept_id)` 为每个部门动态计算最高薪资[^3]。 3. **聚合函数** 使用`MAX()`函数获取部门最高薪资值,结合`SUM()`可计算部门平均薪资[^1]。 4. **计算字段** `(s.base_salary + s.bonus)` 动态计算总薪资,避免存储冗余数据。 #### 执行结果示例 | 部门名称 | 员工姓名 | 总薪资 | |----------|----------|---------| | 研发部 | 张三 | 25000.00| | 销售部 | 李四 | 18000.00| | 人事部 | 王五 | 12000.00|
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

陶洲川

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值