study Python 19day

select * from employees
where hire_date =
(select max(hire_date) from employees)

select * from employees
where hire_date=(select hire_date from employees order by hire_date desc limit 2,1)

select s.*,d.dept_no from salaries s,dept_manager d
where s.to_date='9999-01-01'
and d.to_date='9999-01-01'
and s.emp_no=d.emp_no
select employees.last_name,employees.first_name,dept_emp.dept_no from dept_emp inner join employees 
where dept_emp.emp_no=employees.emp_no

select employees.last_name,employees.first_name,dept_emp.dept_no from employees
left join dept_emp on dept_emp.emp_no=employees.emp_no

select e.emp_no,s.salary from salaries as s inner join employees as e
on e.emp_no=s.emp_no where e.hire_date=s.from_date
order by e.emp_no desc

select emp_no,count(emp_no)as t from salaries group by emp_no having t>15

select distinct salary from salaries where to_date='9999-01-01' order by salary desc

select d.dept_no,d.emp_no,s.salary from salaries s  inner join dept_manager d
on d.emp_no=s.emp_no where d.to_date='9999-01-01'and s.to_date='9999-01-01'

select emp_no from (select * from employees left join dept_manager on employees.emp_no=dept_manager.emp_no)
where dept_no is null

select de.emp_no,dm.emp_no as manager_no from dept_emp as de inner join dept_manager as dm
on de.dept_no=dm.dept_no
where de.to_date='9999-01-01' and dm.to_date='9999-01-01' and de.emp_no!=dm.emp_no

select d.dept_no,d.emp_no,max(s.salary) as salary
from dept_emp as d inner join salaries as s 
on d.emp_no=s.emp_no
where d.to_date='9999-01-01' and s.to_date='9999-01-01'
group by dept_no


select title,count(title)as t from titles group by title having t>=2

select title,count(distinct emp_no)as t from titles group by title having t>=2

select * from employees where emp_no%2=1 and last_name!='Mary'
order by hire_date desc

SELECT t.title as title, AVG(salary) AS avg
FROM titles AS t
INNER JOIN salaries AS s
ON s.emp_no = t.emp_no AND s.to_date = '9999-01-01' AND t.to_date = '9999-01-01'
GROUP BY t.title

select emp_no,salary from salaries where to_date='9999-01-01' 
and salary=(select salary from salaries order by salary desc limit 1,1)

select e.emp_no,s.salary,e.last_name,e.first_name from employees as e inner join salaries as s
on e.emp_no=s.emp_no
where s.to_date='9999-01-01'
and salary=(select max(salary) from salaries where salary < (select max(salary) from salaries))
select e.last_name,e.first_name,dm.dept_name from
(employees as e left join dept_emp as de on e.emp_no=de.emp_no)
left join departments as dm on dm.dept_no=de.dept_no


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

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 


select de.dept_no,dm.dept_name,count(s.salary)as sum
from(dept_emp as de inner join salaries as s on s.emp_no=de.emp_no)
inner join departments dm on dm.dept_no=de.dept_no
group by de.dept_no

select s1.emp_no,s1.salary,count(distinct s2.salary)as rank
from salaries s1,salaries s2
where s1.to_date='9999-01-01'and s2.to_date='9999-01-01' and s1.salary <= s2.salary
group by s1.emp_no
order by s1.salary desc,s1.emp_no asc



SELECT de.dept_no, s.emp_no, s.salary 
FROM (employees AS e INNER JOIN salaries AS s ON s.emp_no = e.emp_no AND s.to_date = '9999-01-01')
INNER JOIN dept_emp AS de ON e.emp_no = de.emp_no
WHERE de.emp_no NOT IN (SELECT emp_no FROM dept_manager)

select de.demp_no,s.emp_no,s.salary 
from(employees as e inner join salaries as s on s.emp_no=e.emp_no and
    s.to_date='9999-01-01')inner join dept_emp as de on e.emp_no=de.emp_no
where de.emp_no not in (select emp_no from dept_manager)



SELECT sem.emp_no AS emp_no, sdm.emp_no AS manager_no, sem.salary AS emp_salary, sdm.salary AS manager_salary
FROM (SELECT s.salary, s.emp_no, de.dept_no FROM salaries s INNER JOIN dept_emp de
ON s.emp_no = de.emp_no AND s.to_date = '9999-01-01' ) AS sem, 
(SELECT s.salary, s.emp_no, dm.dept_no FROM salaries s INNER JOIN dept_manager dm
ON s.emp_no = dm.emp_no AND s.to_date = '9999-01-01' ) AS sdm
WHERE sem.dept_no = sdm.dept_no AND sem.salary > sdm.salary

