Sql изявления за достъп. Запознаване със SQL изявления; създаване на най -простите SQL заявки в Access с помощта на командата SELECT, използвайки инструкциите IN, BETWEEN, LIKE

SQL езикът няма функциите на пълноценен език за разработка, но е фокусиран върху достъпа до данни, поради което е включен в инструментите за разработка на програмата. В този случай се нарича вграден SQL.Стандартът на езика SQL се поддържа от съвременни реализации на следните езици за програмиране: PL / 1, Ada, C, COBOL, Fortran, MUMPS и Pascal.

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

Има два основни метода за използване на вградения SQL: статичен и динамичен.

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

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

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

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



За удобство при работа с изгледи, концепцията за курсор е въведена в езика на SQL. Курсоре вид указател, използван за навигация през наборите от записи, докато се обработват.

Описанието и използването на курсора на езика SQL е следното. В описателната част на програмата свързвате променлива CURSOR към SQL израз (обикновено израз SELECT). В частта от програмата, която се изпълнява, курсорът се отваря (ОТВОРЕН<имя курсора», перемещение курсора по записям (FETCI-1 <имя курсора>...), последвано от подходящо боравене и накрая затваряне на курсора (ЗАТВОРИ<имя курсора>).

В релационните СУБД за извършване на операции върху отношенията се използват две групи езици, които имат за математическа основа теоретичните езици за заявки, предложени от Е. Код:

Релационна алгебра;

Релационно смятане.

В релационната алгебраоперандите и резултатите от всички действия са взаимоотношения. Езиците на релационната алгебра са процедурни, тъй като релацията, получена от заявка срещу релационна база данни, се изчислява чрез изпълнение на поредица от релационни оператори, приложени към релацията. Операторите се състоят от релационни операнди и релационни операции.

Операциите на релационната алгебра на Код могат да бъдат разделени на две групи: основни теоретични множества и специални релационни... Първата група операции включва класическите операции на теорията на множествата: обединение, разлика, пресичане и продукт. Втората група представлява разработването на конвенционални теоретико-множествени операции към реални проблеми на манипулирането на данни, включва операции: проектиране, подбор, разделяне и свързване.

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

Характеристики на приложението SQL заявки

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

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

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

Контролна заявка създава или променя обекти на база данни, като например таблици на Access или таблици на SQL Server.

Подзаявката се състои от SQL SELECT израз в друга заявка за избор или промяна. Тези инструкции се въвеждат в реда Поле на формуляра за заявка, за да се определи ново поле, или в реда Критерии, за да се определи условие за избор на поле. Подчинените заявки се използват за следното:

Проверка на съществуването на някои резултати в подзаявка, като се използват запазените думи EXISTS или NO EXISTS;

Търсете в основната заявка всички стойности, които са равни, по -големи или по -малки от стойностите, върнати в подзаявката (използвайки запазените думи ANY, IN или ALL);

Създаване на подчинени заявки в рамките на подчинени заявки (вложени подчинени заявки).

Езикът SQL в Access може да се използва при разработването на дисплеи, отчети, както и при създаването на макроси и VBA програми.

Връзка между QBE и SQL

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

В Access заявката може да бъде в един от трите режима (състояния): Проектиране, SQL и Таблица. Режимът на проектиране се използва за проектиране на нова заявка от нулата (без използване на съветници или други инструменти) или за промяна на оформлението на съществуваща заявка. Режимът SQL се използва за въвеждане или преглед на SQL изрази. Режимът на таблица се използва за работа с резултатите от заявка.

SQL във формуляри и отчети

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

SQL в макроси

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

Макросите се извикват от прозореца на базата данни или автоматично при възникване на определени събития. Събитието, чрез което се извиква макросът, може да бъде например натискане на бутон в областта на формуляра или отваряне на прозорец на база данни. Наред с извършването на някои действия върху обекти от базата данни, макросите могат да извикват други макроси, програми на Visual Basic и външни приложения.

От многото макроси два макроса са пряко свързани със SQL: Стартирайте SQL и OpenQuery

Макро изпълнение на SQL заявкаизпълнява заявка за промяна или контрол на Access, използвайки съответния SQL израз. Този макрос дава възможност да се извършват действия в макрос, без първо да се записват заявките. Запазените заявки също могат да се изпълняват с помощта на макрос.

Заявки за промянаса SQL изрази, които изпълняват следните функции: добавяне (INSERT INTO), изтриване (DELETE), създаване на таблица (SELECT ... INTO) и актуализиране (UPDATE)

Контролни заявкиса SQL изрази, които изпълняват следните функции: създават таблица (CREATE TABLE), променят таблица (ALTER TABLE), пускат таблица (DROP TABLE), създават индекс (CREATE INDEX) и изпускат индекс (DROP INDEX)

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

Макро Отворете заявкатави позволява да отворите заявка за избор или кръстоска (в режими на таблица, дизайн и визуализация), да изпълните заявка за редактиране или въвеждане на данни.

Макросът приема три аргумента: името на заявката, режима и режима на данни. Първият аргумент е името на заявката за отваряне и е задължителен. Вторият аргумент задава режима на отваряне на заявката (таблица, дизайн и изглед). Третият аргумент описва начина на въвеждане на данни в заявката („Добавяне“, „Промяна“ и „Само за четене“)

SQL във VBA програми

VBA, подобно на макросите, е проектиран да автоматизира повтарящи се операции върху обекти на базата данни на Access.

Access предоставя следните начини за стартиране на VBA програми:

Включване на програмата в процедурата за обработка на събития;

Извикване на функция в израз;

Извикване на подпроцедура в друга процедура или в прозорец за отстраняване на грешки;

Изпълнение на макроса RunCode в макрос.

Функциите се използват в изрази, които определят изчислени полета във формуляри, отчети или заявки. Изразите се използват за задаване на условия в заявки и филтри, както и в макроси, VBA изрази и методи и SQL изрази. Подпроцедурата може да включва публични VBA процедури, които се извикват от други процедури.

Нека да разгледаме как да изпълним заявка към база данни, използвайки SQL изрази в програма Visual Basic for Applications.

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

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

Извикване на метода Execute (за изпълнение на заявки за промяна на SQL);

Създаване и изпълнение на специален обект QueryDef;

Използване на SQL израз като аргумент на метода OpenRecordset;

Изпълнение на метода OpenRecordset върху съществуващ QueryDef обект;

Извикване на методи RunSQL и OpenQuery.

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

QueryDef обекте дефинирана заявка в базата данни. Може да се мисли като компилиран SQL израз.

Метод OpenRecordsetсе използва за отваряне на обект от тип Recordset за последващи операции върху него.

Метод RunSQLизпълнява макрос Изпълнение на SQL заявкав програма VBA

Метод на OpenQueryизпълнява макроса OpenQuery във програма VBA. Може да се използва за отваряне на заявка в режим Таблица, Дизайн или Изглед. Това задава един от следните режими на работа с данни: добавяне, промяна или само за четене.

Изборът на опцията за изпълнение на заявка се определя от програмиста, като се вземат предвид особеностите на решаващия се проблем.

Предишните статии обхващаха проблемите. Разгледана е технологията за създаване на структурата на таблиците на базата данни "sql_training_st.mdb" въз основа на SQL заявки. Освен това, използвайки SQL заявки, таблиците на базата данни ACCESS "sql_training_st.mdb" бяха попълнени.

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

SQL езикът се състои от четири групи:

  • език за манипулиране на данни DML;
  • език за дефиниране на данни DDL;
  • език за управление на данни DCL;
  • език за управление на транзакции TCL.

Групата DML включва четири основни типа SQL заявки:

  • INSERT - предназначен за добавяне на един или повече записи в края на таблицата;
  • UPDATE - предназначен за промяна на съществуващи записи в колони на таблица или промяна на данни в таблица;
  • DELETE - предназначен за изтриване на записи от таблицата;
  • SELECT - предназначен за избор на данни от таблици.

Първите три типа SQL заявки (INSERT, UPDATE, DELETE), които са свързани с коригиращи заявки към базата данни, бяха обсъдени на страницата

В тази статия ще разгледаме заявки за извличане на данни от таблици на базата данни на Access.

За да извлечете информация, съхранена в база данни на Access 2003 или 2007, можете да използвате заявка SELECT, за да изберете данни от таблици.

Нека съставим следната SQL заявка (SQL израз) за селекцията, за това избираме SQL режима, като изпълним командата View / SQL Mode. Въведете следния SQL израз от клавиатурата:

SELECT *
ОТ Студенти;

Това изявление се състои от две клаузи „SELECT *“ и „FROM Students“. Първата клауза съдържа оператор SELECT и идентификатор * ("идентификатор *" означава показване на всички колони в таблицата). Втората клауза съдържа клаузата FROM и идентификационния номер "Студенти".

FROM - дефинира таблицата "Студенти", която съдържа полетата, посочени в клаузата SELECT. Трябва да се отбележи, че винаги има две инструкции в заявка за избор: SELECT и FROM. В заявката за подбор могат да присъстват и други оператори, в зависимост от условията за подбор. Фигура 1 показва екранна снимка на заявка за извличане на данни.


Ориз. 1.SLECT заявка за избор на данни

В този пример се формира извадка от данни от всички колони на таблицата „Ученици“.

Запазваме заявката с името "Студентска заявка1". В резултат на изпълнението на командата „Запазване“ обект ще се появи в „Навигационния панел“ - „Заявки: Студенти -заявка1“.

След като запишете заявката си за избор, трябва да изпълните заявката, като щракнете върху иконата Изпълнение. Резултатите от командата "Run" са показани на фиг. 2.



Ориз. 2. Извличане на данни от всички колони на таблицата „Ученици“


Сравнение на Microsoft Access SQL и ANSI SQL Microsoft Access SQL е предимно ANSI-89 (Ниво 1) Някои функции на ANSI SQL не се използват в Microsoft Access SQL Microsoft Access SQL използва запазени думи и функции, които не се поддържат от ANSI SQL In Access 2000 (MS Jet 4.0 ) добавени разширения, които приближават езика до стандарта ANSI SQL -92 - режимът е достъпен само при използване на MS OLE DB доставчик за Jet


Синтаксис на командата SELECT (Microsoft Access) SELECT [предикат] ( * | таблица. * | [Таблица.] Поле_1 [, [таблица.] Поле_2 [, ...]]) FROM израз [, ...] FROM клауза SELECT списък От изрази на полета Изразът е израз, който определя една или повече таблици, от които да се извличат данни. Този израз може да бъде името на отделна таблица, името на запазена заявка или резултат от операция INNER JOIN, LEFT JOIN или RIGHT JOIN. ВЪТРЕШНО ПРИСЪЕДИНЯВАНЕ, НАЛЯВО СЪЕДИНЯВАНЕ НАДЕСНО.


Аргументи за изявление SELECT Предикат (ALL, DISTINCT, DISTINCTROW или TOP) е един от критериите за подбор. Предикати се използват за ограничаване на броя на върнатите записи. Ако те липсват, предикатът ALL се използва по подразбиране (избира всички записи, които отговарят на условията, посочени в SQL израза). SQL DISTINCT - изключва записи, които съдържат дублирани стойности в избраните полета. DISTINCTROW - Пропуска данни въз основа на изцяло повтарящи се записи, а не на отделни повтарящи се полета. Предикатът DISTINCTROW се игнорира, ако заявката съдържа само една таблица или всички полета на всички таблици. TOP n - Връща определен брой записи в началото или края на диапазона, описан с помощта на клаузата ORDER BY. ИЗБЕРЕТЕ]] ОТ таблица на 5 -те най -многобройни отдела: ИЗБЕРЕТЕ ТОП 5 служители. [Код на отдел], Брой (име на служител) КАТО номер_на_заети лица ОТ служител ГРУПА ПО служител. [Код на отдел] ПОРЪЧАЙТЕ Брой (име на служител) DESC;


