ப10 (Разработка баз данных в Delphi), страница 3

2016-07-31СтудИзба

Описание файла

Документ из архива "Разработка баз данных в Delphi", который расположен в категории "". Всё это находится в предмете "информатика" из , которые можно найти в файловом архиве . Не смотря на прямую связь этого архива с , его также можно найти и в других разделах. Архив можно найти в разделе "рефераты, доклады и презентации", в предмете "информатика, программирование" в общих файлах.

Онлайн просмотр документа "ப10"

Текст 3 страницы из документа "ப10"

Kelly Brown 27000.00

Запрос с предикатом BETWEEN может иметь следующий вид:

SELECT first_name, last_name, salary

FROM employee

WHERE last_name BETWEEN "Nelson" AND "Osborne"
получить список сотрудников,
фамилии которых начинаются
с “Nelson”
и заканчиваются “Osborne”

FIRST_NAME LAST_NAME SALARY

=============== =============== ================

Robert Nelson 105900.00

Carol Nordstrom 42742.50

Sue Anne O'Brien 31275.00

Pierre Osborne 110000.00

Значения, определяющие нижний и верхний диапазоны, могут не являться реальными величинами из базы данных. И это очень удобно - ведь мы не всегда можем указать точные значения диапазонов!

SELECT first_name, last_name, salary

FROM employee

WHERE last_name BETWEEN "Nel" AND "Osb"
получить список сотрудников,
фамилии которых находятся
между “Nel” и “Osb”

FIRST_NAME LAST_NAME SALARY

=============== =============== ================

Robert Nelson 105900.00

Carol Nordstrom 42742.50

Sue Anne O'Brien 31275.00

В данном примере значений “Nel” и “Osb” в базе данных нет. Однако, все сотрудники, входящие в диапазон, в нижней части которого начало фамилий совпадает с “Nel” (т.е. выполняется условие “больше или равно”), а в верхней части фамилия не более “Osb” (т.е. выполняется условие “меньше или равно” - а именно “O”, “Os”, “Osb”), попадут в выборку. Отметим, что при выборке с использованием предиката BETWEEN поле, на которое накладывается диапазон, считается упорядоченным по возрастанию.

Предикат BETWEEN с отрицанием NOT (NOT BETWEEN) позволяет получить выборку записей, указанные поля которых имеют значения меньше нижней границы и больше верхней границы.

SELECT first_name, last_name, hire_date

FROM employee

WHERE hire_date NOT BETWEEN "1-JAN-1989" AND "31-DEC-1993" получить список самых “старых”
и самых “молодых” (по времени
поступления на работу)
сотрудников

FIRST_NAME LAST_NAME HIRE_DATE

=============== ================ ===========

Robert Nelson 28-DEC-1988

Bruce Young 28-DEC-1988

Pierre Osborne 3-JAN-1994

John Montgomery 30-MAR-1994

Mark Guckenheimer 2-MAY-1994

IN

Предикат IN проверяет, входит ли заданное значение, предшествующее ключевому слову “IN” (например, значение столбца или функция от него) в указанный в скобках список. Если заданное проверяемое значение равно какому-либо элементу в списке, то предикат принимает значение true. Разрешено также использовать конструкцию NOT IN.

SELECT first_name, last_name, job_code

FROM employee

WHERE job_code IN ("VP", "Admin", "Finan")
получить список сотрудников,
занимающих должности
“вице-президент”, “администратор”,
“финансовый директор”

FIRST_NAME LAST_NAME JOB_CODE

=============== ================ ========

Robert Nelson VP

Terri Lee Admin

Stewart Hall Finan

Ann Bennet Admin

Sue Anne O'Brien Admin

Mary S. MacDonald VP

Kelly Brown Admin

А вот пример запроса, использующего предикат NOT IN:

SELECT first_name, last_name, job_country

FROM employee

WHERE job_country NOT IN

