表达式
MySQL表达式是一种在MySQL数据库中使用的计算式或逻辑式。它们可用于查询、更新和过滤数据,以及进行条件判断和计算。
- 算术表达式:可以执行基本的数学运算,例如加法、减法、乘法和除法。
SELECT col1 + col2 AS sum FROM table_name;
- 字符串表达式:可以对字符串进行操作,例如连接、截取和替换。
SELECT CONCAT(first_name, ' ', last_name) AS full_name FROM table_name;
SELECT LEFT(
name,1) FROM USER
- 逻辑表达式:用于执行条件判断,返回布尔值(TRUE或FALSE)。
SELECT * FROM table_name WHERE age > 18 AND gender = 'Male';
- 条件表达式:用于根据条件返回不同的结果。
SELECT CASE WHEN age < 18 THEN 'Minor' ELSE 'Adult' END AS age_group FROM table_name;select IF(sex = 1, '男','女') FROM USER
- 聚合函数表达式:用于计算数据集的聚合值,例如求和、平均值、最大值和最小值。
SELECT AVG(salary) AS average_salary FROM table_name;
- 时间和日期表达式:用于处理时间和日期数据,例如提取年份、月份或计算日期差值。
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`
