2016-01-28 4 views
-1
SELECT idemployee, lastname, firstname, 
(SELECT namedep FROM department 
WHERE numdep = 120) depname 
FROM employee 
WHERE numdep = 120; 

Что возвращает заявление? Как вложенный выбор влияет на результат?oracle sql inested select in select

ответ

0

Это действительно простой запрос. Без примеров таблиц и данных в них мы не можем точно указать, что будет возвращать запрос, но это должно быть что-то вроде этого.

idemployee | lastname | имя пользователя | depname

1 | Смит | Джон | Сантехника

2 | Доу | Джейн | Санитария

Нарушение: SELECT namedep ОТ отдела ГДЕ numdep = 120, похоже, получает название отдела для отдела № 120. Это будет отображаться в последнем столбце для каждой строки основного запроса.

ВЫБРАТЬ idemployee, имя, фамилия работника FROM WHERE numdep = 120, кажется, просто выбрав идентификатор сотрудника, фамилию и имя из таблицы сотрудников для каждого в отделе 120.

Вы могли бы написать это гораздо больше, просто как

SELECT e.idemployee Employee_ID, e.lastname, e.firstname, d.namedep Department_name 
FROM employee e inner join department d on e.numdep = d.numdep 
WHERE d.numdep = 120 

Это вернет те же результаты. Было бы гораздо более безопасным. Также было бы намного проще перейти на работу для разных отделов, нескольких отделов или всех отделов.

Я просто присоединился к таблицам вместе на основе общего столбца, numdep и выбрал то, что я хотел от таблицы. Я также добавил псевдонимы (e, d), поэтому мне не пришлось набирать сотрудников и отдел для конкретной таблицы, на которую я ссылался.

+0

thank you.it очень полезно – user4349397

1

Это называется коррелированным подзапросом. Это более обычно пишется как Явные:

SELECT e.idemployee, e.lastname, e.firstname, d.namedep 
FROM employee e left join 
    department d 
    on e.numdep = d.numdep 
WHERE e.numdep = 120; 

Эти две формулировки не совсем то же самое, но в этом случае они, вероятно, возвращают те же результаты.

+0

Не могли бы вы привести мне пример результата? – user4349397