("USA", "Japan", "England")
получить список сотрудников,
работающих не в США, не в Японии
и не в Великобритании

FIRST_NAME LAST_NAME JOB_COUNTRY

=============== ================ ===============

Claudia Sutherland Canada

Roberto Ferrari Italy

Jacques Glon France

Pierre Osborne Switzerland

LIKE

Предикат LIKE используется только с символьными данными. Он проверяет, соответствует ли данное символьное значение строке с указанной маской. В качестве маски используются все разрешенные символы (с учетом верхнего и нижнего регистров), а также специальные символы:

% - замещает любое количество символов (в том числе и 0),

_ - замещает только один символ.

Разрешено также использовать конструкцию NOT LIKE.

SELECT first_name, last_name

FROM employee

WHERE last_name LIKE "F%" получить список сотрудников,
фамилии которых начинаются с буквы “F”

FIRST_NAME LAST_NAME

=============== ====================

Phil Forest

Pete Fisher

Roberto Ferrari

SELECT first_name, last_name

FROM employee

WHERE first_name LIKE "%er" получить список сотрудников,
имена которых заканчиваются буквами “er”

FIRST_NAME LAST_NAME

=============== ====================

Roger De Souza

Roger Reeves

Walter Steadman

А такой запрос позволяет решить проблему произношения (и написания) имени:

SELECT first_name, last_name

FROM employee

WHERE first_name LIKE "Jacq_es"
найти сотрудника(ов),
в имени которого
неизвестно произношение
буквы перед окончанием “es”

FIRST_NAME LAST_NAME

=============== ====================

Jacques Glon

Что делать, если требуется найти строку, которая содержит указанные выше специальные символы (“%”, “_”) в качестве информационных символов? Есть выход! Для этого с помощью ключевого слова ESCAPE нужно определить так называемый escape‑символ, который, будучи поставленным перед символом “%” или “_”, укажет, что этот символ является информационным. Escape‑символ не может быть символом “\” (обратная косая черта) и, вообще говоря, должен представлять собой символ, никогда не появляющийся в упоминаемом столбце как информационный символ. Часто для этих целей используются символы “@” и “~”.

SELECT first_name, last_name

FROM employee

WHERE first_name LIKE "%@_%" ESCAPE "@"
получить список сотрудников,
в имени которых содержится “_”
(знак подчеркивания)

CONTAINING

Предикат CONTAINING аналогичен предикату LIKE, за исключением того, что он не чувствителен к регистру букв. Разрешено также использовать конструкцию NOT CONTAINING.

SELECT first_name, last_name

FROM employee

WHERE last_name CONTAINING "ne"
получить список сотрудников,
фамилии которых содержат буквы
“ne”, “Ne”, “NE”, “nE”

FIRST_NAME LAST_NAME

=============== ====================

Robert Nelson

Ann Bennet

Pierre Osborne

IS NULL

В SQL-запросах NULL означает, что значение столбца неизвестно. Поисковые условия, в которых значение столбца сравнивается с NULL, всегда принимают значение unknown (и, соответственно, приводят к ошибке), в противоположность true или false, т.е.

WHERE dept_no = NULL

или даже

WHERE NULL = NULL.

Предикат IS NULL принимает значение true только тогда, когда выражение слева от ключевых слов “IS NULL” имеет значение null (пусто, не определено). Разрешено также использовать конструкцию IS NOT NULL, которая означает “не пусто”, “имеет какое-либо значение”.

SELECT department, mngr_no

FROM department

WHERE mngr_no IS NULL получить список отделов,
в которых еще не назначены
начальники

DEPARTMENT MNGR_NO

========================= =======

Marketing

Software Products Div.

Software Development

Field Office: Singapore

Предикаты EXIST, ANY, ALL, SOME, SINGULAR мы рассмотрим в разделе, рассказывающем о подзапросах.

Логические операторы

