当前位置: 首页 > news >正文

Day15:关于MySQL的编程技术——基础知识

 

前言:先创建一个练习的数据库和数据

1.创建数据库并创建数据表的基本结构

-- 创建练习数据库
CREATE DATABASE db_programming;
USE db_programming;

-- 创建员工表(包含各种数据类型)
CREATE TABLE employees (
    emp_id INT PRIMARY KEY AUTO_INCREMENT,
    emp_name VARCHAR(20) NOT NULL,
    salary DECIMAL(10,2) DEFAULT 0.00,
    hire_date DATE
);

  2.导入实例数据 

-- 插入测试数据
INSERT INTO employees (emp_name, salary, hire_date) VALUES
('张三', 8000.00, '2020-01-15'),
('李四', 7500.00, '2021-03-20'),
('王五', NULL, '2022-05-10');

一、常量和变量

1.常量

SELECT 100 AS int_const, 
       PI() AS math_const, 
       'Hello' AS str_const;

2.变量

1.用户变量

SET @user_var = 100;
SELECT @user_var := salary FROM employees WHERE emp_id = 1;

2.系统变量

SELECT @@version AS mysql_version, 
       @@character_set_server AS charset;

3.局部变量

DELIMITER $$
CREATE PROCEDURE var_demo()
BEGIN
    DECLARE local_var INT DEFAULT 10;
    SET local_var = local_var * 2;
    SELECT local_var;
END$$
DELIMITER ;
CALL var_demo();

二、系统内置函数

1.数学函数

SELECT ABS(-10), ROUND(3.1415,2), CEIL(2.3), RAND();

2.字符串函数

SELECT CONCAT(emp_name, '-', emp_id) AS name_id,
       SUBSTRING(emp_name, 1, 1) AS first_char,
       REVERSE(emp_name) AS reversed_name
FROM employees;

3.日期和时间函数

SELECT NOW() AS current_time,
       DATEDIFF(NOW(), hire_date) AS work_days
FROM employees;

4.其他函数

SELECT IFNULL(salary, 0) AS actual_salary,
       VERSION(),
       DATABASE()
FROM employees;

三、流程控制语句

1.顺序语句

1.BEGIN | END语句块

DELIMITER $$
CREATE PROCEDURE salary_adjust()
BEGIN
    START TRANSACTION;
    UPDATE employees SET salary = salary * 1.1;
    COMMIT;
END$$
DELIMITER ;

2.DELIMITER命令

2.分支语句

1.IF语句

DELIMITER $$
CREATE FUNCTION get_grade(salary DECIMAL) RETURNS VARCHAR(10)
BEGIN
    IF salary > 8000 THEN RETURN '高薪';
    ELSEIF salary > 5000 THEN RETURN '中薪';
    ELSE RETURN '基础';
    END IF;
END$$
DELIMITER ;

2.CASE语句

SELECT emp_name,
    CASE 
        WHEN salary IS NULL THEN '未定薪'
        WHEN salary > 8000 THEN '高薪'
        ELSE '常规薪资'
    END AS salary_level
FROM employees;

3.循环语句

1.WHLER语句

DELIMITER $$
CREATE PROCEDURE while_demo()
BEGIN
    DECLARE total INT DEFAULT 0;
    DECLARE i INT DEFAULT 1;
    WHILE i <= 5 DO
        SET total = total + i;
        SET i = i + 1;
    END WHILE;
    SELECT total;
END$$
DELIMITER ;

2.PEPEAT语句

DELIMITER $$
CREATE PROCEDURE repeat_demo()
BEGIN
    DECLARE total INT DEFAULT 0;
    DECLARE i INT DEFAULT 1;
    REPEAT
        SET total = total + i;
        SET i = i + 1;
    UNTIL i > 5 END REPEAT;
    SELECT total;
END$$
DELIMITER ;

3.LOOP语句

DELIMITER $$
CREATE PROCEDURE loop_demo()
BEGIN
    DECLARE fact INT DEFAULT 1;
    DECLARE n INT DEFAULT 5;
    factorial: LOOP
        SET fact = fact * n;
        SET n = n - 1;
        IF n = 0 THEN
            LEAVE factorial;
        END IF;
    END LOOP;
    SELECT fact;
END$$
DELIMITER ;

额。。。小累,明天再优化。

http://www.dtcms.com/a/130394.html

相关文章:

  • MDP最优控制问题转化为可求解的线性规划
  • dify应用例子
  • 一、springboot 整合 langchain4j 实现简单的问答功能
  • FreeRTOS(消息队列信号量队列集事件标志组)
  • Emu: Enhancing Image Generation Models Using Photogenic Needles in a Haystack
  • Windows笔记本怎样删除已保存的Wifi
  • 0413-多态、Object类方法、访问权限修饰符、装箱拆箱、128陷阱
  • 车载以太网-SOMEIP
  • python 微博爬虫 01
  • Java学习手册:Java I/O与NIO
  • 【题解-洛谷】P1824 进击的奶牛
  • LangSmith 设置指南
  • 安装树莓派3B+环境
  • 山东大学软件学院创新项目实训开发日志(12)之将对话记录保存到数据库中
  • OSI 七层模型与 TCP/IP 协议栈详解
  • 【JS】关于原型/原型链
  • 【玩泰山派】MISC(杂项)- 使用vscode远程连接泰山派进行开发
  • 0x05.为什么 Redis 设计为单线程?6.0 版本为何引入多线程?
  • 移动端适配
  • javaSE.Lambda表达式
  • 【TI MSPM0】Printf重定向学习
  • GitLab 17.x 配置 https
  • NLP 梳理02 — 标点符号和大小写
  • BUUCTF-web刷题篇(25)
  • 【Ansible自动化运维】五、ansible 的高级特性与扩展:应对复杂场景
  • 互联网三高-数据库高并发之分库分表ShardingJDBC
  • 【CVE-2024-7881】ARM CPU漏洞安全通告
  • LangChain-提示模板 (Prompt Templates)
  • 【力扣hot100题】(098)下一个排列
  • 理想汽车MindVLA自动驾驶架构核心技术梳理