1.查詢最晚入職員工的所有資訊
create tableemployees
(
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
));
解析:這個題很簡單,關鍵是對入職時間做以逆序(desc)排序而後選出第一條資訊
select * from employees order
by hire_date desc limit 1
或者判斷入職時間是employees中hire_date最大的
select * from employees
where hire_date =(select
max(hire_date)
from employees)
2.查詢入職員工時間排名倒數第三的員工所有資訊
create tableemployees
(
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
));
解析:這個題可以以入職時間做以逆序(desc)排序而後選出第一條資訊
select * from employees
order
by hire_date desc limit 2,1
3.查詢各個部門當前(to_date=』9999-01-01』)領導當前薪水詳情以及其對應部門編號dept_no
create tabledept_manager
(
dept_no
char(4) not null,
emp_no
int(11) not null,
from_date
date not null,
to_date
date not null,
primary key (emp_no
,dept_no
));
create tablesalaries
(
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
));
解析:兩個表連線加上對兩個表的to_date進行限制,其中連線表可以用left join連線,或者基本的逗號連線都可
select salaries.*,dept_manager.dept_no from salaries, dept_manager
where salaries.emp_no = dept_manager.emp_no
and salaries.to_date = "9999-01-01"
and dept_manager.to_date = "9999-01-01"
;
select salaries.*,dept_manager.dept_no
from salaries left
join dept_manager
on (salaries.emp_no=dept_manager.emp_no)
where dept_manager.to_date='9999-01-01'
and salaries.to_date='9999-01-01'
4.查詢所有已經分配部門的員工的last_name和first_name
create tabledept_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 tableemployees
(
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 b.last_name,b.first_name,a.dept_no
from dept_emp a,employees b
where a.emp_no=b.emp_no
其中鏈結表時可以用inner join
select employees.last_name, first_name, dept_emp.dept_no
from dept_emp inner
join employees where
dept_emp.emp_no = employees.emp_no;
5.查詢所有員工的last_name和first_name以及對應部門編號dept_no,也包括展示沒有分配具體部門的員工
create tabledept_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 tableemployees
(
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 employees.last_name,employees.first_name,dept_emp.dept_no
from employees left
join dept_emp on employees.emp_no=dept_emp.emp_no
總結:前五道題涉及order by,limit,inner join,left join等用法,做這些題時,在基礎方法解決時,可以根據w3c中的提供的手冊進行嘗試改進方法,這樣可以更好的掌握sql語言。 牛客網 資料庫SQL實戰1
題目描述 查詢最晚入職員工的所有資訊,為了減輕入門難度,目前所有的資料裡員工入職的日期都不是同一天 sqlite裡面的注釋為 mysql為comment create table employees emp no int 11 notnull 員工編號 birth date date notnull...
牛客網 sql 題目練習筆記
題目 查詢各個部門當前 dept manager.to date 9999 01 01 領導當前 salaries.to date 9999 01 01 薪水詳情以及其對應部門編號dept no 注 請以salaries表為主表進行查詢,輸出結果以salaries.emp no公升序排序,並且請注意...
牛客網練習題1
給定區間 2的31次方,2的31次方 內的3個整數a b和c,請判斷a b是否大於c。輸入第1行給出正整數t 10 是測試用例的個數。隨後給出t組測試用例,每組佔一行,順序給出a b和c。整數間以空格分隔。對每組測試用例,在一行中輸出 case x true 如果a b c,否則輸出 case x ...