К логическим операторам относятся известные операторы AND, OR, NOT, позволяющие выполнять различные логические действия: логическое умножение (AND, “пересечение условий”), логическое сложение (OR, “объединение условий”), логическое отрицание (NOT, “отрицание условий”). В наших примерах мы уже применяли оператор AND. Использование этих операторов позволяет гибко “настроить” условия отбора записей.

Оператор AND означает, что общий предикат будет истинным только тогда, когда условия, связанные по “AND”, будут истинны.

Оператор OR означает, что общий предикат будет истинным, когда хотя бы одно из условий, связанных по “OR”, будет истинным.

Оператор NOT означает, что общий предикат будет истинным, когда условие, перед которым стоит этот оператор, будет ложным.

В одном предикате логические операторы выполняются в следующем порядке: сначала выполняется оператор NOT, затем - AND и только после этого - оператор OR. Для изменения порядка выполнения операторов разрешается использовать скобки.

SELECT first_name, last_name, dept_no,

job_code, salary

FROM employee

WHERE dept_no = 622

OR job_code = "Eng"

AND salary <= 40000

ORDER BY last_name получить список служащих,
занятых в отделе 622
или
на должности “инженер” с зарплатой
не выше 40000

FIRST_NAME LAST_NAME DEPT_NO JOB_CODE SALARY

============ ============= ======= ======== ===========

Jennifer M. Burbank 622 Eng 53167.50

Phil Forest 622 Mngr 75060.00

T.J. Green 621 Eng 36000.00

Mark Guckenheimer 622 Eng 32000.00

John Montgomery 672 Eng 35000.00

Bill Parker 623 Eng 35000.00

Willie Stansbury 120 Eng 39224.06

SELECT first_name, last_name, dept_no,

job_code, salary

FROM employee

WHERE (dept_no = 622

OR job_code = "Eng")

AND salary <= 40000

ORDER BY last_name получить список служащих,
занятых в отделе 622
или на должности “инженер”,
зарплата которых не выше 40000

FIRST_NAME LAST_NAME DEPT_NO JOB_CODE SALARY

============ ============= ======= ======== ===========

T.J. Green 621 Eng 36000.00

Mark Guckenheimer 622 Eng 32000.00

John Montgomery 672 Eng 35000.00

Bill Parker 623 Eng 35000.00

Willie Stansbury 120 Eng 39224.06

Преобразование типов (CAST)

В SQL имеется возможность преобразовать значение столбца или функции к другому типу для более гибкого использования операций сравнения. Для этого используется функция CAST.

Типы данных могут быть конвертированы в соответствии со следующей таблицей:

Из типа данных В тип данных

---------------------------------------

NUMERIC CHAR, VARCHAR, DATE

CHAR, VARCHAR NUMERIC, DATE

DATE CHAR, VARCHAR, DATE

SELECT first_name, last_name, dept_no

FROM employee

WHERE CAST(dept_no AS char(20))

CONTAINING "00" получить список сотрудников,
занятых в отделах,
номера которых содержат “00”

FIRST_NAME LAST_NAME DEPT_NO

=============== ==================== =======

Robert Nelson 600

Terri Lee 000

Stewart Hall 900

Walter Steadman 900

Mary S. MacDonald 100

Oliver H. Bender 000

Kelly Brown 600

Michael Yanowski 100

Изменение порядка выводимых строк (ORDER BY)

Порядок выводимых строк может быть изменен с помощью опционального (дополнительного) предложения ORDER BY в конце SQL-запроса. Это предложение имеет вид:

ORDER BY [ASC | DESC]

Порядок строк может задаваться одним из двух способов:

  • именами столбцов

  • номерами столбцов.

Способ упорядочивания определяется дополнительными зарезервированными словами ASC и DESC. Способом по умолчанию - если ничего не указано - является упорядочивание “по возрастанию” (ASC). Если же указано слово “DESC”, то упорядочивание будет производиться “по убыванию”.

Подчеркнем еще раз, что предложение ORDER BY должно указываться в самом конце запроса.

