Извадка от данни в базата данни на Access с помощта на sql заявки. Илюстриран урок по SQL за начинаещи Заявка на sql език в достъп

06.04.2023

Всеки от нас редовно се сблъсква и използва различни бази данни. Когато избираме имейл адрес, ние работим с база данни. Базите данни използват услуги за търсене, банките за съхраняване на клиентски данни и т.н.

Но въпреки постоянното използване на бази данни, дори за много разработчици на софтуерни системи има много "бели петна" поради различни тълкувания на едни и същи термини. Ще дадем кратка дефиниция на основните термини на бази данни, преди да разгледаме езика SQL. Така.

База данни - файл или набор от файлове за съхраняване на подредени структури от данни и техните връзки. Много често базата данни се нарича система за управление - тя е само хранилище на информация в определен формат и може да работи с различни СУБД.

Таблица - Нека си представим папка, в която се съхраняват документи, групирани по определен признак, например списък с поръчки за последния месец. Това е таблицата в компютъра Отделна таблица има свое уникално име.

Тип данни - вида информация, разрешена за съхраняване в определена колона или ред. Това могат да бъдат числа или текст в определен формат.

Колона и ред- всички сме работили с електронни таблици, които също имат редове и колони. Всяка релационна база данни работи с таблици по същия начин. Редовете понякога се наричат ​​записи.

първичен ключ- всеки ред на таблица може да има една или повече колони, които да го идентифицират уникално. Без първичен ключ е много трудно да се актуализират, модифицират и изтриват желаните редове.

Какво е SQL?

SQL(Английски - структуриран език за заявки) е разработен само за работа с бази данни и в момента е стандарт за всички популярни СУБД. Синтаксисът на езика се състои от малък брой оператори и е лесен за научаване. Но въпреки външната простота, това позволява създаване на sqlзаявки за сложни операции с база данни от всякакъв размер.

От 1992 г. има общоприет стандарт, наречен ANSI SQL. Той дефинира основния синтаксис и функциите на операторите и се поддържа от всички лидери на пазара на СУБД като ORACLE. Невъзможно е да покрием всички възможности на езика в една малка статия, така че ще разгледаме накратко само основните SQL заявки. Примерите ясно показват простотата и възможностите на езика:

  • създаване на бази данни и таблици;
  • вземане на проби от данни;
  • добавяне на записи;
  • промяна и изтриване на информация.

SQL типове данни

Всички колони в таблица на база данни съхраняват един и същи тип данни. Типовете данни в SQL са същите като в другите езици за програмиране.

Създаване на таблици и бази данни

Има два начина за създаване на нови бази данни, таблици и други заявки в SQL:

  • през конзолата на СУБД
  • Използване на интерактивните административни инструменти, включени в сървъра на базата данни.

Създава се нова база данни от оператора СЪЗДАВАНЕ НА БАЗА ДАННИ<наименование базы данных>; . Както можете да видите, синтаксисът е прост и кратък.

Създаваме таблици в базата данни, като използваме оператора CREATE TABLE със следните параметри:

  • име на таблица
  • имена на колони и типове данни

Като пример, нека създадем таблица за стоки със следните колони:

Създаваме таблица:

СЪЗДАВАНЕ НА ТАБЛИЦА Стока

(commodity_id CHAR(15) NOT NULL,

vendor_id CHAR(15) NOT NULL,

commodity_name CHAR(254) NULL,

commodity_price DECIMAL(8,2) NULL,

commodity_desc VARCHAR(1000) NULL);

Таблицата има пет колони. След името идва типът данни, колоните са разделени със запетаи. Стойността на колона може да бъде празна (NULL) или трябва да бъде попълнена (NOT NULL) и това се определя при създаването на таблицата.

Избор на данни от таблица

Операторът за избор на данни е най-често използваната SQL заявка. За да получите информация, трябва да посочите какво искаме да изберем от такава таблица. Първо прост пример:

ИЗБЕРЕТЕ commodity_name FROM Commodity

След командата SELECT посочваме името на колоната за получаване на информация, а FROM дефинира таблицата.

Резултатът от изпълнението на заявката ще бъдат всички редове на таблицата със стойности на Commodity_name в реда, в който са въведени в базата данни, т.е. без никакво сортиране. Допълнителна клауза ORDER BY се използва за подреждане на резултата.

За да направите заявка в множество полета, избройте ги разделени със запетаи, както в следния пример:

ИЗБЕРЕТЕ commodity_id, commodity_name, commodity_price ОТ Стока

Възможно е да получите стойността на всички колони на ред като резултат от заявка. За това се използва знакът "*":

ИЗБЕРЕТЕ * ОТ Стока

  • Освен това SELECT поддържа:
  • Сортиране на данни (изявление ORDER BY)
  • Изберете според условията (КЪДЕ)
  • Термин за групиране (ГРУПИРАНЕ ПО)

Добавяне на линия

За добавяне на ред към таблица се използват SQL заявки с израза INSERT. Добавянето може да стане по три начина:

  • добавете нов цял ред;
  • част от низ;
  • резултати от заявката.

За да добавите пълен ред, трябва да посочите името на таблицата и стойностите на колоните (полетата) на новия ред. Ето един пример:

