SQL语句书写训练-01

  1. 创建数据库

    • 请写出创建一个名为 company 的数据库的 SQL 语句。
    CREATE DATABASE company;
  2. 查看数据库

    • 请写出查看当前数据库中所有表的 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
      );
      “`

  3. 修改表

    • 请写出在 `employees` 表中添加一个名为 `salary` 的字段,类型为浮点数。
      ALTER TABLE employees ADD salary FLOAT;
  4. 删除表

    • 请写出删除 `employees` 表的 SQL 语句。
      DROP table employees;

数据操作语言(DML)

  1. 插入数据
    • 请写出向 `employees` 表中插入一条记录的 SQL 语句,假设 `name` 为 "Alice",`email` 为 "alice@example.com"。
      INSERT INTO employees(name,email) VALUES ('Alice','alice@example.com');
  2. 更新数据
    • 请写出将 `employees` 表中 `name` 为 "Alice" 的员工的 `email` 更新为 "alice_new@example.com" 的 SQL 语句。
      UPDATE employees SET email = "alice_new@example.com" WHERE name = 'Alice';
  3. 删除数据
    • 请写出删除 `employees` 表中 `email` 为 "alice_new@example.com" 的记录的 SQL 语句。
      DELETE FROM employees WHERE email = 'alice_new@example.com';
  4. 查询数据
    • 请写出查询 `employees` 表中所有员工的 `name` 和 `email` 的 SQL 语句。
      SELECT name,email FROM employess;

      查询和聚合

  5. 条件查询
    • 请写出查询 `employees` 表中 `hire_date` 在 2022 年之后的所有员工的 SQL 语句。
      SELECT *
      FROM employees
      WHERE hire_data > '2022-01-01';
  6. 排序和限制
    • 请写出查询 `employees` 表中所有员工的 `name`,并按 `hire_date` 降序排列,限制结果为前 5 条记录的 SQL 语句。
      SELECT name
      FROM employees
      ORDER BY hire_data DESC
      limit 5;
  7. 聚合函数
    • 请写出查询 `employees` 表中员工总数的 SQL 语句。
      SELECT count(*)
      FROM employees;

视图

  1. 创建视图
    • 请写出创建一个名为 `active_employees` 的视图,包含所有 `hire_date` 在 2022 年之后的员工的 `name` 和 `email`。
      CREATE VIEW AS
      SELECT name,email
      FROM active_employees
      WHERE hire_data > '2022-01-01';
  2. 查询视图
    • 请写出查询 `active_employees` 视图的 SQL 语句。
      SELECT * FROM active_employees;

触发器

在 MySQL 中,NEW 是一个特殊的关键字,用于触发器(Triggers)中,表示将要插入或更新的行的新值。它允许你访问即将被插入或更新的列的值。
触发器中的 NEW
插入触发器:在 BEFORE INSERT 触发器中,NEW 代表即将插入的新行的数据。你可以使用 NEW.column_name 来访问即将插入的行中的列值。

更新触发器:在 BEFORE UPDATE 触发器中,NEW 代表更新后行的新值。你可以使用 NEW.column_name 来访问更新后的列值。

删除触发器:在 BEFORE DELETE 触发器中,NEW 不可用,因为行将被删除,没有新值。

  1. 创建触发器
    • 请写出创建一个触发器,在向 `employees` 表插入新记录时,自动将 `hire_date` 设置为当前日期。
      CREATE TRIGGER before_employees 
      BEFORE INSERT ON employees
      FOR EACH ROW
      BEGIN
      SET NEW.hire_data = CURRENT_DATA;
      END;

      存储过程

      SELECT … INTO 语句用于将查询结果存储到变量或参数中。

  2. 创建存储过程
    • 请写出创建一个存储过程 `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;
  3. 调用存储过程
    • 请写出调用 `GetEmployeeEmail` 存储过程并传入参数 "Alice" 的 SQL 语句。
      CALL GetEmployeeEmail('Alice',@result_email);
      SELECT @result_email;