Упорядочивание с использованием имен столбцов

SELECT first_name, last_name, dept_no,

job_code, salary

FROM employee

ORDER BY last_name получить список сотрудников,
упорядоченный по фамилиям
в алфавитном порядке

FIRST_NAME LAST_NAME DEPT_NO JOB_CODE SALARY

============ ============= ======= ======== ===========

Janet Baldwin 110 Sales 61637.81

Oliver H. Bender 000 CEO 212850.00

Ann Bennet 120 Admin 22935.00

Dana Bishop 621 Eng 62550.00

Kelly Brown 600 Admin 27000.00

Jennifer M. Burbank 622 Eng 53167.50

Kevin Cook 670 Dir 111262.50

Roger De Souza 623 Eng 69482.62

Roberto Ferrari 125 SRep 99000000.00

...

SELECT first_name, last_name, dept_no,

job_code, salary

FROM employee

ORDER BY last_name DESC получить список сотрудников,
упорядоченный по фамилиям
в порядке, обратном алфавитному

FIRST_NAME LAST_NAME DEPT_NO JOB_CODE SALARY

============ ============= ======= ======== ===========

Katherine Young 623 Mngr 67241.25

Bruce Young 621 Eng 97500.00

Michael Yanowski 100 SRep 44000.00

Takashi Yamamoto 115 SRep 7480000.00

Randy Williams 672 Mngr 56295.00

K. J. Weston 130 SRep 86292.94

Claudia Sutherland 140 SRep 100914.00

Walter Steadman 900 CFO 116100.00

Willie Stansbury 120 Eng 39224.06

Roger Reeves 120 Sales 33620.62

...

Столбец, определяющий порядок вывода строк, не обязательно дожен присутствовать в списке выбираемых элементов (столбцов):

SELECT first_name, last_name, dept_no,

job_code

FROM employee

ORDER BY salary получить список сотрудников,
упорядоченный по их зарплате

FIRST_NAME LAST_NAME DEPT_NO JOB_CODE

=============== =============== ======= ========

Ann Bennet 120 Admin

Kelly Brown 600 Admin

Sue Anne O'Brien 670 Admin

Mark Guckenheimer 622 Eng

Roger Reeves 120 Sales

Bill Parker 623 Eng

Упорядочивание с использованием номеров столбцов

SELECT first_name, last_name, dept_no,

job_code, salary * 1.1

FROM employee

ORDER BY 5 получить список сотрудников,
упорядоченный по их зарплате
с 10% надбавкой

FIRST_NAME LAST_NAME DEPT_NO JOB_CODE

============ ============= ======= ======== ===========

Ann Bennet 120 Admin 25228.5

Kelly Brown 600 Admin 29700

Sue Anne O'Brien 670 Admin 34402.5

Mark Guckenheimer 622 Eng 35200

Roger Reeves 120 Sales 36982.6875

Bill Parker 623 Eng 38500

Допускается использование нескольких уровней вложенности при упорядочивании выводимой информации по столбцам; при этом разрешается смешивать оба способа.

SELECT first_name, last_name, dept_no,

job_code, salary * 1.1

FROM employee

ORDER BY dept_no, 5 DESC, last_name
получить список сотрудников,
упорядоченный сначала по
номерам отделов,
в отделах - по убыванию их
зарплаты (с 10%),
а в пределах одной зарплаты - по фамилиям

FIRST_NAME LAST_NAME DEPT_NO JOB_CODE

=========== ========== ======= ======== ===============

Oliver H. Bender 000 CEO 234135

Terri Lee 000 Admin 59172.3

Mary S. MacDonald 100 VP 122388.75

Michael Yanowski 100 SRep 48400.000000001

Luke Leung 110 SRep 75685.5

Janet Baldwin 110 Sales 67801.59375

Takashi Yamamoto 115 SRep 8228000.0000001

Yuki Ichida 115 Eng 6600000.0000001

Устранение дублирования (модификатор DISTINCT)

