数据库操作练习12

来源:互联网 发布:遥感数据预处理方法 编辑:程序博客网 时间:2024/05/18 01:12

1. 针对上面的salaries表emp_no字段创建索引idx_emp_no,查询emp_no为10005,

题目描述

针对salaries表emp_no字段创建索引idx_emp_no,查询emp_no为10005, 使用强制索引。
CREATE TABLE `salaries` (
`emp_no` int(11) NOT NULL,
`salary` int(11) NOT NULL,
`from_date` date NOT NULL,
`to_date` date NOT NULL,
PRIMARY KEY (`emp_no`,`from_date`));
create index idx_emp_no on salaries(emp_no);
SQLite中,使用 INDEXED BY 语句进行强制索引查询:
select * from salaries indexed by idx_emp_no where emp_no=10005
MySQL中,使用 FORCE INDEX 语句进行强制索引查询:
SELECT * FROM salaries FORCE INDEX idx_emp_no WHERE emp_no = 10005

2. 构造一个触发器audit_log,在向employees表中插入一条数据的时候,触发插入相关的数据到audit中

题目描述

构造一个触发器audit_log,在向employees表中插入一条数据的时候,触发插入相关的数据到audit中。
CREATE TABLE employees_test(
ID INT PRIMARY KEY NOT NULL,
NAME TEXT NOT NULL,
AGE INT NOT NULL,
ADDRESS CHAR(50),
SALARY REAL
);
CREATE TABLE audit(
EMP_no INT NOT NULL,
NAME TEXT NOT NULL
本题中构造触发器时注意以下几点:
1、用 CREATE TRIGGER 语句构造触发器,用 BEFORE或AFTER 来指定在执行后面的SQL语句之前或之后来触发TRIGGER
2、触发器执行的内容写出 BEGIN与END 之间
3、可以使用 NEW与OLD 关键字访问触发后或触发前的employees_test表单记录

创建 触发器(Trigger) 的基本语法如下:

CREATE  TRIGGER trigger_name [BEFORE|AFTER] event_name ON table_nameBEGIN -- Trigger logic goes here....END;

在这里,event_name 可以是在所提到的表 table_name 上的 INSERT、DELETE 和 UPDATE 数据库操作。您可以在表名后选择指定 FOR EACH ROW。

以下是在 UPDATE 操作上在表的一个或多个指定列上创建触发器(Trigger)的语法:

CREATE  TRIGGER trigger_name [BEFORE|AFTER] UPDATE OF column_name ON table_nameBEGIN -- Trigger logic goes here....END;
CREATE TRIGGER audit_log AFTER INSERT ON employees_testBEGININSERT INTO audit VALUES(NEW.ID,NEW.NAME);END;

3. 查找所有已经分配部门的员工的last_name和first_name

题目描述

查找所有已经分配部门的员工的last_name和first_name
CREATE TABLE `dept_emp` (
`emp_no` int(11) NOT NULL,
`dept_no` char(4) NOT NULL,
`from_date` date NOT NULL,
`to_date` date NOT NULL,
PRIMARY KEY (`emp_no`,`dept_no`));
CREATE TABLE `employees` (
`emp_no` int(11) NOT NULL,
`birth_date` date NOT NULL,
`first_name` varchar(14) NOT NULL,
`last_name` varchar(16) NOT NULL,
`gender` char(1) NOT NULL,
`hire_date` date NOT NULL,
PRIMARY KEY (`emp_no`));
在SQL中:
left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录 
right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录
inner join(等值连接) 只返回两个表中联结字段相等的行

SQL INNER JOIN 关键字

在表中存在至少一个匹配时,INNER JOIN 关键字返回行。

INNER JOIN 关键字语法

SELECT column_name(s)FROM table_name1INNER JOIN table_name2 ON table_name1.column_name=table_name2.column_name

注释:INNER JOIN 与 JOIN 是相同的。

SELECT employees.last_name, employees.first_name, dept_emp.dept_no from employees inner join dept_emp on employees.emp_no=dept_emp.emp_no;

自然连接:natural join,自动对两个表,按照同名的列进行内连接,是一种特殊的等值连接:

SELECT employees.last_name,employees.first_name,dept_emp.dept_no from employees natural join dept_emp


原创粉丝点击