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`
相关推荐
风骏时光牛马7 小时前
大模型综合能力多维评测:性能、逻辑与落地表现对比
前端
liuchangng7 小时前
React 19 + Vite 6 实战:从教材 PDF 到 866 词间隔重复单词 App
前端·react.js·pdf·vite·开源项目
SomeOtherTime7 小时前
node.js基础(AI回答)
node.js
Dwzun7 小时前
基于SpringBoot3+Vue3的油莎豆种植管理系统
java·前端·vue.js·spring boot·后端·python·计算机网络
小码哥_常13 小时前
一套自己部署的 IM,客户端是同一份 Flutter
前端·后端
蜗牛攻城狮15 小时前
微前端四大方案选型对比与最佳实践:qiankun、micro-app、wujie、Module Federation
前端·微前端·qiankun·前端架构·micro-app·wujie
她说可以呀17 小时前
Vue插槽
前端·javascript·vue.js
qq_4480111617 小时前
Vue + Jinja2两套模版与法冲突造成undefinedError
前端·javascript·vue.js
aixingpan17 小时前
aixingpan.cn API开发文档:前端查询夏令时和时区接口指南
前端·php
2601_9583529018 小时前
23.5×19mm 换掉一整条音频链?|A-68 集成了什么:ADC / DAC / 24.576MHz 时钟 / AEC / 波束降噪,主控仅需 6 根线
前端·音视频·ai降噪·回声消除·语音模块