Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
SQL.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
327.17 Кб
Скачать

Операция inner join

Комбинирует записи из таблиц-источников в выражении FROM. Формат

FROM table1 INNER JOIN table2 ON table1.field1 compopr table2.field2

Операция INNER JOIN имеет следующие части:

Часть

Описание

table2, table2

Названия комбинируемых таблиц

field1, field2

Имена полей, по которым производится объединение. Поля должны содержать данные одного и того же типа, но могут называться по-разному.

compopr

Операция сравнения: "=", "<", ">", "<=", ">=" или "<>".

Наиболее частый тип объединения, может использоваться в любом выражении FROM. Соединяет записи из двух таблиц на основе критерия, создает набор объединенных записей.

Например при объединении таблиц Departments и Employees с помощью INNER JOIN будут выведены все отделы и все их сотрудники (см. также LEFT JOIN и RIGHT JOIN).

Можно связывать таблицы по полям одинаковых типов, например AutoNumber и Long (один и тот же тип), но по Single и Double связывать нельзя. При попытке связать по Memo или OLE полям происходит ошибка.

Следующий запрос объединяет таблицы Categories и Products по полю CategoryID:

SELECT CategoryName, ProductName FROM Categories INNER JOIN Products ON Categories.CategoryID = Products.CategoryID;

При этом значения CategoryID не выводятся, т.к. их нет в списке SELECT. Чтобы его вывести, нужно включить в список Categories.CategoryID.

Можно использовать несколько выражений ON, связанных логическими операциями:

SELECT fields FROM table1 INNER JOIN table2 ON table1.field1 compopr table2.field1 AND ON table1.field2 compopr table2.field2) OR ON table1.field3 compopr table2.field3)];

Объединения могут быть вложенными:

SELECT fields FROM table1 INNER JOIN (table2 INNER JOIN [( ]table3 [INNER JOIN [( ]tablex [INNER JOIN ...)] ON table3.field3 compopr tablex.fieldx)] ON table2.field2 compopr table3.field3) ON table1.field1 compopr table2.field2;

Операции LEFT JOIN и RIGHT JOIN могут входить в INNER JOIN, но INNER JOIN не может входить в LEFT JOIN или RIGHT JOIN.

В следующем примере связываются таблицы Order Details и Orders, и Orders и Employees.

Это нужно потому, что Employees не содержит сведений о продажах, а Order Details о служащих. Результат содержит список служащих и их объем продаж:

SELECT DISTINCTROW Sum(UnitPrice * Quantity) AS Sales, FirstName & " " & LastName AS Name FROM Employees INNER JOIN(Orders INNER JOIN [Order Details] ON Orders.OrderID = [Order Details].OrderID) ON Employees.EmployeeID = Orders.EmployeeID GROUP BY FirstName & " " & LastName;

Выражение in

Указывает таблицу во внешней базе данных, с которой Microsoft Jet может установить соединение (например, dBASE, Paradox или внешняя Microsoft Jet). Формат указания целевой таблицы

[SELECT | INSERT] INTO destination IN {path | ["path" "type"] | ["" [type; DATABASE = path]]}

формат указания таблицы-источника:

FROM tableexpression IN {path | ["path" "type"] | ["" [type; DATABASE = path]]}

Оператор SELECT, содержащий выражение WHERE, имеет следующие части:

Часть

Описание

destination

Имя внешней таблицы, в которую вводятся данные

tableexpression

Имя таблицы/таблиц, из которой выбираются занные. Может быть именем таблицы, сохраненного запроса или комбинации, включающей INNER JOIN, LEFT JOIN или RIGHT JOIN.

path

Полный путь к директории с таблицей

type

Название типа базы, например, dBASE III, dBASE IV, Paradox 3.x или Paradox 4.x

IN позволяет одновременно подсоединиться только к одной внешней базе.

Аргумент указывает директорию, содержащую данные. Например, в случае dBASE, FoxPro или Paradox – директорию с .dbf или .db файлами. Имя таблицы извлекается из destination или tableexpression аргументов.

Для не Microsoft Jet баз тип базызаключается в апострофы или кавычки, а в конец добавляется точка с запятой: 'dBASE IV;' или "dBASE IV;". Можно использовать служебное слово DATABASE. Следующие выражения эквивалентны:

... FROM Table IN "" [dBASE IV; DATABASE=C:\DBASE\DATA\SALES;];

... FROM Table IN "C:\DBASE\DATA\SALES" "dBASE IV;"

Вместо IN выгоднее использовать связанные таблицы, это повышает производительность.

Примеры обращения к различным базам (к таблице Customers):

  1. Microsoft Jet

SELECT CustomerID FROM Customers IN OtherDB.mdb WHERE CustomerID Like "A*";

  1. dBASE III или IV (для dBASE III нужно указывать "dBASE III;")

SELECT CustomerID FROM Customer IN "C:\DBASE\DATA\SALES" "dBASE IV;" WHERE CustomerID Like "A*";

  1. dBASE III или IV с использованием DATABASE

SELECT CustomerID FROM Customer IN "" [dBASE IV; Database=C:\DBASE\DATA\SALES;] WHERE CustomerID Like "A*";

  1. Paradox 3.x or 4.x (для Paradox version 3.x нужно указывать "Paradox 3.x;")

SELECT CustomerID FROM Customer IN "C:\PARADOX\DATA\SALES" "Paradox 4.x;" WHERE CustomerID Like "A*";

  1. Paradox 3.x or 4.x с использованием DATABASE

SELECT CustomerID FROM Customer IN "" [Paradox 4.x;Database=C:\PARADOX\DATA\SALES;] WHERE CustomerID Like "A*";

  1. Лист Microsoft Excel

SELECT CustomerID, CompanyName FROM [Customers$] IN "c:\documents\xldata.xls" "EXCEL 5.0;" WHERE CustomerID Like "A*" ORDER BY CustomerID;

  1. Именованая область листа

SELECT CustomerID, CompanyName FROM CustomersRange IN "c:\documents\xldata.xls" "EXCEL 5.0;" WHERE CustomerID Like "A*" ORDER BY CustomerID;

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]