- •Выборка данных
- •Оператор select
- •Выражения sql
- •Выражение from
- •Операции left join, right join
- •Операция inner join
- •Выражение in
- •Предикаты all, distinct, distinctrow, top
- •Объявление with owneraccess option
- •Выражение where
- •Операция Like
- •Операция In
- •Операция Between...And
- •Подзапрос
- •Выражение order by
- •Выражение group by
- •Выражение having
- •Оператор union
- •Оператор transform
- •Выражение procedure
- •Объявление parameters
- •Изменение данных
- •Оператор update
- •Оператор insert into
- •Оператор delete
- •Изменение структуры
- •Оператор select...Into
- •Оператор create table3
- •Выражение constraint4
- •Оператор alter table5
- •Оператор create index6
- •Оператор drop7
- •Агрегатные функции
- •Функция Count
- •Функция Avg
- •Функция Sum
- •Функции Var и VarP
- •Функции StDev и StDevP
- •Функции Min, Max
- •Функции First, Last
Операция 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):
Microsoft Jet
SELECT CustomerID FROM Customers IN OtherDB.mdb WHERE CustomerID Like "A*";
dBASE III или IV (для dBASE III нужно указывать "dBASE III;")
SELECT CustomerID FROM Customer IN "C:\DBASE\DATA\SALES" "dBASE IV;" WHERE CustomerID Like "A*";
dBASE III или IV с использованием DATABASE
SELECT CustomerID FROM Customer IN "" [dBASE IV; Database=C:\DBASE\DATA\SALES;] WHERE CustomerID Like "A*";
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*";
Paradox 3.x or 4.x с использованием DATABASE
SELECT CustomerID FROM Customer IN "" [Paradox 4.x;Database=C:\PARADOX\DATA\SALES;] WHERE CustomerID Like "A*";
Лист Microsoft Excel
SELECT CustomerID, CompanyName FROM [Customers$] IN "c:\documents\xldata.xls" "EXCEL 5.0;" WHERE CustomerID Like "A*" ORDER BY CustomerID;
Именованая область листа
SELECT CustomerID, CompanyName FROM CustomersRange IN "c:\documents\xldata.xls" "EXCEL 5.0;" WHERE CustomerID Like "A*" ORDER BY CustomerID;