Дублированными являются такие строки в результирующей таблице, в которых идентичен каждый столбец.

Иногда (в зависимости от задачи) бывает необходимо устранить все повторы строк из результирующего набора. Этой цели служит модификатор DISTINCT. Данный модификатор может быть указан только один раз в списке выбираемых элементов и действует на весь список.

SELECT job_code

FROM employee получить список должностей сотрудников

JOB_CODE

========

VP

Eng

Eng

Mktg

Mngr

SRep

Admin

Finan

Mngr

Mngr

Eng

...

Данный пример некорректно решает задачу “получения” списка должностей сотрудников предприятия, так как в нем имеются многочисленные повторы, затрудняющие восприятие информации. Тот же запрос, включающий модификатор DISTINCT, устраняющий дублирование, дает верный результат.

SELECT DISTINCT job_code

FROM employee получить список должностей сотрудников

JOB_CODE

========

Admin

CEO

CFO

Dir

Doc

Eng

Finan

Mktg

Mngr

PRel

SRep

Sales

VP

Два следующих примера показывают, что модификатор DISTINCT действует на всю строку сразу.

SELECT first_name, last_name

FROM employee

WHERE first_name = "Roger" получить список служащих,
имена которых - Roger

FIRST_NAME LAST_NAME

=============== ====================

Roger De Souza

Roger Reeves

SELECT DISTINCT first_name, last_name

FROM employee

WHERE first_name = "Roger" получить список служащих,
имена которых - Roger

FIRST_NAME LAST_NAME

=============== ====================

Roger De Souza

Roger Reeves

Соединение (JOIN)

Операция соединения используется в языке SQL для вывода связанной информации, хранящейся в нескольких таблицах, в одном запросе. В этом проявляется одна из наиболее важных особенностей запросов SQL - способность определять связи между многочисленными таблицами и выводить информацию из них в рамках этих связей. Именно эта операция придает гибкость и легкость языку SQL.

После изучения этого раздела мы будем способны:

  • соединять данные из нескольких таблиц в единую результирующую таблицу;

  • задавать имена столбцов двумя способами;

  • записывать внешние соединения;

  • создавать соединения таблицы с собой.

Операции соединения подразделяются на два вида - внутренние и внешние. Оба вида соединений задаются в предложении WHERE запроса SELECT с помощью специального условия соединения. Внешние соединения (о которых мы поговорим позднее) поддерживаются стандартом ANSI-92 и содержат зарезервированное слово “JOIN”, в то время как внутренние соединения (или просто соединения) могут задаваться как без использования такого слова (в стандарте ANSI-89), так и с использованием слова “JOIN” (в стандарте ANSI-92).

Связывание производится, как правило, по первичному ключу одной таблицы и внешнему ключу другой таблицы - для каждой пары таблиц. При этом очень важно учитывать все поля внешнего ключа, иначе результат будет искажен. Соединяемые поля могут (но не обязаны!) присутствовать в списке выбираемых элементов. Предложение WHERE может содержать множественные условия соединений. Условие соединения может также комбинироваться с другими предикатами в предложении WHERE.

Внутренние соединения

Внутреннее соединение возвращает только те строки, для которых условие соединения принимает значение true.

SELECT first_name, last_name, department

FROM employee, department

WHERE job_code = "VP" получить список сотрудников,
состоящих в должности “вице-
президент”, а также названия
их отделов

FIRST_NAME LAST_NAME DEPARTMENT

=============== ================ ======================

Robert Nelson Corporate Headquarters

Mary S. MacDonald Corporate Headquarters

Robert Nelson Sales and Marketing

Mary S. MacDonald Sales and Marketing

Robert Nelson Engineering

Mary S. MacDonald Engineering

Robert Nelson Finance

Mary S. MacDonald Finance

...

Этот запрос (“без соединения”) возвращает неверный результат, так как имеющиеся между таблицами связи не задействованы. Отсюда и появляется дублирование информации в результирующей таблице. Правильный результат дает запрос с использованием операции соединения:

