Задание для на позицию Node.js разработчика

Заинтересовало ваше резюме, предварительно хотелось бы уточнить ваш уровень владения SQL, который для наших задач критичен, ответьте, пожалуйста, вот на такую задачку:

Дано три таблицы:

Таблица А: имена пользователей
id | name
-------------
1 | Василий
2 | Егор
3 | Николай
5 | Степан

Таблица Б: отчества пользователей
id | patronymic
1 | Харитонович
2 | Егорьевич
4 | Николаевич
5 | Тимофеевич

Таблица В: фамилии пользователей
id | surname
1 | Пупкин
2 | Егоров
5 | Разин
6 | Пихтин

Напишите три SQL запроса:

1) который выводит пользователей с полностью заполненными данными;

2) который выводит пользователей, у которых не заполнено какое-либо поле (имя, отчество, фамилия).

3) выводит фамилию и имя пользователя по его имени.


Решение:

-- Подготовительная часть

CREATE TABLE user_names
( id number(2) NOT NULL,
  user_name varchar2(50) NOT NULL
);


CREATE TABLE user_middle_names
( id number(2) NOT NULL,
  user_middle_name varchar2(50) NOT NULL
);

CREATE TABLE user_last_names
( id number(2) NOT NULL,
  user_last_name varchar2(50) NOT NULL
);


INSERT INTO user_names (id, user_name) VALUES (1, 'Василий');
INSERT INTO user_names (id, user_name) VALUES (2, 'Егор');
INSERT INTO user_names (id, user_name) VALUES (3, 'Николай');
INSERT INTO user_names (id, user_name) VALUES (5, 'Степан');

select * from user_names;


INSERT INTO user_middle_names (id, user_middle_name) VALUES (1, 'Харитонович');
INSERT INTO user_middle_names (id, user_middle_name) VALUES (2, 'Егорьевич');
INSERT INTO user_middle_names (id, user_middle_name) VALUES (4, 'Николаевич');
INSERT INTO user_middle_names (id, user_middle_name) VALUES (5, 'Тимофеевич');


select * from user_middle_names;


INSERT INTO user_last_names (id, user_last_name) VALUES (1, 'Пупкин');
INSERT INTO user_last_names (id, user_last_name) VALUES (2, 'Егоров');
INSERT INTO user_last_names (id, user_last_name) VALUES (5, 'Разин');
INSERT INTO user_last_names (id, user_last_name) VALUES (6, 'Пихтин');


select * from user_last_names;

---------------------------------------------------------------------------------
-- Задание

-- 1) который выводит пользователей с полностью заполненными данными;

select user_last_names.user_last_name, user_names.user_name, user_middle_names.user_middle_name
from user_last_names, user_names, user_middle_names
where user_last_names.id = user_names.id
and user_last_names.id = user_middle_names.id

-- 2) который выводит пользователей, у которых не заполнено какое-либо поле (имя, отчество, фамилия).

select user_last_name, user_name, user_middle_name
from (

    SELECT user_last_names.user_last_name, user_names.user_name, user_middle_names.user_middle_name
    FROM user_last_names
    FULL OUTER JOIN user_names ON user_last_names.id=user_names.id
    FULL OUTER JOIN user_middle_names ON user_last_names.id=user_middle_names.id

)

where
user_last_name is null OR user_name is null  OR user_middle_name is null


-- 3) выводит фамилию и имя пользователя по его имени.

select user_last_name, user_name
from (

    SELECT user_last_names.user_last_name, user_names.user_name, user_middle_names.user_middle_name
    FROM user_last_names
    FULL OUTER JOIN user_names ON user_last_names.id=user_names.id
    FULL OUTER JOIN user_middle_names ON user_last_names.id=user_middle_names.id

)
where user_name = 'Егор';


Oracle SQL Interview questions


Oracle SQL Interview questions


Oracle SQL Interview questions

Наверное, можно сделать лушче!



Есть вопросы которые следует добавить? Можно даже написать в какой компании, что спрашивали.

Обратная связь:
Marley