中級エンジニア向けの基本的なSQLテストの質問

1.従業員の氏名、電子メール、電話番号を確認します

SELECT
concat(first_name,',',last_name),email,phone_int
 //将employees表的所有员工的last_name和first_name拼接起来作为Name
FROM employees;

2.全従業員の氏名、月給、年俸(月給* 12)を問い合わせる

SELECT
first_name,last_name,salary,salary*12 
FROM employees;

3.全従業員の氏名、月給、年末ボーナスを照会します(年収* Commission_pct)

SELECT
first_name,last_name,salary,salary*12*ifnull(commission_pct,0)
//IFNULL函数是MySQL控制流函数之一,它接受两个参数,如果不是NULL,则返回第一个参数。否则,IFNULL函数返回第二个参数。
//佣金百分比 (CommissionPCT)但是佣金百分比,数据库里employees表里的一个列。
 FROM employees;

4.どの部門とポジションに従業員がいるかを確認します

SELECT DISTINCT department_id,job_id from employees WHERE department_id is not null
//SELECT DISTINCT用于返回唯一不同的值

5。1999年以降に入社した従業員の情報を照会する

SELECT first_name,last_name,hire_date FROM employees WHERE year(hire_date) >= '1999'

6つ目は、会社の上司情報を問い合わせる

SELECT first_name,last_name FROM employees WHERE manager_id IS NULL

7.すべての従業員情報を照会し、部門および年俸で降順で並べ替えます。

SELECT first_name,last_name,salary*12 as total FROM employees ORDER BY department_id,total DESC
//ORDER BY 关键字用于对结果集按照一个列或者多个列进行排列。
//ORDER BY 关键字默认按照升序进行排序。DESC降序

8.ユーザー名を暗号化し、従業員のフルネームの最初の3桁を保持し、中央の4桁を*に置き換えます。名前に余分な文字がある場合は、それを保持します。

SELECT concat(RPAD(substring(concat(first_name,last_name),1,3),7,'*'),
SUBSTRING(concat(first_name,last_name),8)) 
FROM employees

9.従業員の名前と全額の給与を計算します。

SELECT first_name,last_name,salary,salary*12*(1+ifnull(commission_pct,0)) FROM employees

10.従業員の部門IDを照会します。部門がない場合は、「未割り当て部門」と印刷します。

SELECT first_name,last_name,ifnull(department_id,'未分配部门') FROM employees

11.各部門の平均給与を照会します

SELECT department_id,AVG(salary) FROM employees WHERE department_id is not null GROUP BY department_id 

12.平均賃金が8000を超える部門とその平均賃金を照会します。

SELECT department_id,AVG(salary) FROM employees WHERE department_id is not null GROUP BY department_id HAVING AVG(salary)>=8000

13、従業員が転職した回数を問い合わせる

SELECT employee_id,COUNT(employee_id) FROM job_history GROUP BY employee_id

14. 1995年、96年、97年、および98年に何人の人が入社したかを問い合わせます

SELECT year(hire_date),count(employee_id)
FROM employees
WHERE YEAR(hire_date) in ('1995','1996','1997','1998')
GROUP BY YEAR(hire_date)

15.従業員名、従業員ID、および従業員が属する部門を出力します

SELECT first_name,last_name,department_name FROM employees e JOIN departments d ON e.department_id = d.department_id

16. employee_id、first_name、を含む従業員情報を出力します

    department_id,  department_name   location_id     city
SELECT e.employee_id,e.first_name,d.department_id,d.department_name,l.location_id,l.city
FROM employees e JOIN departments d ON e.department_id = d.department_id JOIN locations l ON d.location_id = l.location_id

17. EMPLOYEESテーブルのすべての給与は、JOB_GRADESテーブルの最低給与と最高給与の間にあります。

SELECT e.first_name,e.last_name,e.salary
FROM employees e,job_grades j
WHERE e.salary BETWEEN j.lowest_sal AND j.highest_sal
SELECT e.first_name,e.last_name,e.salary
FROM employees e JOIN job_grades j ON e.salary BETWEEN j.lowest_sal AND j.highest_sal

18.ボーナス付きのすべての従業員の名前、部門、住所、および都市を照会します

SELECT e.employee_id,e.first_name,d.department_id,d.department_name,l.location_id,l.city
FROM employees e JOIN departments d ON e.department_id = d.department_id JOIN locations l ON d.location_id = l.location_id
WHERE e.commission_pct IS NOT NULL

19.last_nameが「Ki」である従業員のマネージャー情報を照会します。

SELECT first_name,last_name FROM employees WHERE employee_id IN (SELECT manager_id FROM employees WHERE last_name LIKE 'Ki%')
//IN操作符允许where子句中规定多个值
//LIKE操作符用于WHERE子句中搜索列中的指定模式

20、会社の最低給与の従業員情報を照会します

SELECT first_name,last_name,salary FROM employees WHERE salary = (SELECT MIN(salary) FROM employees)

21。1999年以降に会社の全従業員の中で最も給与が高い従業員に問い合わせる

SELECT first_name,last_name,hire_date,salary
FROM employees WHERE salary=
(SELECT MAX(salary) FROM employees WHERE year(hire_date)='1999')
AND year(hire_date) = '1999'
//WHERE子句用于过滤记录

.22.ST_CLERKを実行した従業員の情報を照会します

SELECT e.first_name,e.last_name,j.job_id FROM employees e JOIN job_history j ON e.employee_id = j.employee_id WHERE j.job_id = 'ST_CLERK'

おすすめ

転載: blog.csdn.net/weixin_44051191/article/details/109294387