牛客網SQL實戰練習(1)

2021-08-04 16:43:02 字數 4561 閱讀 2134

1.查詢最晚入職員工的所有資訊

create tableemployees(

emp_noint(11) not null,

birth_datedate not null,

first_namevarchar(14) not null,

last_namevarchar(16) not null,

genderchar(1) not null,

hire_datedate 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_noint(11) not null,

birth_datedate not null,

first_namevarchar(14) not null,

last_namevarchar(16) not null,

genderchar(1) not null,

hire_datedate 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_nochar(4) not null,

emp_noint(11) not null,

from_datedate not null,

to_datedate not null,

primary key (emp_no,dept_no));

create tablesalaries(

emp_noint(11) not null,

salaryint(11) not null,

from_datedate not null,

to_datedate 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_noint(11) not null,

dept_nochar(4) not null,

from_datedate not null,

to_datedate not null,

primary key (emp_no,dept_no));

create tableemployees(

emp_noint(11) not null,

birth_datedate not null,

first_namevarchar(14) not null,

last_namevarchar(16) not null,

genderchar(1) not null,

hire_datedate 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_noint(11) not null,

dept_nochar(4) not null,

from_datedate not null,

to_datedate not null,

primary key (emp_no,dept_no));

create tableemployees(

emp_noint(11) not null,

birth_datedate not null,

first_namevarchar(14) not null,

last_namevarchar(16) not null,

genderchar(1) not null,

hire_datedate 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 ...