INSERT INTO Commodity VALUES("106 ", "50", "Coca-Cola", "1,68", "Без алкохол ,)

Примерът добавя нов продукт към таблицата. Стойностите са посочени след VALUES за всяка колона. Ако няма съответстваща стойност за колоната, тогава трябва да се посочи NULL. Колоните се попълват със стойности в реда, посочен при създаването на таблицата.

Ако добавите само част от ред, трябва изрично да посочите имената на колоните, както в примера:

INSERT INTO Commodity (commodity_id, vendor_id, commodity_name)

VALUES("106 ", '50", "Кока Кола")

Въведохме само идентификаторите на продукта, доставчика и името му, а останалите полета оставихме празни.

Добавяне на резултати от заявката

INSERT се използва предимно за добавяне на редове, но може да се използва и за добавяне на резултатите от оператор SELECT.

Промяна на данни

За да промените информацията в полетата на таблица на база данни, трябва да използвате израза UPDATE. Операторът може да се използва по два начина:

  • Всички редове в таблицата се актуализират.
  • Само за определена линия.

АКТУАЛИЗАЦИЯТА се състои от три основни елемента:

  • таблицата, в която е необходимо да се направят промени;
  • имена на полета и техните нови стойности;
  • условия за избор на редове за промяна.

Помислете за пример. Да приемем, че цената на продукт с ID=106 се е променила, така че този ред трябва да се актуализира. Пишем следното изявление:

UPDATE Commodity SET commodity_price = "3.2" WHERE commodity_id = "106"

Посочваме името на таблицата, в нашия случай Commodity, където ще се извършва актуализацията, след това след SET - новата стойност на колоната и намираме желания запис, като посочваме желаната ID стойност в WHERE.

За да промените няколко колони, укажете няколко двойки стойност на колона, разделени със запетаи след оператора SET. Нека да разгледаме пример, в който името и цената на продукта са актуализирани:

UPDATE Commodity SET commodity_name='Fanta', commodity_price = "3.2" WHERE commodity_id = "106"

За да изтриете информация в колона, можете да я зададете на NULL, ако структурата на таблицата го позволява. Трябва да се помни, че NULL е точно "не" стойност, а не нула под формата на текст или число. Премахване на описанието на продукта:

UPDATE Commodity SET commodity_desc = NULL WHERE commodity_id = "106"

Премахване на редове

SQL заявките за изтриване на редове в таблица се изпълняват с оператора DELETE. Има два случая на употреба:

  • някои редове в таблицата са изтрити;
  • всички редове в таблицата се изтриват.

Пример за изтриване на един ред от таблица:

ИЗТРИВАНЕ ОТ Стока WHERE commodity_id = "106"

След DELETE FROM посочваме името на таблицата, в която ще се изтриват редове. Клаузата WHERE съдържа условие, според което редовете ще бъдат избрани за изтриване. В примера изтриваме продуктовата линия с ID=106. Посочването WHERE е много важно. пропускането на този израз ще изтрие всички редове в таблицата. Това се отнася и за промяна на стойността на полетата.

Операторът DELETE не указва имена на колони или метасимволи. Той премахва напълно редове, но не може да премахне нито една колона.

Използване на SQL в Microsoft Access

Обикновено се използва интерактивно за създаване на таблици, бази данни, за управление, модифициране, анализиране на данни в базата данни и за прилагане на заявки за SQL Access чрез удобен интерактивен дизайнер на заявки (Query Designer), с помощта на който можете да създавате и незабавно да изпълнявате SQL изрази с всякаква сложност.

Поддържа се и режимът на достъп до сървъра, при който Access DBMS може да се използва като генератор на SQL заявки към всеки ODBC източник на данни. Тази възможност позволява на приложенията на Access да взаимодействат с всеки формат.

SQL разширения

Тъй като SQL заявките нямат всички функции на процедурните езици за програмиране, като цикли, разклонения и т.н., доставчиците на СУБД разработват своя собствена версия на SQL с разширени функции. На първо място, това е поддръжка за съхранени процедури и стандартни оператори на процедурни езици.

Най-често срещаните диалекти на езика:

  • Oracle Database - PL/SQL
  • Interbase, Firebird - PSQL
  • Microsoft SQL Server - Transact-SQL
  • PostgreSQL - PL/pgSQL.

SQL към мрежата

СУБД MySQL се разпространява под GNU General Public License. Има търговски лиценз с възможност за разработване на персонализирани модули. Като неразделна част, той е включен в най-популярните сборки на интернет сървъри, като XAMPP, WAMP и LAMP, и е най-популярната СУБД за разработка на приложения в Интернет.

Той е разработен от Sun Microsystems и в момента се поддържа от Oracle Corporation. Поддържа бази данни до 64 терабайта, стандартен синтаксис SQL:2003, репликация на бази данни и облачни услуги.

SQL заявка е заявка, създадена с помощта на SQL изрази. SQL (Structured Query Language) се използва за създаване на заявки и за актуализиране и управление на релационни бази данни като бази данни на Microsoft Access.

Когато потребител създаде заявка в изгледа за проектиране на заявка, Microsoft Access автоматично създава еквивалентен SQL оператор. Има редица заявки, които могат да бъдат направени само в SQL режим. Опитните програмисти често намират за по-лесно веднага да напишат израз в SQL, отколкото да формират заявка.

Тип заявка в конструктора:

При сложни изчисления трябва последователно да направите няколко заявки, за да получите резултата. Ясно е, че тези действия трябва да се извършват автоматично без намеса на потребителя.

За това се използват макроси, състоящи се от няколко последователно изпълнявани команди.

Изчисления в заявки, възможност за създаване и редактиране на формули.

За полета от таблиците, посочени в схемата на заявката, можете да посочите всякакви изчисления.

За да извършите изчисления, трябва да добавите допълнителни изчисляеми полета към заявката, чиито стойности се изчисляват въз основа на стойностите на други полета на заявката.

Финални заявки, групиране, финални функции.

Крайната заявка се създава с помощта на режим - Обобщена заявка.

Могат да се използват три таблици, включително таблица за връзки.

В този случай можете да извикате контекстното меню от всяко място в заявката (десен бутон на мишката) и да изберете функцията „групови операции“.

Ще се покаже формулярът за заявка нова линияГрупиране.

Общи функции: в полето, за което искаме да изчислим сумите, изберете функцията "Sum" от списъка, за да сумирате всички стойности на избраните полета. Функцията Count ще преброи броя на стойностите на полетата. редактиране на информация microsoft

Заявката е извикване към СУБД за извършване на всякакви операции с данни: избиране на част от данните от общия обем, добавяне на изчислени полета, групова промяна на данни и т.н.

В заявка можете:

  • - изберете информация от няколко свързани таблици;
  • - използване на сложни условия за подбор;
  • - потребителят може сам да въвежда стойности на параметри, да добавя изчислени полета;
  • - Извършете окончателни изчисления.

Видове заявки:

  • - вземане на проби;
  • - създаване на таблица;
  • - актуализиране (промяна на данни);
  • - добавяне на записи;
  • - изтриване на записи.

Заявките се използват като източници на записи за формуляри и отчети. В по-голямата си част, както във формуляри, така и в справки, преди издаване, трябва да изберете част от данните според някои условия и да сортирате данните. Това става със заявки. Заявката може да се съхранява отделно или да бъде свързана към формуляр или отчет.

В Microsoft Access има няколко вида заявки.

Достъп до СУБД

Microsoft Access е релационен тип СУБД, който разумно балансира всички инструменти и възможности, типични за съвременните системи за управление на бази данни. Релационната база данни улеснява намирането, анализирането, поддържането и защитата на данни, тъй като се съхраняват на едно място. Access в превод от английски означава "достъп". MS Access е една от най-мощните, гъвкави и лесни за използване СУБД. Можете да създадете повечето приложения в него, без да напишете нито един ред от програмата, но ако трябва да създадете нещо много сложно, тогава за този случай MS Access предоставя мощен език за програмиране - Visual Basic Application.

Популярността на Microsoft Access DBMS се дължи на следните причини:

Достъпността в проучването и разбираемостта позволяват на Access да бъде един от най-добрите системибързо създаване на приложения за управление на база данни;

Възможност за използване на OLE технология;

Интеграция с пакета Microsoft Office;

Пълна поддръжка на Web-технологии;

Визуалната технология ви позволява постоянно да виждате резултатите от вашите действия и да ги коригирате;

Наличието на голям набор от "майстори" за разработване на обекти.

Основните типове обекти, с които работи програмата са: таблица, заявка, форма, отчет, страница, макрос, модул.

Таблицата е обект, който се използва за съхраняване на данни. Всяка таблица включва информация за даден обект определен тип. Таблицата съдържа полета (колони), които съхраняват различни видове данни, и записи (редове). За всяка таблица трябва да се дефинира първичен ключ (едно поле, което има за всеки запис уникална стойностили няколко полета, чиято кумулативна стойност е уникална за всеки запис), което е уникален идентификатор за всеки запис на таблица.

За да се увеличи скоростта на достъп до данни, отделните полета на таблицата (или тяхната комбинация) могат да бъдат декларирани като индекси. Индексът е инструмент, който ускорява търсенето и сортирането в таблица чрез използване на ключови стойности, което прави възможно да се гарантира уникалността на редовете на таблицата. Първичният ключ на таблицата се индексира автоматично. Не е позволено да се създават индекси за полета с някои типове данни.

Заявката е обект, който позволява на потребителя да получи желаните данни от една или повече таблици. Можете също да използвате заявки за създаване на нови таблици, като използвате данни от една или повече таблици, които вече съществуват. Най-често срещаният тип заявка е заявка за избор. Заявка за избор избира данни от една или повече таблици въз основа на определени условия и след това ги показва в желания ред.

Формулярът е обект предимно за въвеждане на данни, показването им на екрана или контролиране на работата на приложение.

Доклад - обект, предназначен да създаде документ, който по-късно може да бъде отпечатан или включен в документ на друго приложение.

база за програмиране на визуално развитие

Страница - Използва се за достъп до данни в текущата база данни на Access.

Макросът е обект, който е структурирано описание на едно или повече действия, които Access трябва да изпълни в отговор на конкретно събитие.

Модулът е обект, съдържащ програми на Microsoft Visual Basic, които ви позволяват да разделите процеса на по-малки стъпки и да откриете онези грешки, които не могат да бъдат намерени с помощта на макроси.

СУБД се стартира от Старт - Програми - Microsoft Access. Изпълнете командата File - New.

Унифициран е интерфейсът за работа с обекти на база данни. За всеки от тях има стандартни режими на работа: Създаване (създаване на структурата на обектите); Конструктор (промяна на структурата на обектите); Open (View, Run - предназначен за работа с обекти на база данни).

SQL език за заявки

SQL (Structured Query Language - структуриран език за заявки) от 1986г. е стандартният език за релационни бази данни. По-специално, той се използва в приложенията на Access и Excel.

SQL е информационно-логичен език, предназначен да описва съхранени данни, да извлича съхранени данни и да модифицира данни. Първоначално SQL беше основният начин, по който потребителят работеше с базата данни и беше малък набор от команди (оператори), които позволяваха създаване на таблици, добавяне на нови записи към таблици, извличане на записи от таблици, изтриване на записи и промяна на структурите на таблици. Поради нарастващата сложност езикът SQL се превърна в по-приложен език за програмиране и потребителите успяха да използват визуални създатели на заявки.

Езикът SQL е набор от оператори:

оператори за дефиниране на данни (Data Definition Language, DDL);

оператори за манипулиране на данни (Data Manipulation Language, DML);

оператори за дефиниране на достъп до данни (Data Control Language, DCL);

Изявления на езика за контрол на транзакциите (TCL).

Заявките в MS Access се съхраняват и изпълняват с помощта на езика SQL. Въпреки че повечето заявки могат да бъдат създадени с помощта на графични инструменти (шаблонни заявки), те се съхраняват като SQL изрази. В някои случаи (например в подзаявки) може да се използва само SQL.

SQL е непроцедурен език. Той просто декларира какво трябва да се направи и изпълнението се поверява на СУБД (система за управление на база данни).

SQL използва тризначна логика. Наред с традиционните булеви стойности TRUE и FALSE се използва NULL (НЕИЗВЕСТНО или БЕЗ ДАННИ).

Операциите се извършват върху цели набори от данни, а не върху отделни елементи, както е в други езици за програмиране.

SQL заявката се състои от изрази. Всяка инструкция може да съдържа множество клаузи.

С течение на времето процесът може да изисква мигриране на Microsoft Office Access (Access) файлов сървър база данни към клиент-сървър DBMS формат. Обикновено за тази цел се използва ODBC. Въпреки това, за прехвърляне към Microsoft SQL Server (MS SQL), Access и MS SQL DBMS имат удобни специализирани инструменти.

Има три начина за прехвърляне на база данни от Access към MS SQL. Разгледайте ги всички на примера на проста база данни, състояща се от две таблици и една заявка.

Прехвърляне на база данни с помощта наAccess („Съветник за конвертиране във форматSQLсървър")

За да започнете прехвърлянето, трябва да щракнете върху бутона "SQL Server" в областта "Преместване на данни" на раздела "Работа с бази данни".

В прозореца, който се отваря, трябва да изберете къде ще бъдат прехвърлени данните.

Има две възможности:

  1. Експорт към съществуваща MS SQL база данни;
  2. Създайте нова база данни (по подразбиране).

Задаваме името на сървъра, към който ще прехвърлим базата данни, името на създаваната база данни и посочваме потребителското име и паролата за връзка.

За да изберете една таблица, използвайте бутона ">", а за да изберете всички таблици, използвайте бутона ">>". За да откажете прехвърлянето, бутоните "<» и «<<» соответственно.

След като изберете таблици, можете да зададете допълнителни опции за тяхното прехвърляне. По-специално, съвременните версии на Access могат да експортират не само самите таблици с данни, но и връзките между тях. Това значително намалява времето, необходимо за миграции на бази данни, тъй като не е необходимо те да се създават отново след миграцията.

  • Създайте ново клиент-сървър приложение с потребителски интерфейс на Access;
  • Включване на мигрирани таблици в изходната база данни като външни (по подразбиране);
  • Не правете нищо с изходната база данни.

Когато цялата необходима информация бъде събрана, можете или да се върнете към една от предишните стъпки за проверка, или да започнете процеса на прехвърляне, като щракнете върху бутона „Край“.

Напредъкът на процеса на прехвърляне се показва ясно в специален прозорец.

След като миграцията приключи, можете да отворите SQL Server Management Studio и да видите резултата.

Този метод е най-простият и удобен, но за съжаление ви позволява да прехвърляте само таблици и придружаващите ги елементи (индекси, връзки и др.).

Импортиране на база данниСредства за достъпMicrosoftSQLсървър

MS SQL може да импортира данни от голямо разнообразие от източници. Но директен импорт от Access е възможен само за бази данни от стария формат (.mdb).

Можете да намерите подробни инструкции за импортиране на такива бази данни.

Импортирането на бази данни от нови формати (2007 и по-нови) е много по-трудно.

Има два начина за решаване на този проблем:

  • Първо експортирайте базата данни на Access в стария формат.
    В този случай можете лесно да използвате инструкциите, дадени на връзката по-горе;
  • Използване на ODBC.
    Създаване на източник на данни за база данни на Access с последващо свързване през нея от MS SQL Server.

За съжаление ODBC подходът е доста сложен при 64-битовите версии на Windows.

Причината е, че 64-битовите версии на MS SQL са в комплект с 32-битовите версии на SQL Server Management Studio. Това обстоятелство означава, че базите данни на Access, за които са създадени източници на данни въз основа на 64-битови драйвери, не могат да бъдат импортирани с тази програма.

Отново има два изхода (което означава само методи, използващи графичен интерфейс):

  • Използвайте 32-битови версии на Windows, MS SQL, Office;
  • Използвайте само 32-битов Access и конфигурирайте източника на данни с помощта на 32-битов ODBC мениджър (обикновено C:\Windows\SysWOW64\odbcad32.exe);
  • Използвайте алтернативен софтуер за работа с MS SQL.

Въпреки това, дори ако все пак успеете да установите процеса на импортиране, ползите от това може да са много по-малко от изразходваното време и усилия.

При импортирането се прехвърлят само самите таблици и тяхното съдържание и нищо друго (сравнете с възможностите на предишния метод).

Трябва също да се отбележи, че при директен импорт от Access проблемът с експортирането на заявки е частично решен (няма достъп до заявки през ODBC). Но по подразбиране заявките се импортират в базата данни на MS SQL под формата на обикновени таблици.

За щастие е възможно да настроите фино параметрите за импортиране и можете ръчно да замените SQL заявката за създаване на таблица със заявка за създаване на изглед.

За да направите това, в прозореца на екранната снимка по-горе за избраната заявка за достъп щракнете върху бутона „Промяна“.

В прозореца, който се отваря, щракнете върху бутона „Промяна на SQL ...“.

Ще се отвори прозорец за редактиране на SQL заявка, в който всъщност трябва да замените автоматично генерираната заявка

със собствения си.

В резултат на това заявката от Access ще бъде прехвърлена правилно в MS SQL базата данни като изглед, а не като таблица.

Разбира се, такива настройки са усърден ръчен труд, който също изисква определени знания и умения, но все пак, както се казва, „по-добре от нищо“.

Следователно този метод за прехвърляне на бази данни на Access към MS SQL е по-подходящ за квалифицирани специалисти в двете СУБД.

Следното е пример за импортиране на база данни на Access с помощта на ODBC на 32-битова версия на Windows. При 64-битова версия на Windows, когато се използва 32-битова версия на Access, импортирането е подобно, но източникът на данни се създава в 32-битовия ODBC мениджър.

Ние създаваме източник на данни.

В прозореца, който се отваря, въведете името му.

След това кликнете върху бутона "Избор" и посочете към коя база данни на Access искате да се свържете.

Когато името на източника и файла на базата данни са зададени, остава да щракнете върху бутона „Ok“ и източникът на данни за желаната база данни на Access е готов.

Сега можете да продължите директно към импортирането на базата данни в MS SQL.

За да направите това, в контекстното меню на базата данни, в която искате да импортирате, изберете елементите "Задачи" -\u003e "Импортиране на данни".

Ще се отвори „Съветникът за импортиране и експортиране на данни“.

В падащия списък „Източник на данни“ трябва да изберете „.Net Framework Data Provider for Odbc“ (ако не е избрано по подразбиране) и в реда Dsn в таблицата да посочите името на източника на данни, създаден по-горе за Access база данни. Низът за свързване ("Низ за свързване") ще се генерира автоматично.

След това трябва да посочите коя база данни, кой екземпляр на импортиране на MS SQL. За да направите това, след като щракнете върху бутона "Напред", изберете в падащия списък "Destination" или "Microsoft SQL Server Native Client" (както е показано на екранната снимка по-долу) или "Microsoft OLE DB Provider for SQL Server", посочете желаното потребителско име и парола за база данни за връзки.

След това трябва да изберете таблиците за импортиране. Както беше отбелязано по-горе, когато използвате ODBC, импортирането на заявки за Access не е налично. Следователно, за разлика от предишната екранна снимка със списък с обекти за импортиране, този списък ще съдържа само таблици.

С помощта на квадратчета за отметка можете да изберете както всички таблици наведнъж (което е направено в този пример), така и някои от тях поотделно.

След това ще се покаже прозорец с окончателните настройки за процеса на импортиране. Нека оставим всички стойности по подразбиране.

След като щракнете върху бутона "Край", процесът на импортиране ще приключи. Ако всичко е направено правилно и импортирането е успешно, прозорецът с информация за импортирането няма да съдържа грешки (вижте екранната снимка по-долу).

За да завършите съветника, просто щракнете върху бутона "Затвори".

Резултатът може да се види от SQL Server Management Studio.

Прехвърляне на базата данни от страна чрез средстваODBC

Този метод е универсален за експортиране на данни от Access към всяка друга СУБД. Достатъчно е да поддържа работа с ODBC.

Пример за такъв износ вече беше обсъден по-рано в статията ""

ЗаГ-ЦАSQL даде възможност за мигриране на база данни отНе е необходим достъп, тъй като се експортират само таблици с данни, а заявките се експортират само като обикновени таблици.

Тази преносимост обаче все още е налице (версия 2014 не беше изключение). Така че нека да разгледаме и това.

Първо, нека създадем източник на данни за работа с MS SQL (нека бъде персонализиран DSN).

Посочете драйвера за източника.

След това ще започне процесът на неговото създаване и конфигуриране.

Задайте името на източника на данни и посочете името на екземпляра на MS SQL, към който искате да се свържете.

След това посочваме базата данни, към която планираме да прехвърлим таблицата или заявката. Прехвърляне чрезODBC може да се изпълнява само на вече съществуваща база данни. Следователно, ако данните трябва да бъдат прехвърлени в нова база данни, тя първо трябва да бъде създадена.

След натискане на бутона "Край" ще се покаже прозорец с обобщена информация за създавания източник на данни.

За да бъде окончателно създаден източникът на данни, просто щракнете върху бутона „OK“. Но е по-добре първо да проверите ефективността му, като щракнете върху бутона „Проверка на източника на данни“.

Ако всичко е направено правилно, ще се покаже съобщение за успешна проверка.

Сега, когато има източник на данни, можем да продължим директно към процеса на миграция. Като пример ще експортираме една единствена заявка „Заявка за контакти“ от базата данни.

За да направите това, изберете го с мишката и кликнете върху бутона "Разширени" в областта "Експортиране" на раздела "Външни данни". В падащото меню изберете „ODBC база данни“.

В този случай оригиналната стойност остава.

След като щракнете върху бутона "Ok", трябва да изберете създадения източник на данни.

След това въведете потребителското име и паролата, за да се свържете със сървъра.

След натискане на бутона "Ok" експортът ще бъде изпълнен.

Въпреки това, както бе споменато по-горе, резултатът от експортирането в случай на заявка не е правилен.

Вместо изгледа "Заявка за контакти", в базата данни на MS SQL беше създадена таблица със същото име.

Освен това, дори ако експортирате само таблици, има много допълнителни стъпки, които трябва да бъдат предприети след експортирането (пресъздаване на връзки и т.н.). Следователно описаният метод за прехвърляне на бази данни от Access към MS SQL практически вече не се използва.

Описание на образователния проект "Магазин"

Схема за свързване на таблица

Описание на таблиците

m_category - продуктови категории

m_income - получаване на стоки

m_outcome - потребление на стоки

m_product - директория, описание на продукта

m_supplier - директория; информация за доставчика

m_unit - директория; единици

За да тествате на практика примерите, дадени в този урок, трябва да разполагате със следния софтуер:

Microsoft Access 2003 или по-нова версия.

SQL заявка в MS Access. Започнете

За да видите съдържанието на таблица, щракнете двукратно върху името на таблицата в левия панел:

За да превключите в режим на редактиране на полето на таблицата, изберете режим на проектиране в горния панел:

За да покажете резултата от SQL заявка, щракнете два пъти върху името на заявката в левия панел:

За да превключите към режима за редактиране на SQL заявка, изберете режима SQL в горния панел:

SQL заявка. Примери в MS Access. ИЗБЕРЕТЕ: 1-10

В SQL заявка операторът SELECT се използва за избор от таблици на база данни.

SQL заявка Q001.Примерна SQL заявка за получаване само на задължителните полета в желаната последователност:

ИЗБЕРЕТЕ dt, product_id, сума


ОТ m_доход;

SQL заявка Q002.В този пример на SQL заявка знакът звездичка (*) се използва за показване на всички колони на таблицата m_product, с други думи, за получаване на всички полета на релацията m_product:

ИЗБЕРЕТЕ *
ОТ m_product;

ЗаявкаSQLQ003.Изявлението DISTINCT се използва за премахване на дублиращи се записи и получаване на много уникални записи:

ИЗБЕРЕТЕ ОТДЕЛЕН product_id


ОТ m_доход;

SQL заявка Q004.Операторът ORDER BY се използва за сортиране (подреждане) на записи по стойностите на определено поле. Името на полето следва клаузата ORDER BY:

ИЗБЕРЕТЕ *
ОТ m_доход


ПОРЪЧАЙ ПО цена;

SQL заявка Q005.Операторът ASC се използва в допълнение към оператора ORDER BY и се използва за дефиниране на сортиране във възходящ ред. Операторът DESC се използва в допълнение към оператора ORDER BY и се използва за дефиниране на сортиране в низходящ ред. В случай, че не са посочени нито ASC, нито DESC, се приема наличието на ASC (по подразбиране):

ИЗБЕРЕТЕ *
ОТ m_доход


ПОРЪЧКА ПО dt DESC , цена;

SQL заявка Q006.За да изберете необходимите записи от таблицата, се използват различни логически изрази, които изразяват условието за избор. Булевият израз идва след клаузата WHERE. Пример за получаване от таблицата m_income на всички записи, за които стойността на сумата е по-голяма от 200:

ИЗБЕРЕТЕ *
ОТ m_доход


WHERE сума>200;

SQL заявка Q007.За изразяване на сложни условия се използват логическите операции И (конюнкция), ИЛИ (дизюнкция) и НЕ (логическо отрицание). Пример за получаване от таблицата m_outcome на всички записи, за които стойността на сумата е 20 и стойността на цената е по-голяма или равна на 10:

цена


ОТ m_резултат
WHERE сума=20 И цена>=10;

SQL заявка Q008.За да обедините данни от две или повече таблици, използвайте инструкциите INNER JOIN, LEFT JOIN, RIGHT JOIN. Следващият пример извлича полетата dt, product_id, сума, цена от таблицата m_income и полето за заглавие от таблицата m_product. Записът на таблицата m_income е свързан със записа на таблицата m_product, когато стойността на m_income.product_id е равна на стойността на m_product.id:



НА m_income.product_id=m_product.id;

SQL заявка Q009.Има две неща, на които трябва да обърнете внимание в тази SQL заявка: 1) текстът за търсене е ограден в единични кавички ("); 2) датата е във формат #месец/ден/година#, който е правилен за MS Достъп В други системи форматът на датата може да е различен. Пример за показване на информация за получаването на мляко на 12 юни 2011 г. Обърнете внимание на формата на датата #6/12/2011#:

ИЗБЕРЕТЕ dt, product_id, заглавие, сума, цена


ОТ m_income INNER JOIN m_product

WHERE title="Мляко" And dt=#6/12/2011#; !}

SQL заявка Q010.Инструкцията BETWEEN се използва за проверка дали диапазон от стойности принадлежи към нея. Примерна SQL заявка, показваща информация за стоки, получени между 1 юни и 30 юни 2011 г.:

ИЗБЕРЕТЕ *
ОТ m_income INNER JOIN m_product


НА m_income.product_id=m_product.id
WHERE dt МЕЖДУ #6/1/2011# и #6/30/2011#;

SQL заявка. Примери в MS Access. ИЗБЕРЕТЕ: 11-20

Една SQL заявка може да бъде вложена в друга. Подзаявката не е нищо повече от заявка в заявка. Обикновено подзаявка се използва в клауза WHERE. Но има и други начини за използване на подзаявки.

Заявка Q011.Показва информация за продуктите от таблицата m_product, чиито кодове също са в таблицата m_income:

ИЗБЕРЕТЕ *
ОТ m_product


WHERE id IN (ИЗБЕРЕТЕ product_id FROM m_income);

Заявка Q012.Показва се списък с продукти от таблицата m_product, чиито кодове не са в таблицата m_outcome:

ИЗБЕРЕТЕ *
ОТ m_product


WHERE id NOT IN (ИЗБЕРЕТЕ product_id FROM m_outcome);

Заявка Q013.Тази SQL заявка връща уникален списък с кодове и имена на продукти, които имат кодове в таблицата m_income, но не и в таблицата m_outcome:

ИЗБЕРЕТЕ ОТДЕЛЕН product_id, заглавие


ОТ m_income INNER JOIN m_product
НА m_income.product_id=m_product.id
WHERE product_id NOT IN (ИЗБЕРЕТЕ product_id FROM m_outcome);

Заявка Q014.От таблицата m_category се показва уникален списък с категории, чиито имена започват с буквата M:

ИЗБЕРЕТЕ ОТДЕЛНО заглавие


ОТ m_product
WHERE заглавие LIKE "M*";

Заявка Q015.Пример за извършване на аритметични операции върху полета в заявка и преименуване на полета в заявка (псевдоним). Този пример изчислява разход = количество*цена и печалба за всеки запис на консумация на артикул, като се приема, че печалбата е 7 процента от продажбите:


сума*цена/100*7 AS печалба
ОТ m_резултат;

Заявка Q016.Чрез анализиране и опростяване на аритметичните операции можете да увеличите скоростта на изпълнение на заявката:

ИЗБЕРЕТЕ dt, product_id, сума, цена, сума*цена КАТО сума_на резултата,


сума_изход*0,07 AS печалба
ОТ m_резултат;

Заявка Q017.С помощта на оператора INNER JOIN можете да комбинирате данни от множество таблици. В следващия пример, в зависимост от стойността на ctgry_id, всеки запис в таблицата m_income се съпоставя с името на категорията от таблицата m_category, към която принадлежи продуктът:

ИЗБЕРЕТЕ c.title, b.title, dt, сума, цена, сума*цена КАТО сума_доход


FROM (m_income AS a INNER JOIN m_product AS b ON a.product_id=b.id)
INNER JOIN m_category AS c ON b.ctgry_id=c.id
ORDER BY c.title, b.title;

Заявка Q018.Функции като SUM - сума, COUNT - количество, AVG - средно аритметично, MAX - максимална стойност, MIN - минимална стойност се наричат ​​агрегатни функции. Те приемат множество стойности и връщат една стойност, когато се обработват. Пример за изчисляване на сумата от произведението на полетата сума и цена с използване агрегатна функцияСУМА:

ИЗБЕРЕТЕ СУМА(сума*цена) КАТО Обща_сума


ОТ m_доход;

Заявка Q019.Пример за използване на множество агрегатни функции:

ИЗБЕРЕТЕ Sum(amount) AS Amount_Sum, AVG(amount) AS Amount_AVG,


MAX(сума) AS Amount_Max, Min(сума) AS Amount_Min,
Брой(*) КАТО общ_брой
ОТ m_доход;

Заявка Q020.В този пример се изчислява сборът на всички елементи с код 1, получени през юни 2011 г.:

ИЗБЕРЕТЕ Сума(сума*цена) КАТО сума_доход


ОТ m_доход
WHERE product_id=1 И dt BETWEEN #6/1/2011# AND #6/30/2011#;.

Заявка Q021.Следната SQL заявка изчислява за колко са продадени стоките с код 4 или 6:

ИЗБЕРЕТЕ Сума(сума*цена) като сума_изход


ОТ m_резултат
WHERE product_id=4 OR product_id=6;

Заявка Q022.Изчислява се за какво количество са продадени на 12.06.2011 г. стоки с код 4 или 6:

ИЗБЕРЕТЕ Сума(сума*цена) КАТО резултат_сума


ОТ m_резултат
WHERE (product_id=4 ИЛИ product_id=6) И dt=#6/12/2011#;

Заявка Q023.Задачата е следната. Изчислете общата сума, за която са кредитирани стоките от категорията "Печени продукти".

За да разрешите този проблем, трябва да работите с три таблици: m_income, m_product и m_category, защото:


- количеството и цената на кредитираните стоки се съхраняват в таблицата m_income;
- кодът на категорията на всеки продукт се съхранява в таблицата m_product;
- името на заглавието на категорията се съхранява в таблицата m_category.

За да разрешим този проблем, използваме следния алгоритъм:


- определяне на код на категория "Печени изделия" от таблица m_category чрез подзаявка;
- обединяване на таблиците m_income и m_product за определяне на категорията на всеки кредитиран продукт;
- изчисляване на сумата на получаване (= количество * цена) за стоки, чийто код на категория е равен на кода, определен от горната подзаявка.
ИЗБЕРЕТЕ
FROM m_product AS a INNER JOIN m_income AS b ON a.id=b.product_id
WHERE ctgry_id = (SELECT id FROM m_category WHERE title="Печени изделия"); !}

Заявка Q024.Проблемът с изчисляването на общата сума на кредитираните стоки от категорията "Печени продукти" ще бъде решен чрез следния алгоритъм:
- всеки запис от таблицата m_income, в зависимост от стойността на неговия product_id, от таблицата m_category, съответства на името на категорията;
- изберете записи, за които категорията е равна на "Печени продукти";
- изчислете размера на приходите = количество * цена.

FROM (m_product AS a INNER JOIN m_income AS b ON a.id=b.product_id)

WHERE c.title="Печени изделия"; !}

Заявка Q025.Този пример изчислява колко артикула са били консумирани:

SELECT COUNT(product_id) AS product_cnt


FROM (ИЗБЕРЕТЕ ОТДЕЛЕН product_id FROM m_outcome) AS t;

Заявка Q026.Клаузата GROUP BY се използва за групиране на записи. Обикновено записите се групират по стойността на едно или повече полета и към всяка група се прилага обобщена операция. Например, следната заявка генерира отчет за продажбата на стоки. Тоест генерира се таблица, която ще съдържа имената на стоките и сумата, за която се продават:

ИЗБЕРЕТЕ заглавие, СУМА(сума*цена) КАТО резултат_сума


FROM m_product AS a INNER JOIN m_outcome AS b
НА a.id=b.product_id
ГРУПИРАНЕ ПО заглавие;

Заявка Q027.Отчет за продажбите по категории. Тоест, генерира се таблица, която ще съдържа имената на категориите продукти, общата сума, за която се продават стоките от тези категории, и средната сума на продажбите. Функцията ROUND се използва за закръгляване на средната стойност до най-близката стотна (втория десетичен знак след десетичния разделител):

ИЗБЕРЕТЕ c.title, SUM(сума*цена) AS сума_изход,


ROUND(СР.(сума*цена),2) КАТО резултат_сума_ср
FROM (m_product AS a INNER JOIN m_outcome AS b ON a.id=b.product_id)
INNER JOIN m_category AS c ON a.ctgry_id=c.id
ГРУПИРАНЕ ПО c.title;

Заявка Q028.За всеки продукт се изчислява общият и среден брой на неговите постъпления и се извежда информация за стоките, чийто общ брой на постъпленията е минимум 500:

ИЗБЕРЕТЕ product_id, SUM(сума) КАТО сума_сума,


Кръгла(Ср.(сума),2) КАТО сума_ср
ОТ m_доход
ГРУПИРАНЕ ПО product_id
HAVING Sum(amount)>=500;

Заявка Q029.Тази заявка изчислява за всеки артикул сумата и средната стойност на неговите приходи, направени през второто тримесечие на 2011 г. Ако общата сума на получаване на стоки е не по-малка от 1000, тогава се показва информация за този продукт:

ИЗБЕРЕТЕ заглавие, СУМА(сума*цена) КАТО сума_доход


FROM m_income a INNER JOIN m_product b ON a.product_id=b.id
WHERE dt МЕЖДУ #4/1/2011# И #6/30/2011#
ГРУПИРАНЕ ПО заглавие
HAVING SUM(сума*цена)>=1000;

Заявка Q030.В някои случаи е необходимо да се съпостави всеки запис от дадена таблица с всеки запис от друга таблица; което се нарича декартово произведение. Таблицата, получена в резултат на такова свързване, се нарича таблица на Декарт. Например, ако някоя таблица A има 100 записа, а таблица B има 15 записа, тогава тяхната декартова таблица ще се състои от 100*15=150 записа. Следната заявка свързва всеки запис в таблицата m_income с всеки запис в таблицата m_outcome:
ОТ м_доход, м_изход;

Заявка Q031.Пример за групиране на записи по две полета. Следната SQL заявка изчислява за всеки доставчик сумата и количеството на стоките, получени от него:


SUM(сума*цена) КАТО сума_приход

Заявка Q032.Пример за групиране на записи по две полета. Следната заявка изчислява за всеки доставчик сумата и количеството на техните продукти, продадени от нас:

ИЗБЕРЕТЕ доставчик_id, product_id, SUM(сума) КАТО сума_сума,




ГРУПИРАНЕ ПО доставчик_id, product_id;

Заявка Q033.В този пример двете заявки по-горе (q031 и q032) се използват като подзаявки. Резултатите от тези заявки се обединяват в един отчет с помощта на метода LEFT JOIN. Следната заявка показва отчет за броя и количеството получени и продадени продукти за всеки доставчик. Трябва да обърнете внимание на факта, че ако някакъв продукт вече е пристигнал, но все още не е продаден, тогава клетката outcome_sum за този запис ще бъде празна. че тази заявка е само пример за използване по отношение на сложни заявкикато подзаявка. Ефективността на тази SQL заявка с голямо количество данни е под въпрос:

ИЗБЕРЕТЕ *
ОТ



SUM(сума*цена) КАТО сума_приход

НА a.product_id=b.id ГРУПИРАНЕ ПО доставчик_id, product_id) AS a
ЛЯВО ПРИСЪЕДИНЯВАНЕ
(ИЗБЕРЕТЕ доставчик_id, product_id, SUM(сума) КАТО сума_сума,
SUM(сума*цена) КАТО резултат_сума
FROM m_outcome AS a INNER JOIN m_product AS b
НА a.product_id=b.id ГРУПИРАНЕ ПО доставчик_id, product_id) AS b
ON (a.product_id=b.product_id) И (a.supplier_id=b.supplier_id);