select sem.emp_no as emp_no,sdm.emp_no as manager_no,sem.salary as emp_salary,
sdm.salary as manager_salary
from(select s.salary,s.emp_no,de.dept_no from salarier s inner join demp_emp de
    on s.emp_no=de.emp_no and s.to_date='9999-01-01')as sem,
(select s.salary,s.emp_no,dm.dept_no from salaries s inner join dept_manager dm 
on s.emp_no=dm.emp_no and s.to_date='9999-01-01')as sdm
where dem.dept_no=sdm.dept_no and sem.salary>sdm.salary


SELECT s2.emp_no, s2.from_date, (s2.salary - s1.salary) AS salary_growth
FROM salaries AS s1, salaries AS s2
WHERE s1.emp_no = s2.emp_no 
AND salary_growth > 5000
AND (strftime("%Y",s2.to_date) - strftime("%Y",s1.to_date) = 1 
     OR strftime("%Y",s2.from_date) - strftime("%Y",s1.from_date) = 1 )
ORDER BY salary_growth DESC

select s2.emp_no,s2.from_date,(s2.salaty-s1.salary)as salaty_growth
from salaties as s1,salaries as s2
where s1.emp_no=s2.emp_no
and salary_growth>5000
and(strftime('%Y',s2.to_date)-strftime("%Y",s1.to_date)=1
    or strftime("%Y",s2.from_date)-strftime("%Y",s1.from_date)=1
    order by salary_growth desc

explain select * from employees
explain select *from employees 

select last_name ||" "||first_name as name from employees
select lase_name ||" "||first_name as name from employees




create table if not exists actor(
    actor_id smallint(5) not null,
    first_name varchar(45) not null,
    last_name varchar(45) not null,
    last_update timestamp not null default( datetime('now','localtime')),
    primary key(actor_id)
)

create table if not exists actor(
    actor_id smallint(5) not null,
    first_name varchar(45) not null,
    last_name varchar(45) not null,
    last_update timestamp not null default(datetime('now','localtime')),
    primary key(actor_id)
)



INSERT INTO actor
VALUES (1, 'PENELOPE', 'GUINESS', '2006-02-15 12:34:33'),
(2, 'NICK', 'WAHLBERG', '2006-02-15 12:34:33')

insert into actor
value(
    1,'penelope','guiness','2006-02-15 12:34:33'
),
(2,'nick','wahlaberg','2006-02-15 12:34:33')

INSERT INTO actor
VALUES (1, 'PENELOPE', 'GUINESS', '2006-02-15 12:34:33'),
(2, 'NICK', 'WAHLBERG', '2006-02-15 12:34:33')

insert into actor
value(
    1,'penelope','guiness','2006-02-15 12:34:33'
),
(2,'nick','wahlaberg','2006-02-15 12:34:33')


insert or ignore into actor values(3,'ed','chase','2006-02-15 12:34:33')


create table if not exists actor_name(
    first_name varchar(45) not null,
    last_name varchar(45) not null
);
insert into actor_name select first_name,last_name from actor


create unique index uniq_idx_firstname on actor(first_name);
create index idx_lastname on actor(last_name);
create unique index uniq_idx_firstname on actor(first_nname);
create index idx_lastname on actor(last_name);


CREATE VIEW actor_name_view (fist_name_v,last_name_v)AS
SELECT first_name,last_name
FROM actor

create view actor_name_view (first_name_v,last_name_v)as select first_name,last_name
from actor

select * from salaries indexed by idx_emp_no where emp_no=10005
select* from salaries indexed by idx_emp_no where emp_no=10005

alter table actor add column create_date datetime NOT null 
default '0000-00-00 00:00:00'
alter table actor add column create_date datetime not null
default '0000-00-00 00:00:00'

create trigger audit_log after insert on employees_test
begin
	insert into audit values(new.ID,new.NAME);
end

create trigger audit_log after insert on employees_test
begin
    insert into audit values(new.ID,new.NAME);
end

delete from titles_test where id not in(select min(id)
from titles_test group by emp_no)
delete from titles_test where id not in (select min(id)
                                        from titles_test group by emp_no)

update titles_test set to_date=null,from_date='2001-01-01' 
where to_date="9999-01-01"
update titles_test set to_date=null,from_date='2001-01-01'
where to_date='9999-01-01'

update titles_test set emp_no=replace(emp_no,'10001','10005') where id=5
upate titles_test set emp_no=replace(emp_no,'10001','10005')where id=5

alter table titles_test rename to titles_2017
alter table titlles_test rename to titles_2017


DROP TABLE audit;
CREATE TABLE audit(
    EMP_no INT NOT NULL,
    create_date datetime NOT NULL,
    FOREIGN KEY(EMP_no) REFERENCES employees_test(ID));

drop table audit;
create table audit(
    emp_no int not null
    create_date datetime not null,
    foreign key(emp_no) references employees_test(ID);
)

select em.* from employees as em,emp_v as ev where ev.emp_no=em.emp_no
SELECT em.*from employees as em,emp_v as ev where ev.emp_no=em.emp_no



UPDATE salaries SET salary = salary * 1.1 WHERE emp_no IN
(SELECT s.emp_no FROM salaries AS s INNER JOIN emp_bonus AS eb 
ON s.emp_no = eb.emp_no AND s.to_date = '9999-01-01')

update salaries set salary=salary*1.1 where  emp_no in
(select s.emp_no from salaries as s inner join emp_bonus as eb
on s.emp_no=eb.emp_no and s.to_date='9999-01-01')
select "select count(*) from "||name||";" as cnts  from sqlite_master
where type='table'
select 'select count(*) from '||name||";"as cnts from sqlite_master
where type='table'

select last_name||"'"||first_name as name
from employees

select last_name||"'"||first_name as name
from employees

select length("10,A,B")-length(replace("10,A,B",",","")) as cnt
select length("10,A,B")-length(replace("10,A,B",",","")) as cnt

select first_name from employees 
order by substr(first_name,length(first_name)-1)

select first_name from employees
order by substr(first_name,length(first_name)-1)

select dept_no,group_concat(emp_no)as employees
from dept_emp group by dept_no

select dept_no,group_councat(emp_no)as employees
from dept_emp group by dept_no



SELECT AVG(salary) AS avg_salary FROM salaries 
WHERE to_date = '9999-01-01' 
AND salary NOT IN (SELECT MAX(salary) FROM salaries)
AND salary NOT IN (SELECT MIN(salary) FROM salaries)

select avg(salary)as avg_salary from salaries 
where to_date='9999-01-01'
and salary not in (select max(salary)from salaries)
and salary not in (select min(salary)from salaries)

select * from employees limit 5,5
select *from employees limit 5,5


SELECT de.emp_no, de.dept_no, eb.btype, eb.recevied
FROM dept_emp AS de LEFT JOIN emp_bonus AS eb 
ON de.emp_no = eb.emp_no

select de.emp_no,de.dept_no,eb.btype,eb.recevied
from dept_emp as de left join emp_bonus as eb
on de.emp_no=eb.emp_no

select e.* from employees as e
where not exists (select emp_no from dept_emp where dept_emp.emp_no=e.emp_no)

select e.* from employees as e
where not exists (select emp_no from dept_emp where dept_emp.emp_no=e.emp_no)

select em.* from employees as em,emp_v as ep where em.emp_no=ep.emp_no
select em.* from employees as em,emp_v as ep where em.emp_no=ep.emp_no

select e.emp_no,e.first_name,e.last_name,b.btype,s.salary,
(case b.btype
 when 1 then s.salary*0.1
 when 2 then s.salary*0.2
 else s.salary*0.3 end)as bonus
from employees as e inner join salaries as s on s.emp_no=e.emp_no
inner join emp_bonus as b on s.emp_no=b.emp_no
where s.to_date='9999-01-01'

select e.emp_no,e.first_name,e.last_name,b.btyoe,s.salary,(
case b.btype
when 1 then s.salary*0.1
when 2 then s.salary*0.2
else s.salary*0.3 end)as bus
from employees as e inner join salaries as s on s.emp_no=e.emp_no
inner join emp_bonus as b on s.enp_no=b.emp_no
where s.to_date-'9999-01-01'

select s1.emp_no,s1.salary,(select sum(s2.salary) 
from salaries as s2 where s2.emp_no<=s1.emp_no and s2.to_date='9999-01-01')
as running_total 
from salaries as s1 
where s1.to_date='9999-01-01'

select s1.emp_no,s1.salary,(select sum(s2.salary)
from salaries as se where s2.emp_no<=s1.emp_noand s2.to_date='9999-01-01')
as running_total
from salaries as s1
where s1.to_date='9999-01-01'

select e1.first_name from employees as e1
where (select count(e2.first_name)from employees as e2 
       where e2.first_name<=e1.first_name)%2=1

select e1.first_name feom employees as e1
where (select count(e2.first_name)from employees as e2
      where e2.first_name<=e1.first_name)%2=1
发布了65 篇原创文章 · 获赞 0 · 访问量 558

猜你喜欢

转载自blog.csdn.net/u011624267/article/details/103865665