SELECT first_name, last_name, department

FROM employee, department

WHERE job_code = "VP"

AND employee.dept_no = department.dept_no


имена таблиц

получить список сотрудников,
состоящих в должности “вице-
президент”, а также названия
их отделов

FIRST_NAME LAST_NAME DEPARTMENT

=============== ================ ======================

Robert Nelson Engineering

Mary S. MacDonald Sales and Marketing

В вышеприведенном запросе использовался способ непосредственного указания таблиц с помощью их имен. Возможен (а иногда и просто необходим) также способ указания таблиц с помощью алиасов (псевдонимов). При этом алиасы определяются в предложении FROM запроса SELECT и представляют собой любой допустимый идентификатор, написание которого подчиняется таким же правилам, что и написание имен таблиц. Потребность в алиасах таблиц возникает тогда, когда названия столбцов, используемых в условиях соединения двух (или более) таблиц, совпадают, а названия таблиц слишком длинны...

Замечание 1: в одном запросе нельзя смешивать использование написания имен таблиц и их алиасов.

Замечание 2: алиасы таблиц могут совпадать с их именами.

SELECT first_name, last_name, department

F ROM employee e, department d

WHERE job_code = "VP"

AND e.dept_no = d.dept_no


алиасы таблиц

получить список сотрудников,
состоящих в должности “вице-
президент”, а также названия
их отделов

FIRST_NAME LAST_NAME DEPARTMENT

=============== ================ ======================

Robert Nelson Engineering

Mary S. MacDonald Sales and Marketing

А вот пример запроса, соединяющего сразу три таблицы:

SELECT first_name, last_name, job_title,

department

FROM employee e, department d, job j

WHERE d.mngr_no = e.emp_no

AND e.job_code = j.job_code

AND e.job_grade = j.job_grade

AND e.job_country = j.job_country
получить список сотрудников
с названиями их должностей
и названиями отделов

FIRST_NAME LAST_NAME JOB_TITLE DEPARTMENT

========== ============ ======================= ======================

Robert Nelson Vice President Engineering

Phil Forest Manager Quality Assurance

K. J. Weston Sales Representative Field Office: East Coast

Katherine Young Manager Customer Support

Chris Papadopoulos Manager Research and Development

Janet Baldwin Sales Co-ordinator Pacific Rim Headquarters

Roger Reeves Sales Co-ordinator European Headquarters

Walter Steadman Chief Financial Officer Finance

В данном примере последние три условия необходимы в силу того, что первичный ключ в таблице JOB состоит из трех полей - см. рис.1.

Мы рассмотрели внутренние соединения с использованием стандарта ANSI-89. Теперь опишем новый (ANSI-92) стандарт:

  • условия соединения записываются в предложении FROM, в котором слева и справа от зарезервированного слова “JOIN” указываются соединяемые таблицы;

  • условия поиска, основанные на правой таблице, помещаются в предложение ON;

  • условия поиска, основанные на левой таблице, помещаются в предложение WHERE.

SELECT first_name, last_name, department

FROM employee e JOIN department d

ON e.dept_no = d.dept_no

AND department = "Customer Support"

WHERE last_name starting with "P"
получить список служащих
(а заодно и название отдела),
являющихся сотрудниками отдела
“Customer Support”, фамилии кото-
рых начинаются с буквы “P”

FIRST_NAME LAST_NAME DEPARTMENT

============= =============== ===================

Leslie Phong Customer Support

Bill Parker Customer Support

Самосоединения

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

SELECT one.last_name, two.last_name,

one.hire_date

FROM employee one, employee two

WHERE one.hire_date = two.hire_date

AND one.emp_no < two.emp_no
получить пары фамилий сотрудников,
которые приняты на работу в один
и тот же день

LAST_NAME LAST_NAME HIRE_DATE

==================== ==================== ===========

