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`
相关推荐
ssshooter1 小时前
AI 时代你不能不知道的 git worktree
前端·后端·面试
观测云1 小时前
AI时代的用户访问监测:观测云带你身临其境体验用户与前端UI交互旅程
前端·可观测性·观测云·rum
喵本喵叁肆1 小时前
06-M6-部门过滤与综合研判-从问答机到研判助手
前端·javascript·jquery
TomEval2 小时前
【Web UI 自动化】05 - KDT 模式原理与实现
前端·ui·自动化
南雨北斗2 小时前
vue3项目状态持久化方案Pinia
前端
计算机魔术师2 小时前
Uber 工程师不动手,Agent 接管了 70% 的代码 PR
前端
南雨北斗2 小时前
Vue3项目中使用Pinia代替TP6 session传递
前端
律宏阔2 小时前
Electron 打包 CloakBrowser:解决客户电脑缺少浏览器二进制的问题
前端