Аргументи за изявление SELECT Таблицата е името на таблицата, от която трябва да се избират записи. С ОПЦИЯ СОБСТВЕН ДОСТЪП - Използва се в многопотребителска среда със защитена работна група, за да предостави на потребителя, работещ с разрешенията за заявка, които съответстват на тези на собственика на заявката. field_1, field_2 - имената на полетата, от които трябва да се избират данните. Ако включите няколко полета, те ще бъдат извлечени в показания ред. Псевдоним_1, Псевдоним_2 са имена, които ще станат заглавия на колони вместо оригиналните имена на колони в таблицата. Expression - имената на една или повече таблици, които съдържат избраните данни External Database - името на базата данни, която съдържа таблиците, посочени с помощта на аргумента за израз, ако те не са в текущата база данни. SELECT служител, пълно име, [заплата] * 0,5 AS Бонус ОТ служител; ИЗБЕРИ Ср. (Служител.отчет) КАТО Среден_порт ОТ служител;


Съвместна обработка на няколко таблици SELECT име на служител, предмет. [Име на темата кратко] ОТ служител ВЪТРЕШНО ПРИСЪЕДИНЯВАНЕ (предмет ВЪТРЕШНО ПРИСЪЕДИНЯВАНЕ [притежание на теми] НА тема. [Код на предмет] = [притежание на теми]. [Код на дисциплината]) ВКЛ. код на служител = [притежание на артикули]. [код на служител];




