跳到主要内容

mysql基础

  • 增删改查

  • 多表操作

    • 一对一
    • 一对多
    • 多对多
    • 多表查询
      • 内连接
      • 外连接
      • 子查询
  • 查询数据库

    • 条件查询
    • 聚合函数查询
    • 排序查询
    • 分组查询
    • 分页查询

多表操作​

一对一​

  • 特点:一个表中的一条记录与另一个表中的一条记录相关联。

  • 实现方式:使用主键和外键的约束。

示例:

sql
-- 用户表
CREATE TABLE users (
id INT PRIMARY KEY,
name VARCHAR(100)
);

-- 用户详情表
CREATE TABLE user_details (
id INT PRIMARY KEY,
user_id INT UNIQUE,
address VARCHAR(255),
FOREIGN KEY (user_id) REFERENCES users(id)
);

# 查询某用户的详情:
SELECT u.name, d.address
FROM users u
INNER JOIN user_details d ON u.id = d.user_id;

一对多​

  • 特点:一个表中的一条记录与另一个表中的多条记录相关联。
  • 实现方式:在“多”的一方设置外键

示例:

sql
-- 部门表
CREATE TABLE departments (
id INT PRIMARY KEY,
name VARCHAR(100)
);

-- 员工表
CREATE TABLE employees (
id INT PRIMARY KEY,
name VARCHAR(100),
department_id INT,
FOREIGN KEY (department_id) REFERENCES departments(id)
);

# 查询部门及其员工:
SELECT d.name AS department_name, e.name AS employee_name
FROM departments d
LEFT JOIN employees e ON d.id = e.department_id;

多对多​

  • 特点:一个表中的一条记录与另一个表中的多条记录相关联,反之亦然。
  • 实现方式:通过中间表实现关联。

示例:

sql
-- 学生表
CREATE TABLE students (
id INT PRIMARY KEY,
name VARCHAR(100)
);

-- 课程表
CREATE TABLE courses (
id INT PRIMARY KEY,
name VARCHAR(100)
);

-- 学生课程中间表
CREATE TABLE student_courses (
student_id INT,
course_id INT,
PRIMARY KEY (student_id, course_id),
FOREIGN KEY (student_id) REFERENCES students(id),
FOREIGN KEY (course_id) REFERENCES courses(id)
);

# 查询某学生选修的课程:
SELECT s.name AS student_name, c.name AS course_name
FROM students s
INNER JOIN student_courses sc ON s.id = sc.student_id
INNER JOIN courses c ON sc.course_id = c.id;

多表查询​

内连接​

  • 仅返回两个表中匹配的记录。
  • 使用INNER JOIN

示例:

sql
SELECT employees.name, departments.name
FROM employees
INNER JOIN departments ON employees.department_id = departments.id;

外连接​

  • 使用LEFT JOIN、RIGHT JOIN

  • LEFT JOIN:返回左表的所有记录,即使右表中没有匹配记录。

  • RIGHT JOIN:返回右表的所有记录,即使左表中没有匹配记录。

示例:

sql
-- LEFT JOIN
SELECT employees.name, departments.name
FROM employees
LEFT JOIN departments ON employees.department_id = departments.id;

子查询​

  • 使用查询的结果作为另一个查询的条件。

示例:

sql
# 查询工资高于部门平均工资的员工:
SELECT name
FROM employees
WHERE salary > (
SELECT AVG(salary) FROM employees WHERE department_id = 1
);

查询数据库​

条件查询​

  • 使用 WHERE 子句过滤数据。

聚合函数查询​

  • 常见聚合函数:
    • COUNT():计数
    • SUM():求和
    • AVG():平均值
    • MAX():最大值
    • MIN():最小值

排序查询​

  • 使用 ORDER BY 子句进行排序。
  • 升序:ASC(默认);降序:DESC。

示例:

sql
SELECT * FROM employees ORDER BY salary DESC;

分组查询​

  • 使用 GROUP BY 对结果进行分组,结合聚合函数。

示例:

sql
# 查询每个部门的员工数量
SELECT department_id, COUNT(*) AS employee_count
FROM employees
GROUP BY department_id;

分页查询​

  • LIMIT
  • 和 OFFSET
  • 用于分页。
sql
# 查询第 2 页的数据(每页 10 条记录)
SELECT * FROM employees
ORDER BY id
LIMIT 10 OFFSET 10;

模糊查询​

  • 使用Like
  • % 表示任意多个字符
bash
SELECT * FROM User WHERE name LIKE '%qw%';