Заявка Q034.В този пример двете заявки по-горе (q031 и q032) се използват като подзаявки. Резултатите от тези заявки се комбинират в един отчет с помощта на метода RIGTH JOIN. Следната заявка отпечатва отчет за сумата на плащанията на всеки клиент за платежните системи, които е използвал, и сумата на направените от тях инвестиции. Следната заявка показва отчет за броя и количеството получени и продадени продукти за всеки доставчик. Обърнете внимание, че ако даден продукт вече е продаден, но все още не е получен, клетката за сума_доход за този запис ще бъде празна. Наличието на такива празни клетки е индикатор за грешка в отчитането на продажбите, тъй като преди продажбата е необходимо първо да пристигне съответният продукт:

ИЗБЕРЕТЕ *
ОТ


(ИЗБЕРЕТЕ доставчик_id, product_id, SUM(сума) КАТО сума_сума,
SUM(сума*цена) КАТО сума_приход
FROM m_income AS a INNER JOIN m_product AS b ON a.product_id=b.id
ГРУПИРАНЕ ПО доставчик_id, product_id) КАТО a
ДЯСНО ПРИСЪЕДИНЕТЕ
(ИЗБЕРЕТЕ доставчик_id, product_id, SUM(сума) КАТО сума_сума,
SUM(сума*цена) КАТО резултат_сума
FROM m_outcome AS a INNER JOIN m_product AS b ON a.product_id=b.id
ГРУПИРАНЕ ПО доставчик_id, product_id) AS b
ON (a.supplier_id=b.supplier_id) И (a.product_id=b.product_id);

