Merge branch 'main' of git.smallkun.cn:smallkun/class-notes
This commit is contained in:
commit
542dd24e8d
@ -115,6 +115,11 @@ INSERT INTO employee (emp_name, salary, hire_date, dept_id, job_id) VALUES
|
|||||||
|
|
||||||
创建一个存储函数 `calculate_annual_salary`,接受员工的月薪作为参数,返回其年薪(假设年薪为月薪的 12 倍)。
|
创建一个存储函数 `calculate_annual_salary`,接受员工的月薪作为参数,返回其年薪(假设年薪为月薪的 12 倍)。
|
||||||
|
|
||||||
|
```c
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#### 练习题 2: 计算员工工龄
|
#### 练习题 2: 计算员工工龄
|
||||||
|
|
||||||
创建一个存储函数 `calculate_years_of_service`,接受员工的入职日期作为参数,返回该员工的工龄(以年为单位)。
|
创建一个存储函数 `calculate_years_of_service`,接受员工的入职日期作为参数,返回该员工的工龄(以年为单位)。
|
||||||
|
@ -112,6 +112,53 @@ int main(){
|
|||||||
输出样例:1 0 2 0 3 5 6 8
|
输出样例:1 0 2 0 3 5 6 8
|
||||||
```
|
```
|
||||||
|
|
||||||
|
```c
|
||||||
|
#include <stdio.h>
|
||||||
|
void change(int a[], int n){
|
||||||
|
int i, j, t, index=0;
|
||||||
|
|
||||||
|
for(i=1;i<n;i++){
|
||||||
|
if(a[0] > a[i]){//i当前遍历的元素下标 如果当前下标值小于中间值则进入
|
||||||
|
index++;//存储位置后移
|
||||||
|
t = a[i];//备份当前位置的值
|
||||||
|
j = i;//将当前位置的下标存储
|
||||||
|
while(j > index){//如果当前遍历位置下标大于存储位置下标则元素整体后移
|
||||||
|
a[j] = a[j-1];
|
||||||
|
j--;
|
||||||
|
}
|
||||||
|
a[index] = t;//元素整体后移后再赋值操作
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for(i=0;i<n-1;i++){
|
||||||
|
if(a[i] > a[i+1]){
|
||||||
|
t = a[i];
|
||||||
|
a[i] = a[i+1];
|
||||||
|
a[i+1] = t;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(){
|
||||||
|
int len, i;
|
||||||
|
int a[100];
|
||||||
|
|
||||||
|
scanf("%d", &len);
|
||||||
|
for(i=0;i<len;i++){
|
||||||
|
scanf("%d", a+i);
|
||||||
|
}
|
||||||
|
|
||||||
|
change(a, len);
|
||||||
|
|
||||||
|
for(i=0;i<len;i++){
|
||||||
|
printf("%d ", a[i]);
|
||||||
|
}
|
||||||
|
printf("\n");
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
### 4 数组逆序
|
### 4 数组逆序
|
||||||
|
144
最后一舞/存储函数练习题.md
144
最后一舞/存储函数练习题.md
@ -157,17 +157,18 @@ SELECT calculate_years_of_service('2023-12-31');
|
|||||||
```sql
|
```sql
|
||||||
DELIMITER $$
|
DELIMITER $$
|
||||||
DROP FUNCTION IF EXISTS calculate_avg_salary_by_dept;
|
DROP FUNCTION IF EXISTS calculate_avg_salary_by_dept;
|
||||||
CREATE FUNCTION calculate_avg_salary_by_dept(deptId INT)
|
CREATE FUNCTION calculate_avg_salary_by_dept(dept_id INT)
|
||||||
RETURNS DECIMAL(10,2)
|
RETURNS DECIMAL(10,2)
|
||||||
DETERMINISTIC
|
DETERMINISTIC
|
||||||
BEGIN
|
BEGIN
|
||||||
RETURN (
|
RETURN (
|
||||||
SELECT AVG(salary)
|
SELECT AVG(e.salary)
|
||||||
FROM employee e
|
FROM employee e
|
||||||
WHERE e.dept_id = deptId
|
WHERE e.dept_id = dept_id
|
||||||
);
|
);
|
||||||
END $$
|
END $$
|
||||||
DELIMITER ;
|
DELIMITER ;
|
||||||
|
|
||||||
SELECT calculate_avg_salary_by_dept(1);
|
SELECT calculate_avg_salary_by_dept(1);
|
||||||
```
|
```
|
||||||
|
|
||||||
@ -177,10 +178,46 @@ SELECT calculate_avg_salary_by_dept(1);
|
|||||||
|
|
||||||
创建一个存储函数 `calculate_avg_salary_by_job`,接受职位 ID 作为参数,返回该职位的平均工资。
|
创建一个存储函数 `calculate_avg_salary_by_job`,接受职位 ID 作为参数,返回该职位的平均工资。
|
||||||
|
|
||||||
|
```sql
|
||||||
|
DELIMITER $$
|
||||||
|
DROP FUNCTION IF EXISTS calculate_avg_salary_by_job;
|
||||||
|
CREATE FUNCTION calculate_avg_salary_by_job(job_id INT)
|
||||||
|
RETURNS DECIMAL(10,2)
|
||||||
|
DETERMINISTIC
|
||||||
|
BEGIN
|
||||||
|
RETURN (
|
||||||
|
SELECT AVG(e.salary)
|
||||||
|
FROM employee e
|
||||||
|
WHERE e.job_id = job_id
|
||||||
|
);
|
||||||
|
END $$
|
||||||
|
DELIMITER ;
|
||||||
|
|
||||||
|
SELECT calculate_avg_salary_by_job(1);
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#### 练习题 5: 计算员工税后工资
|
#### 练习题 5: 计算员工税后工资
|
||||||
|
|
||||||
创建一个存储函数 `calculate_net_salary`,接受员工的工资作为参数,返回其税后工资(假设税率为 15%)。
|
创建一个存储函数 `calculate_net_salary`,接受员工的工资作为参数,返回其税后工资(假设税率为 15%)。
|
||||||
|
|
||||||
|
```sql
|
||||||
|
DELIMITER $$
|
||||||
|
DROP FUNCTION IF EXISTS calculate_net_salary;
|
||||||
|
CREATE FUNCTION calculate_net_salary(sal DECIMAL(10, 2))
|
||||||
|
RETURNS DECIMAL(10, 2)
|
||||||
|
DETERMINISTIC
|
||||||
|
BEGIN
|
||||||
|
RETURN sal*0.85;
|
||||||
|
END $$
|
||||||
|
DELIMITER ;
|
||||||
|
|
||||||
|
SELECT calculate_net_salary(3000);
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#### 练习题 6: 判断员工是否满足加薪条件
|
#### 练习题 6: 判断员工是否满足加薪条件
|
||||||
|
|
||||||
创建一个存储函数 `is_eligible_for_raise`,接受员工的工资和工龄作为参数,返回一个布尔值(1 或 0)。加薪条件如下:
|
创建一个存储函数 `is_eligible_for_raise`,接受员工的工资和工龄作为参数,返回一个布尔值(1 或 0)。加薪条件如下:
|
||||||
@ -188,18 +225,117 @@ SELECT calculate_avg_salary_by_dept(1);
|
|||||||
- 如果工资低于 60000 且工龄大于等于 3 年,返回 1(满足条件)。
|
- 如果工资低于 60000 且工龄大于等于 3 年,返回 1(满足条件)。
|
||||||
- 否则返回 0(不满足条件)。
|
- 否则返回 0(不满足条件)。
|
||||||
|
|
||||||
|
```sql
|
||||||
|
DELIMITER $$
|
||||||
|
DROP FUNCTION IF EXISTS is_eligible_for_raise;
|
||||||
|
CREATE FUNCTION is_eligible_for_raise(sal DECIMAL(10, 2), work_age INT)
|
||||||
|
RETURNS INT
|
||||||
|
DETERMINISTIC
|
||||||
|
BEGIN
|
||||||
|
IF sal < 60000 AND work_age >= 3 THEN
|
||||||
|
RETURN 1;
|
||||||
|
ELSE
|
||||||
|
RETURN 0;
|
||||||
|
END IF;
|
||||||
|
END $$
|
||||||
|
DELIMITER ;
|
||||||
|
|
||||||
|
SELECT is_eligible_for_raise(3000, 1);
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#### 练习题 7: 计算部门总工资
|
#### 练习题 7: 计算部门总工资
|
||||||
|
|
||||||
创建一个存储函数 `calculate_total_salary_by_dept`,接受部门 ID 作为参数,返回该部门所有员工的总工资。
|
创建一个存储函数 `calculate_total_salary_by_dept`,接受部门 ID 作为参数,返回该部门所有员工的总工资。
|
||||||
|
|
||||||
|
```sql
|
||||||
|
DELIMITER $$
|
||||||
|
DROP FUNCTION IF EXISTS calculate_total_salary_by_dept;
|
||||||
|
CREATE FUNCTION calculate_total_salary_by_dept(dept_id INT)
|
||||||
|
RETURNS DECIMAL(10,2)
|
||||||
|
DETERMINISTIC
|
||||||
|
BEGIN
|
||||||
|
RETURN (
|
||||||
|
SELECT SUM(e.salary)
|
||||||
|
FROM employee e
|
||||||
|
WHERE e.dept_id = dept_id
|
||||||
|
);
|
||||||
|
END $$
|
||||||
|
DELIMITER ;
|
||||||
|
|
||||||
|
SELECT calculate_total_salary_by_dept(1);
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#### 练习题 8: 计算职位总工资
|
#### 练习题 8: 计算职位总工资
|
||||||
|
|
||||||
创建一个存储函数 `calculate_total_salary_by_job`,接受职位 ID 作为参数,返回该职位所有员工的总工资。
|
创建一个存储函数 `calculate_total_salary_by_job`,接受职位 ID 作为参数,返回该职位所有员工的总工资。
|
||||||
|
|
||||||
|
```sql
|
||||||
|
DELIMITER $$
|
||||||
|
DROP FUNCTION IF EXISTS calculate_total_salary_by_job;
|
||||||
|
CREATE FUNCTION calculate_total_salary_by_job(job_id INT)
|
||||||
|
RETURNS DECIMAL(10,2)
|
||||||
|
DETERMINISTIC
|
||||||
|
BEGIN
|
||||||
|
RETURN (
|
||||||
|
SELECT SUM(e.salary)
|
||||||
|
FROM employee e
|
||||||
|
WHERE e.job_id = job_id
|
||||||
|
);
|
||||||
|
END $$
|
||||||
|
DELIMITER ;
|
||||||
|
|
||||||
|
SELECT calculate_total_salary_by_job(1);
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#### 练习题 9: 判断员工是否属于高薪部门
|
#### 练习题 9: 判断员工是否属于高薪部门
|
||||||
|
|
||||||
创建一个存储函数 `is_high_salary_department`,接受部门 ID 作为参数,返回一个布尔值(1 或 0)。如果该部门的平均工资大于等于 70000,返回 1(高薪部门),否则返回 0(非高薪部门)。
|
创建一个存储函数 `is_high_salary_department`,接受部门 ID 作为参数,返回一个布尔值(1 或 0)。如果该部门的平均工资大于等于 70000,返回 1(高薪部门),否则返回 0(非高薪部门)。
|
||||||
|
|
||||||
|
```sql
|
||||||
|
DELIMITER $$
|
||||||
|
DROP FUNCTION IF EXISTS is_high_salary_department;
|
||||||
|
CREATE FUNCTION is_high_salary_department(dept_id INT)
|
||||||
|
RETURNS INT
|
||||||
|
DETERMINISTIC
|
||||||
|
BEGIN
|
||||||
|
IF(
|
||||||
|
SELECT AVG(e.salary)
|
||||||
|
FROM employee e
|
||||||
|
WHERE e.dept_id = dept_id
|
||||||
|
) > 70000 THEN
|
||||||
|
RETURN 1;
|
||||||
|
ELSE
|
||||||
|
RETURN 0;
|
||||||
|
END IF;
|
||||||
|
END $$
|
||||||
|
DELIMITER ;
|
||||||
|
|
||||||
|
SELECT is_high_salary_department(1);
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#### 练习题 10: 计算员工的总收入
|
#### 练习题 10: 计算员工的总收入
|
||||||
|
|
||||||
创建一个存储函数 `calculate_total_income`,接受员工的工资和奖金(假设奖金为工资的 10%)作为参数,返回其总收入(工资 + 奖金)。
|
创建一个存储函数 `calculate_total_income`,接受员工的工资和奖金(假设奖金为工资的 10%)作为参数,返回其总收入(工资 + 奖金)。
|
||||||
|
|
||||||
|
```sql
|
||||||
|
DELIMITER $$
|
||||||
|
DROP FUNCTION IF EXISTS calculate_total_income;
|
||||||
|
CREATE FUNCTION calculate_total_income(sal DECIMAL(10, 2))
|
||||||
|
RETURNS DECIMAL(10, 2)
|
||||||
|
DETERMINISTIC
|
||||||
|
BEGIN
|
||||||
|
RETURN sal*1.2;
|
||||||
|
END $$
|
||||||
|
DELIMITER ;
|
||||||
|
|
||||||
|
SELECT calculate_total_income(3000);
|
||||||
|
```
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user