Между ... И израз 1 МЕЖДУ израз 2 И израз 3 (в Microsoft Access SQL израз 2 може да бъде по -голям от израз 3, но в ANSI SQL не е). ИЗБЕРИ име на служител, служител.отчет ОТ служител КЪДЕ (((служител.доклад) Между 1000 и 2000 г.)); Заявка: ИЗБЕРИ име на служител, доклад за служител ОТ служител КЪДЕ (((служител.отчет) Между 2000 г. и 1000 г.)); не дава грешка и дава същия отговор ИЗБЕРИ служител.име, служител.отчет ОТ служител КЪДЕ (((служител.отчет) 15000)); ИЗБЕРИ име на служител, служител.отчет ОТ служител КЪДЕ (((служител.отчет) Не между 1000 и 2000 г.));


Шаблонни символи С предиката Like ми се използват различни знаци на шаблона. MS Access SQL ANSI SQL модел модел един знак? _ (подчертаване) група от символи *% единичен знак в char-list [char-list] липсва единичен знак, който не е в char-list [! char_list] липсва Последните две функции са само за достъп В Access 2000 режимът ANSI SQL-92 може да използва заместващи знаци ANSI. Не можете да смесвате знаци в една заявка ИЗБЕРЕТЕ служител.ОТ служител КЪДЕ (((служител. Пълно име) Като "D *"));


