Иллюстрированный самоучитель по SQL для начинающих

Реляционные операторы

Заполните таблицы какими-либо взятыми для примера данными.

EmpID FName LName City Phone Employ Salary BONUS
1 Whitey Ford Orange 555-1001 1 33000 10000
2 Don Larson Newark 555-3221 2 18000 2000
3 Sal Maglie Nutley 555-6905 3 24000 5000
4 Bob Turley Passaic 555-8908 4 22000 7000

Создайте виртуальную таблицу с помощью следующего запроса:

SELECT *
FROM EMPLOYEE, COMPENSATION;

Вот что вышло:

EmpID FName LName City Phone Employ Salary Bonus
1 Whitey Ford Orange 555-1001 1 33000 10000
1 Whitey Ford Orange 555-1001 2 18000 2000
1 Whitey Ford Orange 555-1001 3 24000 5000
1 Whitey Ford Orange 555-1001 4 22000 7000
2 Don Larson Newark 555-3221 1 33000 10000
2 Don Larson Newark 555-3221 2 18000 2000
2 Don Larson Newark 555-3221 3 24000 5000
2 Don Larson Newark 555-3221 4 22000 7000
3 Sal Maglie Nutley 555-6905 1 33000 10000
3 Sal Maglie Nutley 555-6905 2 18000 2000
3 Sal Maglie Nutley 555-6905 3 24000 5000
3 Sal Maglie Nutley 555-6905 4 22000 7000
4 Bob Turley Passaic 555-8908 1 33000 10000
4 Bob Turley Passaic 555-8908 2 18000 2000
4 Bob Turley Passaic 555-8908 3 24000 5000
4 Bob Turley Passaic 555-8908 4 22000 7000

В получившейся таблице, представляющей собой декартово произведение таблиц EMPLOYEE и COMPENSATION, имеется значительный излишек данных. Кроме того, эта таблица не имеет большого смысла. В ней каждая строка из таблицы EMPLOYEE добавляется к каждой строке из таблицы COMPENSATION. Единственными строками в этой таблице, передающими содержательную информацию, являются те, в которых число из столбца EmpID, взятого из таблицы EMPLOYEE, равняется числу из столбца Employ, взятого из таблицы COMPENSATION. В этих строках имя, фамилия и адрес сотрудника объединены с выплатами того же сотрудника.

Когда вы пытаетесь получить из множества таблиц полезную информацию, то декартово произведение, созданное с помощью простого объединения, почти никогда не бывает тем, что вам нужно. Впрочем, почти всегда первым шагом к тому, что вам нужно, бывает декартово произведение. Отфильтровывать из объединения ненужные строки можно с помощью ограничений, указываемых в предложении WHERE. Самым распространенным объединением, использующим фильтрующее предложение WHERE, является объединение, основанное на равенстве.

Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.