Заявка Q035.Извежда се справка за размера на приходите и разходите по продукти. За да направите това, се създава списък с продукти според таблиците m_income и m_outcome, след което за всеки продукт от този списък се изчислява сумата от неговите приходи според таблицата m_income и сумата от неговите разходи според таблицата m_outcome:

ИЗБЕРЕТЕ product_id, SUM(в_сума) КАТО сума_на_прихода,


SUM(out_amount) КАТО сума_изход
ОТ
(ИЗБЕРЕТЕ product_id, сума КАТО in_amount, 0 AS out_amount
ОТ m_доход
СЪЮЗ ВСИЧКИ
ИЗБЕРЕТЕ product_id, 0 AS in_amount, сума AS out_amount
ОТ m_резултат) КАТО t
ГРУПИРАНЕ ПО product_id;

Заявка Q036.Функцията EXISTS връща TRUE, ако предаваният към нея набор съдържа елементи. Функцията EXISTS връща FALSE, ако наборът, който й е предаден, е празен, тоест няма елементи. Следната заявка връща продуктовите кодове, които се съдържат както в таблицата m_income, така и в таблицата m_outcome:

ИЗБЕРЕТЕ ОТДЕЛЕН product_id


ОТ m_доход КАТО a
WHERE EXISTS(SELECT product_id FROM m_outcome AS b

Заявка Q037.Показани са продуктови кодове, които се съдържат както в таблицата m_income, така и в таблицата m_outcome:

ИЗБЕРЕТЕ ОТДЕЛЕН product_id


ОТ m_доход КАТО a
WHERE product_id IN (ИЗБЕРЕТЕ product_id FROM m_outcome)

Заявка Q038.Показани са продуктови кодове, които се съдържат както в таблицата m_income, но не се съдържат в таблицата m_outcome:

ИЗБЕРЕТЕ ОТДЕЛЕН product_id


ОТ m_доход КАТО a
WHERE NOT EXISTS(SELECT product_id FROM m_outcome AS b
WHERE b.product_id=a.product_id);

Заявка Q039.Показва се списък с продукти с най-висока сума на продажбите. Алгоритъмът е следният. За всеки продукт се изчислява сумата от неговите продажби. След това се определя максимумът от тези суми. След това за всеки продукт отново се изчислява сумата на неговите продажби и се показват кодът и сумата на продажбите на стоки, чиято сума на продажбите е равна на максимума:

ИЗБЕРЕТЕ product_id, SUM(сума*цена) КАТО сума_сума


ОТ m_резултат
ГРУПИРАНЕ ПО product_id
ИМАЩ СУМА(сума*цена) = (ИЗБЕРЕТЕ МАКС(s_сума)
FROM (SELECT SUM(сума*цена) AS s_сума FROM m_outcome GROUP BY product_id));

Заявка Q040.Запазената дума IIF (условен оператор) се използва за оценка булев изрази изпълнява едно или друго действие в зависимост от резултата (ВЯРНО или НЕВЯРНО). В следния пример доставката на артикул се счита за "малка", ако количеството е по-малко от 500. В противен случай, т.е. количеството на разписката е по-голямо или равно на 500, доставката се счита за "голяма":

ИЗБЕРЕТЕ dt, product_id, сума,


IIF(сума ОТ m_доход;

SQL заявка Q041.В случай, че командата IIF се използва повече от веднъж, е по-удобно да се замени с командата SWITCH. Операторът SWITCH (оператор с множествен избор) се използва за оценка на логически израз и извършване на действие в зависимост от резултата. В следващия пример доставената партида се счита за „малка“, ако количеството стоки в партидата е по-малко от 500. В противен случай, т.е. ако количеството стоки е по-голямо или равно на 500, партидата се счита за „голяма ":

ИЗБЕРЕТЕ dt, product_id, сума,


SWITCH(сума =500,"голям") AS знак
ОТ m_доход;

Заявка Q042.В следващата заявка, ако количеството стоки във входящата партида е по-малко от 300, тогава партидата се счита за "малка". В противен случай, т.е. ако условието сума ИЗБЕРЕТЕ dt, product_id, сума,
IIF(сума IIF(сума ОТ m_доход;

SQL заявка Q043.В следващата заявка, ако количеството стоки във входящата партида е по-малко от 300, тогава партидата се счита за "малка". В противен случай, т.е. ако условието сума ИЗБЕРЕТЕ dt, product_id, сума,
SWITCH(сума сума сума>=1000,"голям") AS знак
ОТ m_доход;

SQL заявка Q044.В следната заявка продажбите са разделени на три групи: малки (до 150), средни (от 150 до 300), големи (300 и повече). След това за всяка група се изчислява общата сума:

ИЗБЕРЕТЕ категория, SUM(резултат_сума) AS Ctgry_Total


ОТ (ИЗБЕРЕТЕ сума*цена КАТО сума_изход,
IIf(сума*цена IIf(сума*цена ОТ m_резултат) AS t
ГРУПИРАНЕ ПО категория;

SQL заявка Q045.Функцията DateAdd се използва за добавяне на дни, месеци или години към дадена дата и получаване на нова дата. Следваща заявка:
1) добавете 30 дни към датата от полето dt и покажете нова датав полето dt_plus_30d;
2) добавете 1 месец към датата от полето dt и покажете новата дата в полето dt_plus_1m:

ИЗБЕРЕТЕ dt, dateadd("d",30,dt) AS dt_plus_30d, dateadd("m",1,dt) AS dt_plus_1m


ОТ m_доход;

SQL заявка Q046.Функцията DateDiff е предназначена да изчислява разликата между две дати в различни единици (дни, месеци или години). Следната заявка изчислява разликата между датата в полето dt и текущата дата в дни, месеци и години:

ИЗБЕРЕТЕ dt, DateDiff("d",dt,Date()) КАТО последен_ден,


DateDiff("m",dt,Date()) КАТО last_months,
DateDiff("yyyy",dt,Date()) КАТО last_years
ОТ m_доход;

SQL заявка Q047.Броят на дните се изчислява от деня на получаване на стоките (таблица m_income) до текуща датас помощта на функцията DateDiff и датата на изтичане се сравнява (таблица m_product):


DateDiff("d",dt,Date()) КАТО last_days
FROM m_income AS a INNER JOIN m_product AS b
НА a.product_id=b.id;

SQL заявка Q048.Изчислява се броят на дните от датата на получаване на стоките до текущата дата, след което се проверява дали този брой надвишава срока на годност:

ИЗБЕРЕТЕ a.id, product_id, dt, lifedays,


DateDiff("d",dt,Date()) AS last_days, IIf(last_days>lifedays,"Yes","No") AS date_expire
FROM m_income a INNER JOIN m_product b
НА a.product_id=b.id;

SQL заявка Q049.Изчислява се броя на месеците от датата на получаване на стоките до текущата дата. Колоната month_last1 изчислява абсолютния брой месеци, колоната month_last2 изчислява броя на пълните месеци:

ИЗБЕРЕТЕ dt, DateDiff("m",dt,Date()) КАТО month_last1,


DateDiff("m",dt,Date())-iif(day(dt)>day(date()),1,0) AS month_last2
ОТ m_доход;

SQL заявка Q050.Показана е тримесечна справка за количеството и сумата на получените стоки за 2011 г.:

ИЗБЕРЕТЕ kvartal, SUM(резултат_сума) AS Общо


ОТ (ИЗБЕРЕТЕ сума*цена КАТО сума_изход, месец(dt) КАТО m,
SWITCH(m =10.4) AS квартал
FROM m_income WHERE година(dt)=2011) AS t
ГРУПИРАНЕ ПО блок;

Заявка Q051.Следната заявка помага да разберете дали потребителите са успели да въведат в системата информация за потреблението на стоки за сума, по-голяма от сумата на получаване на стоките:

ИЗБЕРЕТЕ product_id, SUM(in_sum) КАТО доход_sum, SUM(out_sum) AS outcome_sum


FROM (ИЗБЕРЕТЕ product_id, сума*цена като in_sum, 0 като out_sum
от m_income
СЪЮЗ ВСИЧКИ
ИЗБЕРЕТЕ product_id, 0 като in_sum, сума*цена като out_sum
от m_резултат) AS t
ГРУПИРАНЕ ПО product_id
ИМАЩ SUM(in_sum)
Заявка Q052.Номерирането на редовете, върнати от заявката, се реализира по различни начини. Например, можете да преномерирате редовете на отчет, изготвен в MS Access, като използвате самия MS Access. Можете също така да преномерирате, като използвате езици за програмиране, например VBA или PHP. Понякога обаче това трябва да се направи в самата SQL заявка. И така, следната заявка ще номерира редовете на таблицата m_income в съответствие с възходящия ред на стойностите на полето ID:

ИЗБЕРЕТЕ COUNT(*) като N, b.id, b.product_id, b.amount, b.price


FROM m_income a INNER JOIN m_income b ON a.id GROUP BY b.id, b.product_id, b.amount, b.price;

Заявка Q053.Показани са първите пет сред продуктите по обем на продажбите. Изходът на първите пет записа се извършва с помощта на инструкцията TOP:

ИЗБЕРЕТЕ ТОП 5, product_id, sum(amount*price) AS summa


ОТ m_резултат
ГРУПИРАНЕ ПО product_id
ORDER BY сума(сума*цена) DESC;

Заявка Q054.Показани са първите пет сред продуктите по обем на продажбите и редовете са номерирани като резултат:

SELECT COUNT(*) AS N, b.product_id, b.summa


ОТ


FROM m_outcome GROUP BY product_id) КАТО a
ВЪТРЕШНО СЪЕДИНЕНИЕ
(ИЗБЕРЕТЕ product_id, sum(amount*price) AS summa,
summa*10000000+product_id AS id
FROM m_outcome GROUP BY product_id) AS b
НА a.id>=b.id
ГРУПИРАНЕ ПО b.product_id, b.summa
ИМАЩ БРОЙ (*) ПОРЪЧКА ПО БРОЙ (*);

Заявка Q055.Следната SQL заявка показва използването на математическите функции COS, SIN, TAN, SQRT, ^ и ABS в MS Access SQL:

SELECT (изберете count(*) от m_income) като N, 3.1415926 като pi, k,


2*pi*(k-1)/N като x, COS(x) като COS_, SIN(x) като SIN_, TAN(x) като TAN_,
SQR(x) като SQRT_, x^3 като "x^3", ABS(x) като ABS_
ОТ (ИЗБЕРЕТЕ БРОЙ(*) КАТО k
FROM m_income AS a INNER JOIN m_income AS b ON a.idGROUP BY b.id) t;

SQL заявка. Примери в MS Access. АКТУАЛИЗАЦИЯ: 1-10

Заявка U001.Следната SQL заявка за промяна увеличава цените на елементи с код 3 в таблицата m_income с 10%:

АКТУАЛИЗАЦИЯ m_income SET цена = цена*1.1


WHERE product_id=3;

Заявка U002.Следната SQL заявка за актуализиране увеличава количеството на всички продукти в таблицата m_income с 22 единици, чиито имена започват с думата "Butter":

АКТУАЛИЗАЦИЯ m_income SET сума = сума+22


WHERE product_id IN (SELECT id FROM m_product WHERE заглавие LIKE "Oil*");

Заявка U003.Следната SQL заявка за промяна в таблицата m_outcome намалява цените на всички стоки, произведени от OOO Sladkoe с 2 процента:

АКТУАЛИЗАЦИЯ m_outcome SET цена = цена*0,98


WHERE product_id IN
(ИЗБЕРЕТЕ a.id ОТ m_product a INNER JOIN m_supplier b
ON a.supplier_id=b.id WHERE b.title="OOO"Сладкое"");. !}