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`
相关推荐
行者全栈架构师4 分钟前
【鸿蒙心迹】鸿蒙网络请求架构实战——@ohos.net.http 到 Axios 封装、拦截器与统一错误处理(HarmonyOS 7.x)
前端·算法·架构
全栈Agent 小李11 分钟前
【无标题】
前端·后端·agent·ai编程·全栈·cursor·mcp
羲云12 分钟前
别让 AI 凭记忆做调研:给 WorkBuddy 接上可核验的实时搜索
前端
damoluomu26 分钟前
Directus 换掉 GPL 之后,Node.js CMS 到底怎么选?(三)
node.js
deli00741 分钟前
连接池到底配多大?QPS 和 RT 算一遍,再跑 1 万次请求实测超时率
前端
风花一世月1 小时前
🏮 我把三坊七巷做成了能飞的 3D 地图(901 个真实建筑轮廓、20 处景点,在线直接玩)
前端
特立独行的猫A1 小时前
用仓颉语言写一个串口调试助手:cj-tauri 实战
前端
小凯在掘金1 小时前
Shadow DOM 和 Virtual DOM ?别再傻傻分不清
前端·html
郑州光合科技余经理1 小时前
本地生活平台搭建:跨业态用户标识怎么贯通
java·开发语言·前端·后端·uni-app·php·ai编程
数据掘金1 小时前
埋点事件命名升级时老数据怎么办
前端