2015-01-11 16 views
-1

У меня есть назначение на БД. У меня возникают проблемы с моими запросами. Я новичок в SQL. Вот мои таблицы:SQL-запросы для базы данных

CREATE TABLE Employee (
employee_name varchar(20) NOT NULL PRIMARY KEY, 
street varchar(30) NOT NULL, 
city varchar(20) NOT NULL 
) 

CREATE TABLE Works 
(
employee_name varchar(20) NOT NULL, 
department_name varchar(20) NOT NULL, 
title varchar(10) NOT NULL, 
salary int NOT NULL, 
PRIMARY KEY (employee_name), 
FOREIGN KEY (employee_name) REFERENCES Employee, 
FOREIGN KEY (department_name) REFERENCES Department 
) 

CREATE TABLE Department 
(
department_name varchar(20), 
cityvarchar(20), 
PRIMARY KEY (department_name) 
) 

CREATE table Manages(
employee_name varchar(20) not null, 
manager_name varchar (20) not null, 
PRIMARY KEY(employee_name), 
FOREIGN KEY(employee_name) REFERENCES Employee 
) 

имена поиск сотрудника, которые живут в разных городах, от их отдела. Вот мой код:

SELECT E.employee_name 
FROM Employee E 
JOIN Department D 
ON E.city = D.city 
WHERE E.city <> 'Roma'; 

имена поиск сотрудника, которые живут в том же городе и на той же улице со своими менеджерами. Вот мой код:

SELECT E.employee_name 
FROM Employee E 
INNER JOIN Department D 
ON E.city = D.city 
INNER JOIN Manages M 
ON E.employee_name = M.employee_name 
WHERE city='Roma' AND street='Main street'; 

Что я делаю неправильно? Спасибо заранее! :)

+0

Я не думаю, что «Рома» и «Главная улица» являются частью вопроса, на который вы пытаетесь ответить ... –

+0

@NicolaFerraro Да, вы правы. Я ясно вижу свою ошибку. Спасибо :) – XhensB

+0

Вам необходимо присоединиться к внешним ключам. Для вашего первого вопроса рассмотрите определения таблиц; что соединяет таблицу сотрудников с таблицей работ, а затем, что объединяет таблицу работ в таблицу отдела? Присоединитесь к этим клавишам и используйте предложение «Где» для фильтрации. –

ответ

0

Вот как вы могли бы выполнить первую задачу (сотрудники, которые живут в городе, кроме того, что их отдел):

SELECT E.employee_name 
    FROM Employee E JOIN Works W 
    ON E.employee_name = W.employee_name 
    JOIN Department D 
    ON W.departent_name = D.department_name 
WHERE D.city <> E.city; 

Для того, чтобы определить отдел, в котором данный работник работает, необходимо присоединиться к таблице Works.

Я должен признать, что вертикальное разбиение данных сотрудника на таблицы Employee и Works немного нечетное - нет никакой реальной причины, чтобы эти две отдельные таблицы (это соотношение 1-1). В этом случае Manages не обязательно должна быть отдельной таблицей.

Надеюсь, это может привести вас к правильному пути для второго запроса.

+0

Это работает для меня. Любые советы о том, где я могу найти хорошие учебники в Интернете? Спасибо вам за помощь :) – XhensB

Смежные вопросы