Nodejs 第三十四章 数据库(表达式和函数、子查询和连表)

表达式

MySQL表达式是一种在MySQL数据库中使用的计算式或逻辑式。它们可用于查询、更新和过滤数据,以及进行条件判断和计算。

  1. 算术表达式:可以执行基本的数学运算,例如加法、减法、乘法和除法。

SELECT col1 + col2 AS sum FROM table_name;

  1. 字符串表达式:可以对字符串进行操作,例如连接、截取和替换。

SELECT CONCAT(first_name, ' ', last_name) AS full_name FROM table_name;

SELECT LEFT(name,1) FROM USER

  1. 逻辑表达式:用于执行条件判断,返回布尔值(TRUE或FALSE)。

SELECT * FROM table_name WHERE age > 18 AND gender = 'Male';

  1. 条件表达式:用于根据条件返回不同的结果。

SELECT CASE WHEN age < 18 THEN 'Minor' ELSE 'Adult' END AS age_group FROM table_name; select IF(sex = 1, '男','女') FROM USER

  1. 聚合函数表达式:用于计算数据集的聚合值,例如求和、平均值、最大值和最小值。

SELECT AVG(salary) AS average_salary FROM table_name;

  1. 时间和日期表达式:用于处理时间和日期数据,例如提取年份、月份或计算日期差值。

SELECT YEAR(date_column) AS year FROM table_name;

子查询

sql 复制代码
-- 1. 先创建 user 表(被引用表)
CREATE TABLE `user` (
   id INT NOT NULL AUTO_INCREMENT PRIMARY KEY COMMENT '用户ID',
   name VARCHAR(100) COMMENT '姓名',
   age INT COMMENT '年龄',
   hobby VARCHAR(100) COMMENT '爱好',
   create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间'
) COMMENT = '用户表' 
ENGINE = InnoDB 
DEFAULT CHARSET = utf8mb4;

-- 2. 插入 user 表数据(根据您的截图)
INSERT INTO `user` (id, name, age, hobby, create_time) VALUES
(19, '麒麟哥', 30, '篮球', '2026-08-30 13:18:02'),
(20, '丽丽', 25, '骑车', '2026-08-30 13:18:37'),
(21, 'xiaoman', 30, '篮球', '2026-08-30 13:18:37'),
(22, 'xm1', 25, '骑车1', '2026-08-30 17:18:16'),
(23, 'xm2', 30, '篮球', '2026-08-30 17:18:16'),
(24, 'xm3', 13, '篮球2', '2026-08-30 17:18:16');

-- 3. 创建 table 表(关联 user 表)
CREATE TABLE `table` (
   id INT NOT NULL AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
   name VARCHAR(100) COMMENT '名称',
   create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
   user_id INT NOT NULL COMMENT '用户ID',
   CONSTRAINT fk_table_user FOREIGN KEY (user_id) REFERENCES `user`(id)
) COMMENT = '关联用户表' 
ENGINE = InnoDB 
DEFAULT CHARSET = utf8mb4;

-- 4. 往 table 表插入数据(user_id 必须对应 user 表中存在的 id)
INSERT INTO `table` (name, create_time, user_id) VALUES
('小满的数据', '2024-02-15 19:21:27', 19),
('中满的数据', '2024-02-15 19:21:45', 20),
('大满的数据', '2024-02-15 19:21:55', 21);
  • 想要知道xm1所在的地址 要通过id去查询 因为是唯一的
sql 复制代码
SELECT * FROM `table` WHERE user_id = (SELECT id from `user` WHERE name = 'xm1' )

查出来的值想要user表和table表融合在一起

连表查询

  • 把table表的数据和user表的数据合并到一起

内连接

sql 复制代码
SELECT * FROM `user`, `table` WHERE `user`.`id` = `table`.`user_id`

数据可能会丢失。

外连接 左连接 右连接

现有表:

左连接

sql 复制代码
# 左边的表作为驱动表 结果以驱动表为主,如果没有填充为null
SELECT * from `user` LEFT JOIN `table` ON `user`.`id` = `table`.`user_id`

右连接

sql 复制代码
SELECT * from `user` RIGHT JOIN `table` ON `user`.`id` = `table`.`user_id`
相关推荐
+VX:Fegn08951 小时前
计算机毕业设计|基于springboot + vue蛋糕店管理系统(源码+数据库+文档)
前端·数据库·vue.js·spring boot·课程设计
Nicander3 小时前
我给 Excalidraw 做了一个本地工作区:DrawSpace
前端·开源
linux_cfan5 小时前
17 · 引擎适配器全景:HLS/DASH/Vimeo/Mux/Cast
前端·javascript·音视频
计算机魔术师5 小时前
烧掉2780亿美元还不够?OpenAI的资本豪赌让人头皮发麻
前端
IT_陈寒6 小时前
Java线程池用错参数,我的服务居然悄悄崩溃了
前端·人工智能·后端
光影少年6 小时前
Express 中间件原理
后端·node.js·express
卡布鲁6 小时前
React useMemo 与 useCallback 完全指南:原理、场景与避坑
前端·react.js
碳基修炼6 小时前
排查记:本地 devServer 是 http,浏览器却把 302 重定向升级成了 https
前端·http
时速GEO系统6 小时前
初元 AI V1.1 版本升级,首个正式版发布一周・实现生成、部署、上线、优化全流程自动化闭环
人工智能·数据挖掘·node.js
步行cgn6 小时前
Spring p 命名空间注入详解
java·前端·spring