- •1.1. Технические параметры баз данных
- •1.2. Организация субд
- •1.6. Сетевая и иерархическая модели данных
- •1.7. Case - методы проектирования баз данных
- •1.8. Понятия “сущность” и “взаимосвязь”
- •4. Складывание.
- •5.3. Индексированные файлы
- •5.4. Операции с поиском по неключевым полям
- •6.2. Типы данных в sql
- •Int Число без десятичной точки. Эквивалентно decimal, но без
- •6.3. Обозначения в командах sql
- •6.... Оператор in
- •6.... Оператор between
- •6.... Оператор like
- •6.... Оператор is null
- •7.5... Скалярное выражение на основе выбранных полей
- •7.6... Упорядочение вывода полей
- •7.7.. Объединения нескольких таблиц в запросе
- •7.8.. Создание обьединения
- •7.9..Объединение таблиц через справочную целостность
- •7.10.. Объединения таблиц по равенству значений
- •7.11.. Объединение более двух таблиц
- •7.12. Объединение таблицы с собой
- •8.2. Значения, которые могут выдавать подзапросы
- •8.3. Предикаты с подзапросами являются необратимыми
- •8.4. Использование агрегатных функций в подзапросах
- •8.5. Использование подзапросов которые выдают
- •8.8. Подзапросы в предложении having
- •Insert into Londonstaff
- •Insert into Daytotals (date, total)
- •Insert для этой таблицы. Null - это наиболее широко используемое
- •1009, И Hoffman и Clemens будут также автоматически изменены.
- •Insert Пользователь с этой привилегией может выполнять
- •Insauth Имеет ли пользователь привилегию insert
- •Values ( :id_num, :salesperson, :loc, :comm)
- •Values (:id_num, :salesperson, :loc, :comm);
- •Into :id_num, :salesperson, :loc, :comm
- •Into :salesnum
- •1. Команда выполнилась без ошибки, но не произвела никакого
- •Into :id_num, :salesperson, :loc, :comm;
- •Indicator.
- •Indicator, связывая ее с каждой переменной главного языка, специальным способом, эмулирующим поведение null значений sql.
- •Values (:Id_num, :salesperson, :loc:i_a, :comm:i_b);
- •Indicator. Переменные indicator следуют за другим именами переменных в команде sql, без каких бы то ни было посторонних символов
7.7.. Объединения нескольких таблиц в запросе
Одна из наиболее важных особенностей языка SQL - это способность задавать связи между многочислеными таблицами и выводить информацию из них в терминах этих связей, используя одну команду. Этот вид операции называется объединением.
С целью объединения таблицы перечисляются списком в предложении FROM запроса и отделяются друг от друга запятыми. Предикат запроса может ссылаться к любому столбцу любой связанной таблицы и следовательно, может использоваться для связи между ими. Обычно, в предикате сравниваются значения в столбцах различных таблиц, чтобы определить, удовлетворяет ли WHERE установленному условию.
Полное имя столбца таблицы фактически состоит из имени таблицы, сопровождаемого точкой, и затем имени столбца.
Например,
Salespeople.snum
Salespeople.city
Orders.odate
До этого вы могли опускать имена таблиц потому, что вы запрашивали только одну таблицу одновременно, а SQL достаточно интелектуален, чтобы присвоить соответствующий префикс имени таблицы. Даже когда вы делаете запрос многочисленных таблиц, вы еще можете опускать имена таблиц, если все ее столбцы имеют различные имена. Но это не всегда так бывает. Например, мы можем иметь две типовые таблицы со столбцами, называемыми city. Если мы должны связать эти столбцы( кратковременно ), мы будем должны указать их с именами Salespeople.city или Customers.city, чтобы SQL мог их различать.
7.8.. Создание обьединения
Предположим, что вы хотите поставить в соответствие продавцам заказчиков в том городе, в котором они живут, и увидеть все комбинации продавцов и заказчиков для этого города. Вы будете брать каждого продавца и искать в таблице Заказчиков всех заказчиков того же самого города. Вы могли бы сделать это, введя следующую команду ( вывод показывается ниже ):
SELECT Customers.cname, Salespeople.sname,
Salespeople.city
FROM Salespeople, Customers
WHERE Salespeople.city = Customers.city;
=============== SQL Execution Log ============
| ============================================= |
| cname sname city |
|----------------------------------------------------------|
| Hoffman Peel London |
| Hoffman Peel London |
| Liu Serres San Jose |
| Cisneros Serres San Jose |
| Hoffman Motika London |
| Clemens Motika London |
===================================
Так как поле city имеется и в таблице Salespeople и в таблице
Customers, имена таблиц должны использоваться как префиксы. Хотя
это необходимо только, когда два или более полей имеют одно и то же
имя, в любом случае это хорошая идея включать имя таблицы в обьеди-
нение для лучшего понимания и непротиворечивости..
Что SQL в основном делает в объединении - так это исследует
каждую комбинацию строк двух или более возможных таблиц, и
проверяет эти комбинации по их предикатам.
7.9..Объединение таблиц через справочную целостность
Эта особенность часто используется просто для эксплуатации связей, встроенных в базу данных. В предыдущем примере мы установили связь между двумя таблицами в обьединении. Это прекрасно. Но эти таблицы, уже были соединены через snum поле. Эта связь называется состоянием ссылочной целостности. Используя обьединение можно извлекать данные в терминах
этой связи. Например, чтобы показать имена всех заказчиков соответствующих продавцам, которые их обслуживают, мы будем использовать такой запрос:
SELECT Customers.cname, Salespeople.sname
FROM Customers, Salespeople
WHERE Salespeople.snum = Customers.snum;
Вывод этого запроса:
===== SQL Execution Log ====
| cname sname |
|-----------------------------------------|
| Hoffman Peel |
| Giovanni Axelrod |
| Liu Serres |
| Grass Serres |
| Clemens Peel |
| Cisneros Rifkin |
| Pereira Motika |
=========================
Это пример обьединения, в котором столбцы используются для определения предиката запроса, и в этом случае, snum-столбцы из обеих таблиц, удалены из вывода. Вывод показывает, какие заказчики каким продавцом обслуживаются; значения поля snum, которые устанавливают связь, отсутствуют. Однако, если вы введете их в вывод, то вы должны или удостовериться, что вывод понятен сам по себе или обеспечить коментарий к данным при выводе.