Списък на клауза GROUP BY SELECT на полета от таблица WHERE условие за избор, при което групирането на полета са имената на полетата (до 10), които се използват за групиране на записи. Редът на имената на полета в аргумента Groupable Field определя нивото на групиране за всяко от тези полета. Използвайте клаузата WHERE, за да изключите записите от групирането, и клаузата HAVING, за да приложите филтър към записите след групирането. HAVING Когато използвате клаузата GROUP BY, всички полета в списъка с полета на израза SELECT трябва или да бъдат включени в клаузата GROUP BY, или да бъдат използвани като аргументи на SQL агрегирана функция. Отдели с повече от 5 служители: SELECT Employee [Код на отдел], Брой (Пълно име на служител) AS [Number_Employees] FROM Employee GROUP BY Employee [Код на отдел] HAVING (((Count (Пълно име на служителя))>> 5)); 5));">




Вложена заявка. Съществува предикат. SELECT Employee, Count (Employee) AS Number_Certificate_Work FROM Employee WHERE (((Съществува (SELECT DISTINCT Employee, Employee FROM Employee INNER JOIN Ex ON Employee = Copy Employee)) False)) ГРУПА ПО фирма на служител; False)) GROUP BY компания на служител; "> False)) GROUP BY компания на служител;"> False)) GROUP BY компания на служител; "title =" (! LANG: Подзапитване. Предикат съществува. SELECT компания на служител, брой (служител на служител) AS Number_Cattest_ Employee FROM Employee WHERE (((Съществува (SELECT DISTINCT Employee Company, Employee Employee FROM Employee INNER JOIN Copy ON Employee = Copy Employee)) False)) GROUP BY Employee Company;"> title="Вложена заявка. Съществува предикат. SELECT Employee, Count (Employee) AS Number_Certificate_Work FROM Employee WHERE (((Съществува (SELECT DISTINCT Employee, Employee FROM Employee INNER JOIN Ex ON Employee = Copy Employee)) False)) ГРУПА ПО фирма на служител;"> !}








Създаване на подзаявка с помощта на QBE Query Builder Ако използвате подзаявка за определяне на условия за поле, въведете оператор SELECT в клетка в реда Критерии в колоната на това поле. Изразът SELECT трябва да бъде заграден в скоби.








Изтриване на записи. SQL заявка (генерирана) DELETE DISTINCTROW student.FULLNAME FROM student WHERE (((student.FULLNAME) = "Burlak GN"));


Декларация DELETE Искане за изтриване изтрива целия запис, а не само съдържанието на посочените полета. За да изтриете данни за конкретно поле, създайте заявка за актуализация на запис, която замества съществуващите стойности с нулеви стойности Изтрийте заявката без дадени условия lookup ще изтрие всички записи от таблицата. За разлика от командата DROP, структурата на таблицата и всички свойства се запазват.


Изтриване на записи. SQL заявка Заявка: DELETE * FROM student WHERE student.Full name = "Burlak GN"; дава подобен резултат.



















35





41



Създаване на таблица за проектиране на енергия с DDL

Всичко, което можете да направите, за да дефинирате база данни с помощта на RAD инструмент като Access, може да се направи и с помощта на SQL. В този случай, вместо да щраквате върху елементи от менюто, въвеждате команди с помощта на клавиатурата. Тези, които предпочитат да манипулират графики, откриват, че RAD инструментите са лесни и естествени за разбиране и учене. Други, които предпочитат да поставят думи в изречения, които имат определена логика, смятат, че SQL командите са по -лесни и по -естествени. Тъй като някои неща са лесни за представяне с помощта на парадигмата на обекта, а други са лесни за справяне с помощта на SQL, е полезно да сте запознати с двата метода.

В следващите раздели ще използвате SQL, за да изпълните същите стъпки за създаване, промяна и пускане на таблица, която сте използвали RAD инструмента в предишния раздел.

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

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

  1. Отворете базата данни и след това изберете опцията Заявки от списъка Обекти.
  2. В панела със задачи от дясната страна на прозореца изберете опцията Създаване на заявка в режим на проектиране. Показва се диалоговият прозорец Добавяне на таблица.
  3. Изберете някоя от таблиците, щракнете върху бутоните Добавяне и Затваряне. Игнорирайте мигащия курсор в новосъздадения прозорец Заявка.
  4. В главното меню на Access изберете View SQL Mode. Показва се прозорец на редактор с начален SQL SELECT израз.
  5. Премахнете оператора SELECT и след това въведете необходимия SQL израз.
  6. Когато приключите, кликнете върху иконата Запазване. Access ви подканва да въведете име за новосъздаденото на това искане.
  7. Въведете име за заявката и щракнете върху бутона OK.

Командата, която току -що създадохте, ще бъде запазена и изпълнена по -късно като заявка. За съжаление Access не изпълнява пълния набор от SQL команди. Например, тя не изпълнява командата CREATE TABLE. Въпреки това, след като таблицата е създадена, можете да извършите почти всяка желана трансформация на данните в нея.

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

Когато работите с пълнофункционална СУБД, като Microsoft SQL Server, Oracle 9i или IBM DB2, трябва да въведете същата информация, когато създавате таблица с помощта на SQL, както бихте направили, когато създавате таблица с помощта на RAD инструмент. Разликата тук е, че инструментът RAD ви помага да направите това, като ви предоставя диалогов прозорец за създаване на таблица (или някаква подобна структура) и не ви позволява да влезете грешни именаполета, видове или размери. SQL няма да ви обърне толкова внимание. Когато работите с SQL, трябва да знаете точно какво да правите още от самото начало. Трябва да въведете цял израз CREATE TABLE, преди SQL да може да му обърне внимание, камо ли да ви каже дали има някакви грешки в израза.

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

СЪЗДАЙТЕ ТАБЛИЦА PowerSQL
Номер на предложението МАЛКИ ИНТ
Първо име CHAR (15),
Фамилия CHAR (20),
Адрес CHAR (30),
Град CHAR (25),
ЩатПровинция CHAR (2),
Пощенски код CHAR (10),
Страна CHAR (30),
Телефон CHAR (14),
HowKnown CHAR (30),
Предложение CHAR (50),
BusinOrCharity CHAR (1);

Както можете да видите, информацията по същество е същата като при създаването на таблица с помощта на RAD инструменти (както е описано по -рано в тази глава). Може да се предпочита всеки метод за създаване на таблици. Това, което е добро за SQL обаче, е неговата гъвкавост. Същият стандартен синтаксис ще работи във всяка система за управление на бази данни.

Помня:
Всяко усилие, положено изучаване на SQL, ще бъде оправдано дълго време, защото този език няма да напусне бързо сцената. А усилията, вложени в това да станете експерт в средата за развитие, вероятно ще донесат по -малко възвръщаемост. И колкото и да е страхотен най -новият инструмент за RAD, бъдете сигурни, че той ще бъде заменен от по -модерна технология в рамките на две до три години. Чудесно е, ако през това време можете да възстановите усилията, които сте положили за учене този инструмент! Използвайте го, ако можете. И ако не можете, тогава ще бъде по -разумно да се придържате към старото и изпитано лекарство. Познаването на SQL ще изплати дивиденти много по -дълго
.

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

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

SELECT *
ОТ m_product
WHERE id IN (SELECT product_id FROM m_income);

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

SELECT *
ОТ m_product
WHERE id NOT IN (SELECT product_id FROM m_outcome);

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

SELECT DISTINCT product_id, заглавие
ОТ m_income ВЪТРЕШНО ПРИСЪЕДИНЯВАНЕ m_product
ON m_income.product_id = m_product.id
КЪДЕ product_id NOT IN (SELECT product_id FROM m_outcome);

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

SELECT DISTINCT заглавие
ОТ m_product
КЪДЕ заглавието КАТО "М *";

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

Цена, сума * цена КАТО резултат_сума,
сума * цена / 100 * 7 AS печалба
ОТ m_outcome;

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


result_sum * 0,07 AS печалба
ОТ m_outcome;

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

SELECT c.title, b.title, dt, сума, цена, сума * цена КАТО доход_сума
ОТ (m_income КАТО ВЪТРЕШНО ПРИСЪЕДИНЯВАНЕ m_product AS b ON a.product_id = b.id)
ВЪТРЕШНО ПРИСЪЕДИНЯВАНЕ m_category AS c ON ON b.ctgry_id = c.id
ПОРЪЧАЙТЕ по c.title, b.title;

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

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

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


SELECT Сума (сума) AS Amount_Sum, AVG (сума) AS Amount_AVG,
MAX (сума) AS Amount_Max, Min (сума) AS Amount_Min,
Брой (*) AS Общ_номер
ОТ m_income;

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

SELECT
ОТ m_income
КЪДЕ product_id = 1 И dt МЕЖДУ # 6/1/2011 # И # 30.06.2011 #;.

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

SELECT
ОТ m_outcome
КЪДЕ product_id = 4 ИЛИ product_id = 6;

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

SELECT Сума (сума * цена) КАТО резултат_сума
ОТ m_outcome
КЪДЕ (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 за определяне на категорията на всеки капитализиран продукт;
- изчисляване на сумата на касовия бон (= количество * цена) за стоки, чиято категория код е равна на кода, определен от горната подзаявка.


ОТ m_product КАТО ВЪТРЕШНО ПРИСЪЕДИНЯВАНЕ m_income AS b ON a.id = b.product_id
WHERE ctgry_id = (SELECT id FROM m_category WHERE title = "(! LANG: Пекарна"); !}

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

SELECT Сума (сума * цена) КАТО доход_сума
ОТ (m_product КАТО ВЪТРЕШНО ПРИСЪЕДИНЯВАНЕ m_income AS b ON a.id = b.product_id)
КЪДЕ c.title = "(! LANG: Пекарна"; !}

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

