下面是 MySQL 中创建数据库、删除数据库、选择数据库、插入数据、查询数据、使用 WHERE 语句、更新数据、删除数据、使用 LIKE、UNION、ORDER BY、分组、连接、处理 NULL 值、修改表结构以及多表查询的示例和代码。
1.创建数据库、删除数据库、选择数据库
1. 创建数据库
CREATE DATABASE mydatabase;
2. 删除数据库
DROP DATABASE mydatabase;
3. 选择数据库
USE mydatabase;
2.数据定义语言 (DDL: Data Definition Language)创建表,插入数据、查询数据
1.创建表
CREATE TABLE employees (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(100),
position VARCHAR(100),
salary DECIMAL(10, 2),
department_id INT
);
CREATE TABLE departments (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(100)
);
2.修改表
1. ADD COLUMN – 添加列
ALTER TABLE table_name ADD column_name datatype constraint;
示例:
ALTER TABLE employees ADD email VARCHAR(100);
2. ALTER COLUMN – 修改列
ALTER TABLE table_name MODIFY column_name datatype constraint;
示例:
ALTER TABLE employees MODIFY COLUMN salary DECIMAL(12, 2);
3. DROP COLUMN – 删除列
ALTER TABLE table_name DROP COLUMN column_name;
示例:
ALTER TABLE employees DROP COLUMN email;
4. RENAME COLUMN – 重命名列
ALTER TABLE table_name RENAME COLUMN old_column_name TO new_column_name;
示例:
ALTER TABLE employees RENAME COLUMN position TO job_title;
3.TRUNCATE TABLE – 清除表数据
TRUNCATE TABLE table_name;
示例:
TRUNCATE TABLE employees;
4.DROP TABLE – 删除表
DROP TABLE table_name;
示例:
DROP TABLE employees;
3. 数据操作语言(DML:Data Manipulation Language)
1. 插入数据
INSERT INTO employees (name, position, salary, department_id) VALUES
('Alice', 'Manager', 80000.00, 1),
('Bob', 'Developer', 60000.00, 2),
('Charlie', 'Analyst', 50000.00, 1);
INSERT INTO departments (name) VALUES
('HR'),
('IT');
2. 更新数据
UPDATE employees SET salary = 70000 WHERE name = 'Bob';
3. 删除数据
DELETE FROM employees WHERE name = 'Charlie';
4.数据查询语言(DQL: Data Query Language):
1. SELECT – 查找数据
SELECT column1, column2, ... FROM table_name;
示例:
SELECT name, salary FROM employees;
2. WHERE 语句
SELECT column1, column2, ... FROM table_name WHERE condition;
示例:
SELECT * FROM employees WHERE salary > 50000;
3.SQL 聚合函数
用于对一组值执行计算,并返回单个值。常见的聚合函数包括 COUNT、SUM、AVG、MIN 和 MAX。这些函数通常与 GROUP BY 子句一起使用,以便对结果集进行分组和汇总。
COUNT – 计数
SELECT COUNT(column_name) FROM table_name WHERE condition;
示例:
SELECT COUNT(*) FROM employees WHERE department_id = 1;
AVG – 均值
SELECT AVG(column_name) FROM table_name WHERE condition;
示例:
SELECT AVG(salary) FROM employees WHERE department_id = 2;
SUM – 求和
SELECT SUM(column_name) FROM table_name WHERE condition;
示例:
SELECT SUM(salary) FROM employees WHERE department_id = 1;
MIN – 求最小值
SELECT MIN(column_name) FROM table_name WHERE condition;
示例:
SELECT MIN(salary) FROM employees;
MAX – 求最大值
SELECT MAX(column_name) FROM table_name WHERE condition;
示例:
SELECT MAX(salary) FROM employees;
ROUND – 四舍五入
SELECT ROUND(column_name, decimal_places) FROM table_name;
示例:
SELECT ROUND(salary, 2) FROM employees;
LENGTH – 字符串长度
SELECT LENGTH(column_name) FROM table_name;
示例:
SELECT LENGTH(name) FROM employees;
UCASE – 列名大写
SELECT UCASE(column_name) FROM table_name;
示例:
SELECT UCASE(name) FROM employees;
DISTINCT – 去重
SELECT DISTINCT column_name FROM table_name;
示例:
SELECT DISTINCT department_id FROM employees;
LIMIT – 限制
SELECT column1, column2, ... FROM table_name LIMIT number_of_records OFFSET offset;
示例:
SELECT * FROM employees LIMIT 5;
SELECT * FROM employees LIMIT 5 OFFSET 10;
LIKE – 运算符
SELECT column1, column2, ... FROM table_name WHERE column LIKE pattern;
示例:
SELECT * FROM employees WHERE name LIKE 'A%';
BETWEEN – 运算符
SELECT column1, column2, ... FROM table_name WHERE column BETWEEN value1 AND value2;
示例:
SELECT * FROM employees WHERE salary BETWEEN 50000 AND 70000;
ORDER BY – 排序
SELECT column1, column2, ... FROM table_name ORDER BY column1 [ASC|DESC], column2 [ASC|DESC], ...;
示例:
SELECT * FROM employees ORDER BY salary DESC;
GROUP BY – 分组
SELECT column1, aggregate_function(column2) FROM table_name GROUP BY column1;
示例:
SELECT department_id, AVG(salary) AS avg_salary FROM employees GROUP BY department_id;
GROUP BY 与聚合函数一起使用
GROUP BY 子句用于将结果集按一个或多个列进行分组。它通常与聚合函数一起使用,以便对每个分组执行聚合计算。
语法:
SELECT column1, AGGREGATE_FUNCTION(column2) FROM table_name
WHERE condition
GROUP BY column1;
示例:
-- 按部门分组,计算每个部门的员工总数
SELECT department_id, COUNT(*) AS employee_count
FROM employees
GROUP BY department_id;
-- 按部门分组,计算每个部门的平均薪资
SELECT department_id, AVG(salary) AS avg_salary
FROM employees
GROUP BY department_id;
-- 按职位分组,计算每个职位的最高薪资
SELECT position, MAX(salary) AS max_salary
FROM employees
GROUP BY position;
HAVING 子句
HAVING 子句用于过滤 GROUP BY 子句后的结果集。它通常与聚合函数一起使用。
语法:
SELECT column1, AGGREGATE_FUNCTION(column2) FROM table_name
WHERE condition
GROUP BY column1
HAVING aggregate_condition;
示例:
-- 按部门分组,计算每个部门的员工总数,过滤出员工总数大于5的部门
SELECT department_id, COUNT(*) AS employee_count
FROM employees
GROUP BY department_id
HAVING COUNT(*) > 5;
-- 按部门分组,计算每个部门的平均薪资,过滤出平均薪资大于60000的部门
SELECT department_id, AVG(salary) AS avg_salary
FROM employees
GROUP BY department_id
HAVING AVG(salary) > 60000;
这些示例展示了如何使用 SQL 聚合函数以及如何将它们与 GROUP BY 和 HAVING 子句结合使用,以进行数据分组和汇总分析。
4. UNION
SELECT name FROM employees
UNION
SELECT name FROM departments;
5. 连接(JOIN)
内连接(INNER JOIN)
SELECT employees.name, departments.name AS department
FROM employees
INNER JOIN departments ON employees.department_id = departments.id;
左连接(LEFT JOIN)
SELECT employees.name, departments.name AS department
FROM employees
LEFT JOIN departments ON employees.department_id = departments.id;
右连接(RIGHT JOIN)
SELECT employees.name, departments.name AS department
FROM employees
RIGHT JOIN departments ON employees.department_id = departments.id;
6. 处理 NULL 值
使用 IFNULL
SELECT name, IFNULL(salary, 0) AS salary FROM employees;
使用 COALESCE
SELECT name, COALESCE(salary, 0) AS salary FROM employees;
7. 多表查询
子查询
SELECT * FROM employees WHERE department_id = (
SELECT id FROM departments WHERE name = 'IT'
);
联合查询(UNION)
SELECT name FROM employees
UNION
SELECT name FROM departments;
8. 处理 NULL 值
SELECT name, IFNULL(salary, 0) AS salary FROM employees;
示例数据库操作总结
下面是一个完整的示例,展示了上述所有操作:
-- 创建数据库
CREATE DATABASE mydatabase;
-- 选择数据库
USE mydatabase;
-- 创建表
CREATE TABLE employees (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(100),
position VARCHAR(100),
salary DECIMAL(10, 2),
department_id INT
);
CREATE TABLE departments (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(100)
);
-- 插入数据
INSERT INTO employees (name, position, salary, department_id) VALUES
('Alice', 'Manager', 80000.00, 1),
('Bob', 'Developer', 60000.00, 2),
('Charlie', 'Analyst', 50000.00, 1);
INSERT INTO departments (name) VALUES
('HR'),
('IT');
-- 查询数据
SELECT * FROM employees;
-- WHERE 语句
SELECT * FROM employees WHERE salary > 50000;
-- 更新数据
UPDATE employees SET salary = 70000 WHERE name = 'Bob';
-- 删除数据
DELETE FROM employees WHERE name = 'Charlie';
-- 使用 LIKE
SELECT * FROM employees WHERE name LIKE 'A%';
-- UNION
SELECT name FROM employees
UNION
SELECT name FROM departments;
-- ORDER BY
SELECT * FROM employees ORDER BY salary DESC;
-- 分组
SELECT department_id, AVG(salary) AS avg_salary FROM employees GROUP BY department_id;
-- 连接(JOIN)
SELECT employees.name, departments.name AS department
FROM employees
INNER JOIN departments ON employees.department_id = departments.id;
-- 处理 NULL 值
SELECT name, IFNULL(salary, 0) AS salary FROM employees;
-- 修改表结构(ALTER)
ALTER TABLE employees ADD COLUMN email VARCHAR(100);
ALTER TABLE employees MODIFY COLUMN salary DECIMAL(12, 2);
ALTER TABLE employees DROP COLUMN email;
-- 子查询
SELECT * FROM employees WHERE department_id = (
SELECT id FROM departments WHERE name = 'IT'
);
-- 删除数据库
DROP DATABASE mydatabase;
这些操作涵盖了 MySQL 数据库的基本管理任务、数据操作和查询技巧,是数据库应用中常见的基本操作。
5. 事务控制语言(TCL:Transaction Control Language)
① COMMIT – 提交事务
COMMIT;
示例:
START TRANSACTION;
UPDATE employees SET salary = salary + 5000 WHERE department_id = 1;
COMMIT;
② ROLLBACK – 回滚事务
ROLLBACK;
示例:
START TRANSACTION;
UPDATE employees SET salary = salary + 5000 WHERE department_id = 1;
ROLLBACK;
③ SAVEPOINT – 设置保存点
SAVEPOINT savepoint_name;
示例:
START TRANSACTION;
UPDATE employees SET salary = salary + 5000 WHERE department_id = 1;
SAVEPOINT before_update;
UPDATE employees SET salary = salary - 5000 WHERE department_id = 2;
ROLLBACK TO before_update;
COMMIT;
④ RELEASE SAVEPOINT – 释放保存点
RELEASE SAVEPOINT savepoint_name;
示例:
START TRANSACTION;
UPDATE employees SET salary = salary + 5000 WHERE department_id = 1;
SAVEPOINT before_update;
RELEASE SAVEPOINT before_update;
COMMIT;
这些内容涵盖了 SQL 中常用的查询、定义、操作和事务控制语言的基本公式和用法。这些命令和语法是数据库操作中最常见和基本的,能够满足大多数数据库操作需求。