您的位置:首页 > 数据库

数据库操作练习12

2017-09-03 22:19 281 查看

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_name
BEGIN
-- 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_name
BEGIN
-- Trigger logic goes here....
END;

CREATE TRIGGER audit_log AFTER INSERT
ON employees_test
BEGIN
INSERT 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_name1
INNER 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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  编程 练习 sql 数据库