SELECT COUNT (product_id) AS product_cnt
FROM (SELECT DISTINCT product_id FROM m_outcome) AS t;

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

SELECT заглавие, сума (сума * цена) КАТО резултат_сума
ОТ m_product КАТО ВЪТРЕШНО ПРИСЪЕДИНЯВАНЕ m_outcome AS b
ON a.id = b.product_id
GROUP BY заглавие;

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

SELECT c.title, SUM (сума * цена) AS result_sum,
КРЪГЛО (AVG (сума * цена), 2) КАТО резултат_sum_avg
ОТ (m_product КАТО ВЪТРЕШНО ПРИСЪЕДИНЯВАНЕ m_outcome AS b ON a.id = b.product_id)
ВЪТРЕШНО ПРИСЪЕДИНЯВАНЕ m_category AS c ON a.ctgry_id = c.id
GROUP BY c.title;

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

SELECT product_id, SUM (сума) AS сума_sum,
Кръгла (Ср. (Сума), 2) КАТО сума_авг
ОТ m_income
GROUP BY product_id
ИМАЩА сума (сума)> = 500;

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

SELECT заглавие, SUM (сума * цена) КАТО доход_сума
ОТ m_income a INNER JOIN m_product b ON a.product_id = b.id
КЪДЕ ДТ МЕЖДУ # 4/1/2011 # И # # 30/06/2011 #
GROUP BY заглавие
ИМАЩА СУММА (сума * цена)> = 1000;

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