Nelson Young 28-DEC-1988

Reeves Stansbury 25-APR-1991

Bishop MacDonald 1-JUN-1992

Brown Ichida 4-FEB-1993

SELECT d1.department, d2.department, d1.budget

FROM department d1, department d2

WHERE d1.budget = d2.budget

AND d1.dept_no < d2.dept_no
получить список пар отделов с
одинаковыми годовыми бюджетами

DEPARTMENT DEPARTMENT BUDGET

======================== ========================= =========

Software Development Finance 400000.00

Field Office: East Coast Field Office: Canada 500000.00

Field Office: Japan Field Office: East Coast 500000.00

Field Office: Japan Field Office: Canada 500000.00

Field Office: Japan Field Office: Switzerland 500000.00

Field Office: Singapore Quality Assurance 300000.00

Field Office: Switzerland Field Office: East Coast 500000.00

Внешние соединения

Напомним, что внутреннее соединение возвращает только те строки, для которых условие соединения принимает значение true. Иногда требуется включить в результирующий набор большее количество строк.

Вспомним, запрос вида

SELECT first_name, last_name, department

FROM employee e, department d

WHERE e.dept_no = d.dept_no

возвращает только те строки, для которых условие соединения (e.dept_no = d.dept_no) принимает значение true.

Внешнее соединение возвращает все строки из одной таблицы и только те строки из другой таблицы, для которых условие соединения принимает значение true. Строки второй таблицы, не удовлетворяющие условию соединения (т.е. имеющие значение false), получают значение null в результирующем наборе.

Существует два вида внешнего соединения: LEFT JOIN и RIGHT JOIN.

В левом соединении (LEFT JOIN) запрос возвращает все строки из левой таблицы (т.е. таблицы, стоящей слева от зарезервированного словосочетания “LEFT JOIN”) и только те из правой таблицы, которые удовлетворяют условию соединения. Если же в правой таблице не найдется строк, удовлетворяющих заданному условию, то в результате они замещаются значениями null.

Для правого соединения - все наоборот.

SELECT first_name, last_name, department

FROM employee e LEFT JOIN department d

ON e.dept_no = d.dept_no
получить список сотрудников
и название их отделов,
включая сотрудников, еще
не назначенных ни в какой отдел

FIRST_NAME LAST_NAME DEPARTMENT

=============== ============== =====================

Robert Nelson Engineering

Bruce Young Software Development

Kim Lambert Field Office: East Coast

Leslie Johnson Marketing

Phil Forest Quality Assurance

...

В данном запросе все сотрудники оказались распределены по отделам, иначе названия отделов заместились бы значением null.

А вот пример правого соединения:

SELECT first_name, last_name, department

FROM employee e RIGHT JOIN department d

ON e.dept_no = d.dept_no
получить список сотрудников
и название их отделов,
включая отделы, в которые еще
не назначены сотрудники

FIRST_NAME LAST_NAME DEPARTMENT

=============== ============= =========================

Terri Lee Corporate Headquarters

Oliver H. Bender Corporate Headquarters

Mary S. MacDonald Sales and Marketing

Michael Yanowski Sales and Marketing

Robert Nelson Engineering

Kelly Brown Engineering

Stewart Hall Finance

Walter Steadman Finance

Leslie Johnson Marketing

Carol Nordstrom Marketing

Software Products Div.

Bruce Young Software Development

...

В результирующий набор входит и отдел “Software Products Div.” (а также отдел “Field Office: Singapore”, не представленный здесь), в котором еще нет ни одного сотрудника.

36

Урок 10: Основы языка SQL


Свежие статьи
Популярно сейчас
Зачем заказывать выполнение своего задания, если оно уже было выполнено много много раз? Его можно просто купить или даже скачать бесплатно на СтудИзбе. Найдите нужный учебный материал у нас!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
5167
Авторов
на СтудИзбе
438
Средний доход
с одного платного файла
Обучение Подробнее