-
创建数据库
- 请写出创建一个名为
company
的数据库的 SQL 语句。
CREATE DATABASE company;
- 请写出创建一个名为
-
查看数据库
- 请写出查看当前数据库中所有表的 SQL 语句。
use company; show tables; ```
</ul>
</li>
</ol>
<h3>数据定义语言(DDL)</h3>
<ol start="3">
<li>
<p><strong>创建表</strong></p>
<ul>
<li>请写出创建一个名为 `employees` 的表,包含以下字段:
<ul>
<li>`id`:整数类型,主键,自增</li>
<li>`name`:字符串类型,不允许为空</li>
<li>`email`:字符串类型,唯一</li>
<li>`hire_date`:日期类型,默认值为当前日期
“`sql
CREATE TABLE employees(
`id` INT AUTOINCREMENT PRIMARY KEY,
`name` varchar(100) NOT NULL,
`email` varchar(100) UNIQUE,
`hire_data` DATE DEFAULT CURRENT_DATE
);
“` - 请写出查看当前数据库中所有表的 SQL 语句。
-
修改表
- 请写出在 `employees` 表中添加一个名为 `salary` 的字段,类型为浮点数。
ALTER TABLE employees ADD salary FLOAT;
- 请写出在 `employees` 表中添加一个名为 `salary` 的字段,类型为浮点数。
-
删除表
- 请写出删除 `employees` 表的 SQL 语句。
DROP table employees;
- 请写出删除 `employees` 表的 SQL 语句。
数据操作语言(DML)
- 插入数据
- 请写出向 `employees` 表中插入一条记录的 SQL 语句,假设 `name` 为 "Alice",`email` 为 "alice@example.com"。
INSERT INTO employees(name,email) VALUES ('Alice','alice@example.com');
- 请写出向 `employees` 表中插入一条记录的 SQL 语句,假设 `name` 为 "Alice",`email` 为 "alice@example.com"。
- 更新数据
- 请写出将 `employees` 表中 `name` 为 "Alice" 的员工的 `email` 更新为 "alice_new@example.com" 的 SQL 语句。
UPDATE employees SET email = "alice_new@example.com" WHERE name = 'Alice';
- 请写出将 `employees` 表中 `name` 为 "Alice" 的员工的 `email` 更新为 "alice_new@example.com" 的 SQL 语句。
- 删除数据
- 请写出删除 `employees` 表中 `email` 为 "alice_new@example.com" 的记录的 SQL 语句。
DELETE FROM employees WHERE email = 'alice_new@example.com';
- 请写出删除 `employees` 表中 `email` 为 "alice_new@example.com" 的记录的 SQL 语句。
- 查询数据
- 请写出查询 `employees` 表中所有员工的 `name` 和 `email` 的 SQL 语句。
SELECT name,email FROM employess;
查询和聚合
- 请写出查询 `employees` 表中所有员工的 `name` 和 `email` 的 SQL 语句。
- 条件查询
- 请写出查询 `employees` 表中 `hire_date` 在 2022 年之后的所有员工的 SQL 语句。
SELECT * FROM employees WHERE hire_data > '2022-01-01';
- 请写出查询 `employees` 表中 `hire_date` 在 2022 年之后的所有员工的 SQL 语句。
- 排序和限制
- 请写出查询 `employees` 表中所有员工的 `name`,并按 `hire_date` 降序排列,限制结果为前 5 条记录的 SQL 语句。
SELECT name FROM employees ORDER BY hire_data DESC limit 5;
- 请写出查询 `employees` 表中所有员工的 `name`,并按 `hire_date` 降序排列,限制结果为前 5 条记录的 SQL 语句。
- 聚合函数
- 请写出查询 `employees` 表中员工总数的 SQL 语句。
SELECT count(*) FROM employees;
- 请写出查询 `employees` 表中员工总数的 SQL 语句。
视图
- 创建视图
- 请写出创建一个名为 `active_employees` 的视图,包含所有 `hire_date` 在 2022 年之后的员工的 `name` 和 `email`。
CREATE VIEW AS SELECT name,email FROM active_employees WHERE hire_data > '2022-01-01';
- 请写出创建一个名为 `active_employees` 的视图,包含所有 `hire_date` 在 2022 年之后的员工的 `name` 和 `email`。
- 查询视图
- 请写出查询 `active_employees` 视图的 SQL 语句。
SELECT * FROM active_employees;
- 请写出查询 `active_employees` 视图的 SQL 语句。
触发器
在 MySQL 中,NEW 是一个特殊的关键字,用于触发器(Triggers)中,表示将要插入或更新的行的新值。它允许你访问即将被插入或更新的列的值。
触发器中的 NEW
插入触发器:在 BEFORE INSERT 触发器中,NEW 代表即将插入的新行的数据。你可以使用 NEW.column_name 来访问即将插入的行中的列值。
更新触发器:在 BEFORE UPDATE 触发器中,NEW 代表更新后行的新值。你可以使用 NEW.column_name 来访问更新后的列值。
删除触发器:在 BEFORE DELETE 触发器中,NEW 不可用,因为行将被删除,没有新值。
- 创建触发器
- 请写出创建一个触发器,在向 `employees` 表插入新记录时,自动将 `hire_date` 设置为当前日期。
CREATE TRIGGER before_employees BEFORE INSERT ON employees FOR EACH ROW BEGIN SET NEW.hire_data = CURRENT_DATA; END;
存储过程
SELECT … INTO 语句用于将查询结果存储到变量或参数中。
- 请写出创建一个触发器,在向 `employees` 表插入新记录时,自动将 `hire_date` 设置为当前日期。
- 创建存储过程
- 请写出创建一个存储过程 `GetEmployeeEmail`,接受一个 `name` 参数,返回该员工的 `email`。
CREATE PROCEDURE GetEmployeeEmail(IN emp_name varchar(100),OUT emp_email varchar(100)) BEGIN SELECT email INTO emp_name FROM employees WHERE name = emp_name; END;
- 请写出创建一个存储过程 `GetEmployeeEmail`,接受一个 `name` 参数,返回该员工的 `email`。
- 调用存储过程
- 请写出调用 `GetEmployeeEmail` 存储过程并传入参数 "Alice" 的 SQL 语句。
CALL GetEmployeeEmail('Alice',@result_email); SELECT @result_email;
- 请写出调用 `GetEmployeeEmail` 存储过程并传入参数 "Alice" 的 SQL 语句。