SELECT * FROM m_income, m_outcome;

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


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

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

ИЗБЕРЕТЕ идентификатор на доставчик, идентификатор на продукт, SUM (сума) AS сума_сума,
SUM (сума * цена) КАТО резултат_сума
GROUP BY идентификатор_на_идентификатор, идентификатор_продукт;

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

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

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

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

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

SELECT product_id, SUM (in_amount) AS доход_amount,
SUM (out_amount) AS резултат_amount
ОТ
(SELECT product_id, сума AS in_amount, 0 AS out_amount
ОТ m_income
СЪЮЗ ВСИЧКИ
SELECT product_id, 0 AS in_amount, сума AS out_amount
ОТ m_outcome) КАТО t
GROUP BY product_id;

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

SELECT DISTINCT product_id
ОТ m_income AS a
КЪДЕ СЪЩЕСТВУВА (ИЗБЕРЕТЕ идентификатор на продукт ОТ m_изход КАТО b

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

SELECT DISTINCT product_id
ОТ m_income AS a
WHERE product_id IN (SELECT product_id FROM m_outcome)

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

SELECT DISTINCT product_id
ОТ m_income AS a
КЪДЕ НЕ СЪЩЕСТВА (ИЗБЕРЕТЕ product_id ОТ m_outcome AS b
КЪДЕ b.product_id = a.product_id);

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

SELECT product_id, SUM (сума * цена) AS сума_sum
ОТ m_outcome
GROUP BY product_id
HAVING SUM (сума * цена) = (SELECT MAX (s_amount)
FROM (SELECT SUM (сума * цена) AS s_amount FROM m_outcome GROUP BY product_id));

Заявка Q040.Запазена дума IIF ( условен оператор) се използва за оценка логически изрази извършване на едно или друго действие в зависимост от резултата (TRUE или FALSE). В следния пример доставката на артикул се счита за „малка“, ако количеството е по -малко от 500. В противен случай, тоест количеството на касовата бележка е по -голямо или равно на 500, доставката се счита за „голяма“:

SELECT dt, product_id, сума,
IIF (сума<500,"малая","большая") AS mark
ОТ m_income;

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

SELECT dt, product_id, сума,
SWITCH (сума<500,"малая",amount>= 500, "голям") AS марка
ОТ m_income;

Заявка Q042. <300 не выполняется, то проверяется является ли количество товаров в партии меньше 500. Если размер партии меньше 500, то она считается «средней». В противном случае партия считается «большой»:

SELECT dt, product_id, сума,
IIF (сума<300,"малая",
IIF (сума<1000,"средняя","большая")) AS mark
ОТ m_income;

SQL заявка Q043.В следващата заявка, ако количеството стоки в получената партида е по -малко от 300, тогава партидата се счита за „малка“. В противен случай, тоест ако условието за сумата<300 не выполняется, то проверяется является ли количество товаров в партии меньше 500. Если размер партии меньше 500, то она считается «средней». В противном случае партия считается «большой»:

SELECT dt, product_id, сума,
SWITCH (сума<300,"малая",
количество<1000,"средняя",
сума> = 1000, "голям") AS знак
ОТ m_income;

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

SELECT Категория, SUM (result_sum) AS Ctgry_Total
ОТ (ИЗБЕРЕТЕ сума * цена КАТО резултат_сума,
IIf (сума * цена<150,"малая",
IIf (сума * цена<300,"средняя","большая")) AS Category
ОТ m_outcome) КАТО t
ГРУПА ПО КАТЕГОРИЯ;

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

SELECT dt, dateadd ("d", 30, dt) AS dt_plus_30d, dateadd ("m", 1, dt) AS dt_plus_1m
ОТ m_income;

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

SELECT dt, DateDiff ("d", dt, Date ()) AS last_day,
DateDiff ("m", dt, Date ()) КАТО последните_месеци,
DateDiff ("гггг", dt, Date ()) КАТО последните_години
ОТ m_income;

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


DateDiff ("d", dt, Date ()) КАТО последните_дни
ОТ m_income КАТО ВЪТРЕШНО ПРИСЪЕДИНЯВАНЕ m_product AS b
ON a.product_id = b.id;

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

SELECT a.id, product_id, dt, lifedays,
DateDiff ("d", dt, Date ()) AS last_days, IIf (last_days> lifedays, "Yes", "No") AS date_expire
ОТ m_income a INNER JOIN m_product b
ON a.product_id = b.id;

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

SELECT dt, DateDiff ("m", dt, Date ()) AS month_last1,
DateDiff ("m", dt, Date ()) - iif (ден (dt)> ден (дата ()), 1,0) AS месец_last2
ОТ m_income;

SQL заявка Q050.Извежда се тримесечен отчет за количеството и количеството стоки, капитализирани за 2011 г.:

SELECT kvartal, SUM (result_sum) AS Общо
ОТ (ИЗБЕРЕТЕ сума * цена КАТО резултат_сума, месец (dt) КОМ m,
ПЕРЕКЛЮЧАТЕЛ (м<4,1,m<7,2,m<10,3,m>= 10.4) AS kvartal
ОТ m_income КЪДЕ година (dt) = 2011) КАТО t
GROUP BY kvartal;

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

SELECT product_id, SUM (in_sum) AS доход_sum, SUM (out_sum) AS result_sum
ОТ (SELECT product_id, сума * цена като in_sum, 0 като out_sum
от m_income
СЪЮЗ ВСИЧКИ
SELECT product_id, 0 като in_sum, сума * цена като out_sum
от m_outcome) AS t
GROUP BY product_id
ИМАЩА СУММА (in_sum)

Заявка Q052.Номерирането на редове, върнати от заявка, се реализира по различни начини. Например, можете да преномерирате редовете на доклад, изготвен в MS Access, посредством самия MS Access. Можете също така да преномерирате, като използвате езици за програмиране като VBA или PHP. Понякога обаче това трябва да се направи в самата SQL заявка. И така, следната заявка ще номерира редовете на таблицата m_income според възходящия ред на стойностите на полето ID:

SELECT COUNT (*) като N, b.id, b.product_id, b.amount, b.price
ОТ m_income a INNER JOIN m_income b ON a.id<= b.id
GROUP BY b.id, b.product_id, b.amount, b.price;

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

ИЗБЕРЕТЕ ТОП 5, product_id, сума (сума * цена) КАТО сума
ОТ m_outcome
GROUP BY product_id
ПОРЪЧАЙТЕ по сума (сума * цена) DESC;

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

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

ОТ m_outcome ГРУПА ПО product_id) КАТО a
ВЪТРЕШНО ПРИСЪЕДИНЯВАНЕ
(SELECT product_id, сума (сума * цена) AS сума,
сума * 10000000 + product_id AS id
ОТ m_outcome ГРУПА ПО product_id) КАТО b
ON a.id> = b.id
GROUP BY b.product_id, b.summa
ИМАШЕ БРОЙ (*)<=5
ПОРЪЧАЙТЕ ПО БРОЙ (*);

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

SELECT (изберете брой (*) от 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
ОТ m_income КАТО ВЪТРЕШНО ПРИСЪЕДИНЯВАНЕ m_income AS b ON a.id<=b.id
GROUP BY b.id) t;



Свързани статии: