視圖創建
題目描述
針對actor表創建視圖actor_name_view,只包含first_name以及last_name兩列,並對這兩列重新命名,fist_name爲first_name_v,last_name修改爲last_name_v:
CREATE TABLE IF NOT EXISTS actor (
actor_id smallint(5) NOT NULL PRIMARY KEY,
first_name varchar(45) NOT NULL,
last_name varchar(45) NOT NULL,
last_update timestamp NOT NULL DEFAULT (datetime(‘now’,’localtime’)))
create view actor_name_view as
select first_name fist_name_v, last_name last_name_v
from actor
查詢奇數行數據
對於employees表中,給出奇數行的first_name
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
));
SELECT E1.first_name
FROM employees E1
WHERE
(SELECT COUNT(*) FROM employees E2 WHERE E1.first_name>E2.first_name)%2=0;
題目描述
獲取當前(to_date=’9999-01-01’)薪水第二多的員工的emp_no以及其對應的薪水salary
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
));
select emp_no,salary
from salaries
where to_date='9999-01-01'
order by salary desc
limit 1,1;
查找當前薪水(to_date=’9999-01-01’)排名第二多的員工編號emp_no、薪水salary、last_name以及first_name,不準使用order by
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
));
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
));
select e.emp_no,max(s.salary),e.last_name,e.first_name
from salaries s,employees e,
(select emp_no,max(salary) from salaries where salaries.to_date = '9999-01-01') temp
where e.emp_no=s.emp_no and e.emp_no!=temp.emp_no
and s.to_date = '9999-01-01';
題目描述
查找員工編號emp_now爲10001其自入職以來的**薪水salary漲幅值**growth
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
));
SELECT (
(SELECT salary FROM salaries WHERE emp_no = 10001 ORDER BY to_date DESC LIMIT 1)
- (SELECT salary FROM salaries WHERE emp_no = 10001 ORDER BY to_date LIMIT 1)
) AS growth;
題目描述
查找所有員工自入職以來的薪水漲幅情況,給出員工編號emp_noy以及其對應的薪水漲幅growth,並按照growth進行升序
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
));
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
));
select a.emp_no, (b.salary - c.salary) as growth
from
employees as a
inner join salaries as b
on a.emp_no = b.emp_no and b.to_date = '9999-01-01'
inner join salaries as c
on a.emp_no = c.emp_no and a.hire_date = c.from_date
order by growth asc
對於表actor**批量插入如下數據,如果數據已經存在,請忽略,不使用replace操作
CREATE TABLE IF NOT EXISTS actor (
actor_id smallint(5) NOT NULL PRIMARY KEY,
first_name varchar(45) NOT NULL,
last_name varchar(45) NOT NULL,
last_update timestamp NOT NULL DEFAULT (datetime(‘now’,’localtime’)))
insert or ignore into actor values('3','ED','CHASE','2006-02-15 12:34:33')
題目描述
獲取select * from employees對應的執行計劃
explain select * from employees;
題目描述
存在actor表,包含如下列信息:
CREATE TABLE IF NOT EXISTS actor (
actor_id smallint(5) NOT NULL PRIMARY KEY,
first_name varchar(45) NOT NULL,
last_name varchar(45) NOT NULL,
last_update timestamp NOT NULL DEFAULT (datetime(‘now’,’localtime’)));
現在在last_update後面新增加一列名字爲create_date, 類型爲datetime, NOT NULL,默認值爲’0000 00:00:00’
ALTER table actor
add column
create_date datetime not null default ('0000-00-00 00:00:00')
後面應該可以加上 after last_update
題目描述
統計各個部門對應員工漲幅的次數總和,給出部門編碼dept_no、部門名稱dept_name以及次數sum
CREATE TABLE departments
(
dept_no
char(4) NOT NULL,
dept_name
varchar(40) NOT NULL,
PRIMARY KEY (dept_no
));
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 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
));
下面這條sql是統計薪資變化次數 變化 不等同漲幅
select d.dept_no ,dept.dept_name,count(salary)
from salaries s ,dept_emp d,departments dept
where s.emp_no = d.emp_no and d.dept_no=dept.dept_no
group by dept.dept_no;
這個sql 是統計工資漲的次數
select dt.dept_no,dt.dept_name,count(*)
from salaries sa left join dept_emp de
on sa.emp_no = de.emp_no
left join departments dt
on de.dept_no = dt.dept_no
inner join salaries saa
where saa.salary > sa.salary
and saa.emp_no = sa.emp_no
and saa.from_date = sa.to_date
group by dt.dept_no,dt.dept_name;
題目描述
針對如下表actor結構創建索引:
CREATE TABLE IF NOT EXISTS actor (
actor_id smallint(5) NOT NULL PRIMARY KEY,
first_name varchar(45) NOT NULL,
last_name varchar(45) NOT NULL,
last_update timestamp NOT NULL DEFAULT (datetime(‘now’,’localtime’)))
對first_name創建唯一索引uniq_idx_firstname,對last_name創建普通索引idx_lastname
create unique index uniq_idx_firstname on actor(first_name);
create index idx_lastname on actor(last_name);
題目描述
構造一個**觸發器**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
);
create trigger audit_log
after insert on employees_test
begin
insert into audit values(new.id,new.name);
end
題目描述
將id=5以及emp_no=10001的行數據替換成id=5以及emp_no=10005,其他數據保持不變,使用replace實現。
CREATE TABLE IF NOT EXISTS titles_test (
id int(11) not null primary key,
emp_no int(11) NOT NULL,
title varchar(50) NOT NULL,
from_date date NOT NULL,
to_date date DEFAULT NULL);
insert into titles_test values (‘1’, ‘10001’, ‘Senior Engineer’, ‘1986-06-26’, ‘9999-01-01’),
(‘2’, ‘10002’, ‘Staff’, ‘1996-08-03’, ‘9999-01-01’),
(‘3’, ‘10003’, ‘Senior Engineer’, ‘1995-12-03’, ‘9999-01-01’),
(‘4’, ‘10004’, ‘Senior Engineer’, ‘1995-12-03’, ‘9999-01-01’),
(‘5’, ‘10001’, ‘Senior Engineer’, ‘1986-06-26’, ‘9999-01-01’),
(‘6’, ‘10002’, ‘Staff’, ‘1996-08-03’, ‘9999-01-01’),
(‘7’, ‘10003’, ‘Senior Engineer’, ‘1995-12-03’, ‘9999-01-01’);
/*update titles_test set emp_no = replace(emp_no,10001,10005) where id=5*/
replace into titles_test values(5, 10005, 'Senior Engineer', '1986-06-26', '9999-01-01');