Вметнување, бришење, ажурирање записи во базата на податоци. Како да испратите барање до базата на податоци во VBA Access Креирање sql пребарувања во имењаци за пристап

Лабораторија #1

SQL: RETRIEVE DATA - командаИЗБЕРИ

Цел на работата:

  • Запознајте се со SQL изјавите
  • научете како да креирате едноставни SQL барања во Access користејќи ја командата SELECT;

· употребата на оператори IN, BETWEEN, LIKE, IS NULL.

Вежбајте№1. Создадете барање за да ги изберете во режимот SQL сите вредности на полињата ИМЕ и ПРЕЗИМЕ од табелата STUDENTS.

ИЗБЕРЕТЕ ИМЕ, ПРЕЗИМЕ

ОД СТУДЕНТИ;

Вежбајте№2 . Креирајте барање за избор во режим SQL за сите колони од табелата STUDENTS.

ИЗБЕРИ*

ОД СТУДЕНТИ;


Задача број 3.Направете барање за да ги изберете во режимот SQL имињата на градовите каде што живеат учениците, информации за кои се наоѓаат во табелата ЛИЧНИ ПОДАТОЦИ.

ИЗБЕРЕТЕ РАЗЛИЧЕН ГРАД

ОД [ЛИЧНИ ПОДАТОЦИ];

Задача број 4.Креирајте прашалник за избор во SQL режим кој ги избира имињата на сите студенти со презимето Иванов, чии информации се во табелата СТУДЕНТИ.

ИЗБЕРЕТЕ ПРЕЗИМЕ, ИМЕ

ОД СТУДЕНТИ

КАДЕ ПРЕЗИМЕ="Иванов";

Задача број 5. Направете барање за избор во режим SQL за да ги добиете имињата и презимињата на студентите кои студираат во групата UIT-22 на форма на образование финансирана од буџетот.

ИЗБЕРЕТЕ ПРЕЗИМЕ, ИМЕ

ОД СТУДЕНТИ

WHERE GROUP="HIT-22" И БУЏЕТ=true;

Задача број 6. Креирајте барање во SQL режим. за примерок од табелата ПОЛОЖУВАЊЕ ИСПИТ информации за ученици со оценки само 4 и 5.

ИЗБЕРИ*

ОД[ПРОМЕНИИСПИТИ]

КАДЕОЦЕНКАВО (4,5);

Задача број 7.Креирајте zanpoc и SQL режим за примерок од информации за студенти кои имаат оценка за испит 3 по предметот IOSU.

ИЗБЕРИ*

ОД[ПРОМЕНИИСПИТИ]

КАДЕСТАВКА=" ISSU„ИОЦЕНКАНе во (4,5);

Задача број 8.Креирајте барање во режим SQL за да изберете записи за ставки чии часови се помеѓу 100 и 130.

ИЗБЕРИ*

ОДПРЕДМЕТИ

КАДЕГЛЕДАЈПОМЕЃУ 100 И 130;


Задача број 9.Направете барање во режим SQL за да изберете од табелата STUDENTS информации за студенти чии презимиња започнуваат, на пример, со буквата „C“.

ИЗБЕРИ*

ОДСТУДЕНТИ

КАДЕПРЕЗИМЕДОПАЃА"СО*";

Заклучок:За време на лабораториска работасе запозна со SQL искази, научи како да креира едноставни SQL пребарувања во Access користејќи ја командата SELECT користејќи ги операторите IN, BETWEEN, LIKE.

Оваа лекција е за SQL прашањадо базата на податоци на VBA пристап. Ќе погледнеме како се извршуваат VBA барањата INSERT, UPDATE, DELETE во базата на податоци, а исто така ќе научиме како да добиеме одредена вредност од барањето SELECT.

Оние кои програмираат VBA пристапдодека се работи со базата на податоци SQL Server, многу често се соочуваат со толку едноставна и неопходна задача како испраќање SQL барање до базата на податоци, без разлика дали тоа е INSERT, UPDATE или едноставно SQL SELECT барање. И бидејќи сме почетници програмери, треба да можеме да го правиме и ова, па денес ќе го правиме токму тоа.

Веќе ја допревме темата за добивање податоци од SQL сервер, каде што напишавме код во VBA за да ги добиеме овие податоци, на пример, во една статија за Поставување податоци во текстуална датотека од MSSql 2008 година или исто така допревме малку во материјалот Поставување податоци од Access до шаблон Word и Excel, но на еден или друг начин таму го разгледавме површно, а денес предлагам да зборуваме за тоа малку подетално.

Забелешка! Сите примери подолу се дискутирани со помош на проект АДП на Access 2003 и база на податоци MSSql 2008 година.

Почетни податоци за примери

Да речеме дека имаме табела test_table која ќе ги содржи броевите и имињата на месеците во една година (прашањата се направени со користење менаџмент студио)

КРЕИРАЈ ТАБЕЛА .( НЕ NULL, (50) NULL) ВО ОГОД

Како што реков, ќе користиме проект ADP конфигуриран да работи со MS SQL 2008, во кој создадов тест форма и додадов копче за почеток со натпис "Трчај", што ќе ни треба да го тестираме нашиот код, т.е. ќе го напишеме целиот код во управувачот на настани " Притиснете го копчето».

Барања од базата на податоци Внеси, Ажурирање, БРИШИ во VBA

За да не го одвлекуваме долго време, ајде да започнеме, да речеме дека треба да додадеме ред на нашата тест табела ( кодот е коментиран)/

Private Sub start_Click() "Прогласи променлива за складирање на низата за барање Dim sql_query As String "Напиши го барањето што ни треба во него sql_query = "INSERT INTO test_table (id, name_mon) VALUES ("6", "June")" "Изврши тоа со DoCmd Стартувај SQL sql_query Крај под

Во овој случај, барањето се извршува со помош на тековните поставки за поврзување со базата на податоци. Можеме да провериме дали податоците се додадени или не.

Како што можете да видите, податоците се вметнати.

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

Private Sub start_Click() "Прогласи променлива за да ја задржи низата за барање Dim sql_query As String "Напиши барање за бришење во него sql_query = "ИЗБРИШИ test_table WHERE id = 6" "Изврши ја DoCmd.RunSQL sql_query End Sub

Ако провериме, ќе видиме дека саканата линија е избришана.

За да ги ажурираме податоците, пишуваме барање за ажурирање на променливата sql_query, се надевам дека значењето е јасно.

ИЗБЕРЕТЕ барање во базата на податоци во VBA

Овде работите се малку поинтересни отколку со другите SQL конструкции.

Прво, да речеме дека треба да ги добиеме сите податоци од табелата и, на пример, ќе ги обработиме и ќе ги прикажеме во порака, а вие, се разбира, можете да ги користите за други цели, за ова го пишуваме следново код

Private Sub start_Click() "Огласување на променливи "За множество записи од базата на податоци Dim RS As ADODB.Recordset "Ruery string Dim sql_query As String "Низа за прикажување вкупни податоци во пораката Dim str As String "Креирање нов објект за поставени записи RS = New ADODB .Recordset "Query string sql_query = "SELECT id, name_mon FROM test_table" "Изврши барање користејќи ги тековните поставки за поврзување на проектот за да се прикаже порака str = str & RS.Fields("id") & "-" & RS. Fields("name_mon") & vbnewline "оди на следниот запис RS.MoveNext Wend "Излезна порака msgbox str Крај Под

Овде ние веќе користиме VBA Access Loops за да ги прелистуваме сите вредности во нашиот сет на записи.

Но, доста често е неопходно да се добијат не сите вредности од збир на записи, туку само една, на пример, името на месецот според неговиот код. И за ова, користењето јамка е некако скапо, па можеме едноставно да напишеме барање што ќе врати само една вредност и ќе се однесува на неа, на пример, ќе го добиеме името на месецот со шифра 5

Private Sub start_Click() "Изјавување променливи "За множество записи од базата на податоци Dim RS As ADODB.Recordset "Ruery string Dim sql_query As String "Низа за прикажување на конечната вредност Dim str Како стринг "Создавање нов објект за сет записи RS = Нов ADODB.Recordset "Query string sql_query = "SELECT name_mon FROM test_table WHERE id = 5" "Изврши барање користејќи ги тековните поставки за проектна врска RS.open sql_query, CurrentProject.Connection, adOpenDynamic, adLockOptimistic "Get our value. ) msgbox str крај под

За универзалност, овде веќе се осврнавме не со името на ќелијата, туку со нејзиниот индекс, т.е. 0, што е првата вредност во Снимање, на крајот ја добивме вредноста "мај".

Како што можете да видите, сè е прилично едноставно. Ако често треба да добиете одредена вредност од базата на податоци ( како во последниот пример), тогаш препорачувам да го извадите целиот код во посебна функција (Како да напишете функција во VBA Access 2003) со еден влезен параметар, на пример, кодот на месецот ( со оглед на нашиот пример) и едноставно, онаму каде што е потребно да се прикаже оваа вредност, повикајте ја функцијата што ни треба со потребниот параметар, и тоа е тоа, значително ќе го намалиме VBA кодот и ќе ја подобриме перцепцијата на нашата програма.

Тоа е се за денес. Со среќа!

Опис на едукативниот проект „Продавница“

Шема за врски со табела

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

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

m_приход - прием на стоки

m_исход - потрошувачка на стоки

m_product - директориум, опис на производот

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

m_единица - директориум; единици

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

Microsoft Access 2003 или понова.

SQL барање во MS Access. Започнете

За да ја видите содржината на табелата, кликнете двапати на името на табелата во левиот панел:

За да се префрлите на режимот за уредување на полето на табелата, изберете режим на дизајн на горниот панел:

За да го прикажете резултатот од барањето SQL, кликнете двапати на името на барањето во левиот панел:

За да се префрлите на режимот за уредување на барањето SQL, изберете го режимот SQL на горниот панел:

SQL барање. Примери во MS Access. ИЗБИРАЈ: 1-10

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

SQL барање Q001.Пример SQL барање за да се добијат само потребните полиња во саканата низа:

SELECT dt, product_id, износ


ОД m_приход;

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

ИЗБЕРИ*
ОД m_производ;

БарањеSQLQ003.Изјавата DISTINCT се користи за да се елиминираат дупликатите записи и да се добијат многу уникатни записи:

ИЗБЕРЕТЕ ДИСТИНКТ ид на производ


ОД m_приход;

SQL барање Q004.Изјавата ORDER BY се користи за подредување (наредување) записи според вредностите на одредено поле. Името на полето ја следи клаузулата РЕД ПО:

ИЗБЕРИ*
ОД m_приход


НАРАЧАЈ ПО цена;

SQL барање Q005.Изјавата ASC се користи како додаток на изјавата ORDER BY и се користи за дефинирање на растечки сорт. Изјавата DESC се користи како додаток на изјавата ORDER BY и се користи за дефинирање на опаѓачки сорт. Во случај кога не се наведени ниту ASC ниту DESC, се претпоставува присуство на ASC (стандардно):

ИЗБЕРИ*
ОД m_приход


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

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

ИЗБЕРИ*
ОД m_приход


КАДЕ сума>200;

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

цена


ОД m_исход
КАДЕ износ=20 И цена>=10;

SQL барање Q008.За да споите податоци од две или повеќе табели, користете ги изјавите ВНАТРЕШЕН ПРИКЛУЧУВАЊЕ, ЛЕВО ПРИКЛУЧУВАЊЕ, ДЕСНО ПРИКЛУЧУВАЊЕ. Следниот пример ги презема полињата dt, product_id, износ, цена од табелата m_income и полето наслов од табелата m_product. Записот од табелата m_income е поврзан со записот од табелата m_product кога вредноста на m_income.product_id е еднаква на вредноста на m_product.id:



ON m_income.product_id=m_product.id;

SQL барање Q009.Постојат две работи на кои треба да се обрне внимание во ова SQL барање: 1) текстот за пребарување е приложен единечни цитати("); 2) датумот е даден во формат #месец/ден/година#, што е точен за MS Access. Во други системи, форматот на пишување на датумот може да биде различен. Пример за прикажување информации за сметката млеко на 12 јуни 2011 година. Обрнете внимание на форматот на датумот #6/12/2011#:

SELECT dt, product_id, наслов, износ, цена


ОД m_приход ВНАТРЕШНИ ПРИДРУЖЕНИ М_производ

WHERE title="(! ЈАЗИК:Млеко" And dt=#6/12/2011#; !}

SQL барање Q010.Инструкцијата BETWEEN се користи за да се тестира дали опсегот на вредности припаѓа на неа. Пример SQL барање што прикажува информации за стоки примени помеѓу 1-ви и 30-ти јуни 2011 година:

ИЗБЕРИ*
ОД m_приход ВНАТРЕШНИ ПРИДРУЖЕНИ М_производ


ON m_income.product_id=m_product.id
КАДЕ dt ПОМЕЃУ #6/1/2011# И #6/30/2011#;

SQL барање. Примери во MS Access. ИЗБИРАЈ: 11-20

Едно SQL барање може да се вгнезди во друго. Подпрашање не е ништо повеќе од барање во барање. Вообичаено, подпрашање се користи во клаузула WHERE. Но, постојат и други начини за користење на подпрашања.

Барање Q011.Прикажува информации за производи од табелата m_product, чии шифри се исто така во табелата m_income:

ИЗБЕРИ*
ОД m_производ


WHERE id IN (ИЗБЕРЕТЕ ИД_производ од m_приход);

Барање Q012.Се прикажува список на производи од табелата m_product, чии шифри не се во табелата m_outcome:

ИЗБЕРИ*
ОД m_производ


WHERE id NOT IN (ИЗБЕРЕТЕ ИД на производот ОД m_outcome);

Барање Q013.Ова SQL барање враќа единствена листа на кодови и имиња на производи кои имаат шифри во табелата m_income, но не и во табелата m_outcome:

ИЗБЕРЕТЕ ДИСТИНКТ ид на производ, наслов


ОД m_приход ВНАТРЕШНИ ПРИДРУЖЕНИ М_производ
ON m_income.product_id=m_product.id
WHERE product_id NOT IN (ИЗБЕРЕТЕ ИД на производот ОД m_outcome);

Барање Q014.Од табелата m_category се прикажува единствена листа на категории, чии имиња започнуваат со буквата М:

ИЗБЕРЕТЕ РАЗЛИЧЕН наслов


ОД m_производ
КАДЕ наслов КАКО „М*“;

Барање Q015.Пример за извршување аритметички операции на полиња во барање и преименување полиња во барање (алијас). Овој пример пресметува трошок = количина*цена и добивка за секој евиденција на потрошувачка на ставка, под претпоставка дека добивката е 7 проценти од продажбата:


износ*цена/100*7 AS профит
ОД m_исход;

Барање Q016.Со анализа и поедноставување на аритметичките операции, можете да ја зголемите брзината на извршување на барањето:

SELECT dt, product_id, износ, цена, износ*цена AS outcome_sum,


outcome_sum*0,07 AS добивка
ОД m_исход;

Барање Q017.Користејќи ја изјавата INNER JOIN, можете да комбинирате податоци од повеќе табели. Во следниот пример, во зависност од вредноста на ctgry_id, секој запис во табелата m_income се совпаѓа со името на категоријата од табелата m_category на која припаѓа производот:

SELECT c.title, b.title, dt, износ, цена, износ*цена AS приход_збир


ОД (m_приход КАКО ВНАТРЕШЕН ПРИКЛУЧЕН m_производ AS b ON a.product_id=b.id)
ВНАТРЕШЕН ПРИКЛУЧУВАЊЕ m_category AS c ON b.ctgry_id=c.id
ПОРАЧАЈ ПО в.наслов, б.наслов;

Барање Q018.Функциите како СУМ - збир, COUNT - количина, AVG - аритметичка средина, MAX - максимална вредност, MIN - минимална вредност се нарекуваат збирни функции. Тие земаат повеќе вредности и враќаат една вредност кога се обработуваат. Пример за пресметување на збирот на производот од полињата износ и цена со користење агрегатната функцијаСУМ:

ИЗБЕРЕТЕ СУМ(износ*цена) КАКО Вкупно_Збир


ОД m_приход;

Барање Q019.Пример за користење на повеќе збирни функции:

ИЗБЕРЕТЕ Збир (износ) AS Amount_Sum, AVG(amount) AS Amount_AVG,


MAX(износ) AS Amount_Max, Min(amount) AS Amount_Min,
Брои(*) AS Вкупен_Број
ОД m_приход;

Побарајте Q020.Во овој пример, се пресметува збирот на сите ставки со код 1 добиени во јуни 2011 година:

ИЗБЕРЕТЕ Збир (износ*цена) КАКО приход_збир


ОД m_приход
КАДЕ product_id=1 И dt ПОМЕЃУ #6/1/2011# И #6/30/2011#;.

Побарајте Q021.Следното SQL барање пресметува за колку се продадени стоките со код 4 или 6:

ИЗБЕРЕТЕ Збир (износ*цена) како резултат_збир


ОД m_исход
КАДЕ product_id=4 ИЛИ product_id=6;

Побарајте Q022.Се пресметува за колкав износ е продаден на 12.06.2011 година на стока со шифра 4 или 6:

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


ОД m_исход
КАДЕ (produkt_id=4 ИЛИ product_id=6) И dt=#6/12/2011#;

Побарајте Q023.Задачата е оваа. Пресметајте го вкупниот износ за кој се кредитираат стоките од категоријата „Печиви производи“.

За да го решите овој проблем, треба да работите на три табели: m_income, m_product и m_category, бидејќи:


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

За да го решиме овој проблем, го користиме следниов алгоритам:


- определување на шифрата на категоријата „Печиви производи“ од табелата m_категорија со помош на подпрашање;
- приклучување на табелите m_income и m_product за да се одреди категоријата на секој кредитиран производ;
- пресметка на износот на приемот (= количина * цена) за стоки, чијашто шифра на категоријата е еднаква на шифрата дефинирана со горенаведеното подпрашање.
ИЗБЕРИ
ОД m_product КАКО ВНАТРЕШЕН ПРИКЛУЧЕН m_приход AS b ON a.id=b.product_id
WHERE ctgry_id = (ИЗБЕРЕТЕ ИД ОД m_category WHERE title="Печива"); !}

Побарајте Q024.Проблемот со пресметување на вкупниот износ на кредитирани производи од категоријата „Печиви производи“ ќе се реши со следниот алгоритам:
- секој запис од табелата m_income, во зависност од вредноста на нејзиниот product_id, од табелата m_category, се совпаѓа со името на категоријата;
- изберете записи за кои категоријата е еднаква на „Печи производи“;
- пресметајте го износот на приход = количина * цена.

ОД (m_производ КАКО ВНАТРЕШЕН ПРИКЛУЧУВАЊЕ m_приход AS b ON a.id=b.produkt_id)

WHERE c.title="печива"; !}

Побарајте Q025.Овој пример пресметува колку предмети се потрошени:

ИЗБЕРИ COUNT(product_id) AS product_cnt


ОД (ИЗБЕРЕТЕ ДИСТИНКТЕН производ_ид ОД m_исход) КАКО t;

Побарајте Q026.Клаузулата GROUP BY се користи за групирање записи. Вообичаено, записите се групирани според вредноста на едно или повеќе полиња, а збирната операција се применува за секоја група. На пример, следното барање генерира извештај за продажба на стоки. Односно, се генерира табела која ќе ги содржи имињата на стоките и износот за кој се продаваат:

ИЗБЕРЕТЕ наслов, SUM(износ*цена) AS outcome_sum


ОД m_производ КАКО ВНАТРЕШЕН ПРИКЛУЧУВАЊЕ m_исход КАКО б
ON a.id=b.product_id
ГРУПА ПО наслов;

Побарајте Q027.Извештај за продажба по категорија. Односно, се генерира табела која ќе ги содржи имињата на категориите на производи, вкупната сума за која се продаваат стоките од овие категории и просечниот износ на продажба. Функцијата ROUND се користи за заокружување на средната вредност до најблиската стотинка (второто децимално место по децималното раздвојување):

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


ROUND(AVG(износ*цена),2) AS outcome_sum_avg
FROM (m_производ КАКО ВНАТРЕШЕН ПРИКЛУЧУВАЊЕ m_исход AS b ON a.id=b.product_id)
ВНАТРЕШЕН ПРИКЛУЧУВАЊЕ m_category AS c ON a.ctgry_id=c.id
ГРУПА ПО в.наслов;

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

SELECT product_id, SUM(износ) AS износ_збир,


Round(Avg(amount),2) AS износ_avg
ОД m_приход
ГРУПА ПО product_id
ИМАЊЕ Сума(износ)>=500;

Побарајте Q029.Ова барање го пресметува за секоја ставка збирот и просекот на неговите приходи направени во вториот квартал од 2011 година. Ако вкупниот износ на прием на стоки не е помал од 1000, тогаш се прикажуваат информации за овој производ:

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


ОД m_приходи ВНАТРЕШЕН ПРИКЛУЧУВАЊЕ m_product b ON a.product_id=b.id
КАДЕ dt ПОМЕЃУ #4/1/2011# И #6/30/2011#
ГРУПА ПО наслов
СО СУМ (износ*цена)>=1000;

Побарајте Q030.Во некои случаи, потребно е да се совпадне секој запис од некоја табела со секој запис од друга табела; што се нарекува декартов производ. Табелата што произлегува од таквото спојување се нарекува табела Декарт. На пример, ако некоја табела А има 100 записи, а табелата Б има 15 записи, тогаш нивната Декартовска табела ќе се состои од 100*15=150 записи. Следното барање го спојува секој запис во табелата m_income со секој запис во табелата m_outcome:
ОД m_приход, m_исход;

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


SUM(износ*цена) AS приход_збир

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

SELECT добавувач_ид, производ_ид, СУМ(износ) AS износ_збир,




ГРУПА ПО добавувач_id, производ_ид;

Барање Q033.Во овој пример, двете горенаведени прашања (q031 и q032) се користат како подпрашања. Резултатите од овие прашања се споени во еден извештај користејќи го методот LEFT JOIN. Следното барање прикажува извештај за бројот и количината на примени и продадени производи за секој добавувач. Треба да обрнете внимание на фактот дека ако некој производ веќе е пристигнат, но сè уште не е продаден, тогаш ќелијата outcome_sum за овој запис ќе биде празна. дека ова барање е само пример за употреба во врска со сложени прашањакако подпрашање. Изведбата на ова SQL барање со голема количина на податоци е сомнителна:

ИЗБЕРИ*
ОД



SUM(износ*цена) AS приход_збир

НА a.product_id=b.id ГРУПА ПОД добавувачот_id, product_id) КАКО a
ЛЕВО ПРИДРУЖЕТЕ
(ИЗБЕРЕТЕ ИД на добавувач, ID на производ, СУМ(износ) AS износ_збир,
SUM(износ*цена) AS outcome_sum
ОД m_исход КАКО ВНАТРЕШЕН ПРИКЛУЧУВАЊЕ m_производ КАКО б
ON a.product_id=b.id ГРУПА ПОД добавувач_id, product_id) КАКО б
ВКЛУЧЕНО (a.product_id=b.product_id) И (a.supplier_id=b.supplier_id);

Побарајте Q034.Во овој пример, двете горенаведени прашања (q031 и q032) се користат како подпрашања. Резултатите од овие прашања се комбинираат во еден извештај користејќи го методот RIGTH JOIN. Следното барање испечатува извештај за износот на плаќањата на секој клиент за платните системи што ги користел и износот на инвестициите што ги направил. Следното барање прикажува извештај за бројот и количината на примени и продадени производи за секој добавувач. Имајте предвид дека ако некој производ е веќе продаден, но сè уште не е примен, тогаш ќелијата приход_збир за овој запис ќе биде празна. Присуството на такви празни ќелии е показател за грешка во сметководството за продажба, бидејќи пред продажбата, прво е неопходно да пристигне соодветниот производ:

ИЗБЕРИ*
ОД


(ИЗБЕРЕТЕ ИД на добавувач, ID на производ, СУМ(износ) AS износ_збир,
SUM(износ*цена) AS приход_збир
ОД m_приход КАКО ВНАТРЕШЕН ПРИКЛУЧЕН m_product AS b ON a.product_id=b.id
ГРУПА ПО добавувач_ид, производ_ид) КАКО a
ПРАВО ПРИДРУЖЕТЕ СЕ
(ИЗБЕРЕТЕ ИД на добавувач, ID на производ, СУМ(износ) AS износ_збир,
SUM(износ*цена) AS outcome_sum
ОД m_outcome КАКО ВНАТРЕШЕН ПРИКЛУЧУВАЊЕ m_product AS b ON a.product_id=b.id
ГРУПА ПО добавувач_ид, производ_ид) КАКО б
ВКЛУЧЕНО (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 приход_износ,


SUM(out_amount) AS outcome_amount
ОД
(ИЗБЕРЕТЕ ИД на производот, износ AS in_mount, 0 AS out_amount
ОД m_приход
УНИЈА СИТЕ
SELECT product_id, 0 AS in_mount, износ AS out_amount
ОД m_исход) КАКО т
ГРУПА ПО product_id;

Барање Q036.Функцијата EXISTS враќа TRUE ако множеството што му е предадено содржи елементи. Функцијата EXISTS враќа FALSE ако множеството што му е предадено е празно, односно нема елементи. Следното барање ги враќа шифрите на производите што се содржани и во табелата m_income и во табелата m_outcome:

ИЗБЕРЕТЕ ДИСТИНКТ ид на производ


ОД m_приход КАКО a
КАДЕ ПОСТОИ(ИЗБЕРЕТЕ ИД_продукт ОД m_исход КАКО б

Барање Q037.Се прикажуваат кодови на производи кои се содржани и во табелата m_income и во табелата m_outcome:

ИЗБЕРЕТЕ ДИСТИНКТ ид на производ


ОД m_приход КАКО a
WHERE product_id IN (ИЗБЕРЕТЕ ИД_продукт ОД m_outcome)

Барање Q038.Се прикажуваат шифри на производи кои се содржани како во табелата m_income, но не се содржани во табелата m_outcome:

ИЗБЕРЕТЕ ДИСТИНКТ ид на производ


ОД m_приход КАКО a
КАДЕ НЕ ПОСТОИ(ИЗБЕРЕТЕ ИД_продукт ОД m_исход КАКО б
КАДЕ b.product_id=a.product_id);

Барање Q039.Се прикажува список на производи со највисок продажен износ. Алгоритмот е овој. За секој производ се пресметува збирот на неговата продажба. Потоа се одредува максимумот од овие суми. Потоа, за секој производ, повторно се пресметува збирот на неговата продажба и се прикажуваат шифрата и збирот на продажбите на стоки, чиј збир на продажби е еднаков на максимумот:

SELECT product_id, SUM(износ*цена) AS износ_збир


ОД m_исход
ГРУПА ПО product_id
ИМАТЕ СУМ(износ*цена) = (ИЗБЕРЕТЕ МАКС(и_износ)
FROM (ИЗБЕРЕТЕ СУМ (износ*цена) AS s_amount FROM m_outcome GROUP BY product_id));

Побарајте Q040. IIF резервиран збор ( условен оператор) се користи за оценување на булова израз и извршување на дејство во зависност од резултатот (TRUE или FALSE). Во следниот пример, испораката на артикал се смета за „мала“ ако количината е помала од 500. Во спротивно, односно, количината на прием е поголема или еднаква на 500, испораката се смета за „голема“:

SELECT dt, product_id, износ,


IIF(износ ОД m_приход;

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

SELECT dt, product_id, износ,


SWITCH (количина =500"голема") КАКО ознака
ОД m_приход;

Барање Q042.Во следното барање, ако количината на стоки во влезната серија е помала од 300, тогаш серијата се смета за „мала“. Во спротивно, т.е. ако условот износ SELECT dt, product_id, износ,
IIF(износ IIF(износ ОД m_приход;

SQL барање Q043.Во следното барање, ако количината на стоки во влезната серија е помала од 300, тогаш серијата се смета за „мала“. Во спротивно, т.е. ако условот износ SELECT dt, product_id, износ,
SWITCH (износ на износот>=1000"големи") КАКО ознака
ОД m_приход;

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

ИЗБЕРИ Категорија, СУМ(збир_исходи) AS Ctgry_Total


FROM (ИЗБЕРЕТЕ износ*цена КАКО резултат_збир,
IIf(износ*цена IIf(износ*цена ОД m_исход) AS 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_приход;

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

SELECT dt, DateDiff("d",dt,Date()) AS last_day,


DateDiff("m",dt,Date()) КАКО последните_месеци,
DateDiff("yyyy",dt,Date()) AS last_years
ОД m_приход;

SQL барање Q047.Бројот на денови од денот на приемот на стоката (табела m_приход) до тековниот датум се пресметува со помош на функцијата DateDiff и се споредува датумот на истекување (табела m_производ):


DateDiff("d",dt,Date()) AS last_days
ОД m_приход КАКО ВНАТРЕШЕН ПРИКЛУЧУВАЊЕ m_производ КАКО б
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","Не") AS date_expire
ОД m_приходи ВНАТРЕШЕН ПРИКЛУЧУВАЊЕ m_производ б
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 month_last2
ОД m_приход;

SQL барање Q050.Се прикажува квартален извештај за количината и количината на примени стоки за 2011 година:

SELECT kvartal, SUM(outcome_sum) AS Вкупно


FROM (ИЗБЕРЕТЕ износ*цена AS outcome_sum, месец(dt) AS m,
СКЛУЧУВАЧ(m =10,4) КАКО квартал
ОД m_приход КАДЕ година(dt)=2011) КАКО т
ГРУПА ПО блок;

Барање Q051.Следното барање помага да се открие дали корисниците успеале да внесат информации во системот за потрошувачката на стоки за износ поголем од износот на приемот на стоката:

SELECT product_id, SUM(in_sum) AS приход_sum, SUM(out_sum) AS outcome_sum


FROM (ИЗБЕРЕТЕ ИД на производот, износ*цена како во_збир, 0 како out_sum
од m_приход
УНИЈА СИТЕ
SELECT product_id, 0 as in_sum, износ*цена како out_sum
од m_исход) AS t
ГРУПА ПО product_id
ИМА СУМ (во_збир)
Барање Q052.Нумерирањето на линиите вратени од барањето се спроведува на различни начини. На пример, можете да ги пренумерите линиите на извештајот подготвен во MS Access користејќи го самиот MS Access. Можете исто така да нумерирате користејќи програмски јазици, на пример, VBA или PHP. Меѓутоа, понекогаш тоа треба да се направи во самото барање SQL. Значи, следното барање ќе ги нумерира редовите на табелата m_income во согласност со растечкиот редослед на вредностите на полето ID:

SELECT COUNT(*) како N, b.id, b.product_id, b.amount, b.price


ОД m_приходи ВНАТРЕШЕН ПРИКЛУЧУВАЊЕ m_приход b ON a.id ГРУПА ПО b.id, b.product_id, b.износ, b.цена;

Барање Q053.Прикажани се првите пет меѓу производите по количина на продажба. Излезот од првите пет записи се врши со помош на ТОП инструкцијата:

ИЗБЕРЕТЕ ТОП 5, производ_ид, сума(износ*цена) КАКО сума


ОД m_исход
ГРУПА ПО product_id
ПОРАЧАЈ СПОРЕД сума (износ*цена) DESC;

Барање Q054.Се прикажуваат првите пет меѓу производите по количина на продажба, а линиите се нумерирани како резултат:

ИЗБЕРЕТЕ COUNT(*) AS N, b.product_id, b.summa


ОД


ОД m_исход ГРУПА ПО product_id) КАКО a
ВНАТРЕШЕН ПРИКЛУЧУВАЊЕ
(ИЗБЕРЕТЕ ИД на производот, сума (износ*цена) КАКО сума,
сума*10000000+продукт_идентичен со AS id
ОД m_исход ГРУПА ПО производ_ид) КАКО б
ON a.id>=b.id
ГРУПА ПО b.product_id, b.summa
ИМААТ брои (*) НАРАЧАЈ ПО КОЛКУ (*);

Барање 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_приход КАКО ВНАТРЕШЕН ПРИКЛУЧЕН m_приход КАКО b НА a.idGROUP BY b.id) t;

SQL барање. Примери во MS Access. АЖУРИРАЊЕ: 1-10

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

АЖУРИРАЈ m_приход SET цена = цена*1.1


КАДЕ производ_ид=3;

Барање U002.Следното барање за ажурирање на SQL го зголемува количеството на сите производи во табелата m_income за 22 единици чии имиња започнуваат со зборот „Путер“:

АЖУРИРАЈ m_приход SET износ = износ+22


WHERE product_id IN (ИЗБЕРИ ИД ОД m_product WHERE наслов КАКО „Масло*“);

Барање U003.Следното барање за промена на SQL во табелата m_outcome ги намалува цените на сите стоки произведени од OOO Sladkoe за 2 проценти:

АЖУРИРАЈ m_outcome SET цена = цена*0,98


КАДЕ ИД на производот
(ИЗБЕРЕТЕ a.id ОД m_product a VINER JOIN m_supplier b
ON a.supplier_id=b.id WHERE b.title="OOO"Сладкое"");. !}

Вметнување, бришење, ажурирање записи во базата на податоци

Методот ExecuteReader() враќа читач на податоци кој ви овозможува да ги прегледате резултатите од изјавата SQL Select користејќи проток на информации само за читање во напредната насока. Меѓутоа, ако сакате да извршите SQL изјави кои ја менуваат табелата со податоци, тогаш треба да го повикате методот ExecuteNonQuery() овој објекткоманди. Овој единствен метод е дизајниран да врши вметнувања, промени и бришења, во зависност од форматот на текстот на командата.

концепт не-прашањезначи SQL изјава која не враќа збир на резултати. Оттука, изберете изјависе прашања, но изјавите Вметни, Ажурирај и Избриши не се. Според тоа, методот ExecuteNonQuery() враќа int вредност што го содржи бројот на редови засегнати од овие оператори, а не новиот сет на записи.

За да покажете како да ја менувате содржината на постоечката база на податоци само со барање ExecuteNonQuery(), следниот чекор е да креирате своја сопствена библиотека за пристап до податоци која го инкапсулира процесот на база на податоци AutoLot.

Во реално производствено опкружување, вашата ADO.NET логика речиси сигурно ќе биде изолирана во склоп на .NET .dll од една едноставна причина - повторна употреба на кодот! Во претходните написи, ова не беше направено за да не ве одвлече вниманието од задачите што ви се при рака. Но, би било губење време да се развие истата логика на поврзување, истата логика за читање податоци и истата логика за извршување на команди за секоја апликација што треба да работи со базата на податоци AutoLot.

Со изолирање на логиката за пристап до податоци во библиотеката со .NET код, различни апликации со кој било кориснички интерфејс (конзола, стил на десктоп, веб-стил итн.) можат да пристапат до постоечката библиотека дури и без разлика на јазикот. И ако развиете библиотека за пристап до податоци во C #, тогаш другите програмери во .NET ќе можат да креираат свои кориснички интерфејсина кој било јазик (на пр. VB или C++/CLI).

Нашата библиотека за пристап до податоци (AutoLotDAL.dll) ќе содржи единствен именски простор (AutoLotConnectedLayer) кој ќе комуницира со базата AutoLot користејќи типови поврзани со ADO.NET.

Започнете со креирање на нов проект за библиотека од класа C со име AutoLotDAL (кратенка од AutoLot Data Access Layer) и потоа променете го оригиналното име на датотеката со код C# во AutoLotConnDAL.cs.

Потоа преименувајте го опсегот на именскиот простор во AutoLotConnectedLayer и сменете го името на оригиналната класа во InventoryDAL бидејќи оваа класа ќе дефинира различни членови за интеракција со табелата за залихи на базата на податоци AutoLot. И, конечно, увезете ги следниве .NET именски простори:

Користење на системот; користејќи System.Collections.Generic; користејќи System.Text; користејќи System.Data; користејќи System.Data.SqlClient; именски простор AutoLotConnectedLayer (јавна класа InventoryDAL ())

Додадете логика за поврзување

Нашата прва задача е да дефинираме методи кои овозможуваат процесот на повикување да се поврзе и да се исклучи од изворот на податоци користејќи валидна низа за поврзување. Бидејќи нашиот состав AutoLotDAL.dll ќе ја хард-кодира употребата на типови на класа System.Data.SqlClient, дефинирајте приватна променлива SqlConnection која ќе се распредели кога ќе се креира објектот InventoryDAL.

Исто така, дефинирајте метод OpenConnection(), а потоа друг метод CloseConnection() кој ќе комуницира со оваа променлива:

Јавна класа InventoryDAL ( приватно SqlConnection поврзување = нула; јавна празнина OpenConnection (string connectionString) (connect = new SqlConnection(connectionString); connect.Open(); ) public void CloseConnection() (connect.Close(); ) )

Заради краткост, типот InventoryDAL нема да ги проверува сите можни исклучоци и нема да исфрла прилагодени исклучоци кога ќе се појават различни ситуации (на пример, кога низата за поврзување е погрешно формирана). Меѓутоа, при градење библиотека за пристап до податоци за производство, веројатно ќе треба да користите структурирани техники за ракување со исклучоци за да ги земете предвид сите аномалии што може да се појават при извршувањето.

Додавање на логика за вметнување

Вметнете нов рекордна табелата Инвентар се сведува на форматирање на изјавата SQL Вметнете(во зависност од податоците внесени од корисникот) и повикување на методот ExecuteNonQuery() со помош на командниот објект. За да го направите ова, додадете јавен метод InsertAuto() во класата InventoryDAL која зема четири параметри кои одговараат на четирите колони од табелата за залихи (CarID, Color, Make и PetName). Врз основа на овие аргументи, формирајте низа за додавање нов запис. И, конечно, извршете ја изјавата SQL користејќи го објектот SqlConnection:

Јавна празнина InsertAuto(int id, боја на стринг, стринг марка, низа petName) ( // SQL исказ string sql = string.Format("Insert Into Inventory" + "(CarID, Make, Color, PetName) Вредности(@CarId, @ Направете, @Color, @PetName)"); користејќи (SqlCommand cmd = нова SqlCommand(sql, this.connect)) (// Додадете параметри cmd.Parameters.AddWithValue("@CarId", id); cmd.Parameters.AddWithValue ("@Make", make); cmd.Parameters.AddWithValue("@Color", боја); cmd.Parameters.AddWithValue("@PetName", petName); cmd.ExecuteNonQuery(); ) )

Дефинирањето класи што претставуваат записи во релациона база на податоци е вообичаен начин за креирање библиотека за пристап до податоци. Всушност, ADO.NET Entity Framework автоматски генерира силно напишани класи кои ви дозволуваат да комуницирате со податоците од базата на податоци. Патем, самостојниот слој ADO.NET генерира силно напишани објекти DataSet за да ги претстави податоците од дадена табела во релациона база на податоци.

Создавањето SQL изјава со конкатенација на низа може да биде безбедносен ризик (запомнете ги нападите за вметнување SQL). Текстот на командата најдобро се креира со помош на параметрирано барање, кое ќе биде опишано малку подоцна.

Додавање логика за бришење

Отстранување постоечки записне е потешко од вметнување нов рекорд. За разлика од кодот InsertAuto(), ќе се прикаже една важна област за обид/фаќање, која се справува со можна ситуација кога се прави обид да се избрише автомобил веќе нарачан од некој од табелата Клиенти. Додајте го следниов метод во класата InventoryDAL:

Јавна празнина DeleteCar(int id) ( string sql = string.Format („Избриши од инвентар каде CarID = „(0)““, id); користејќи (SqlCommand cmd = нова SqlCommand(sql, this.connect)) ( обидете се ( cmd.ExecuteNonQuery(); ) catch (SqlException ex) ( Исклучок грешка = нов Исклучок ("За жал, овој автомобил е на нарачка!", ex); грешка при фрлање; ) ) )

Додавање логика за промена

Кога станува збор за ажурирање на постоечки запис во табелата за залихи, веднаш се поставува очигледното прашање: што точно може да се дозволи да го промени процесот на повикување: бојата на автомобилот, пријателското име, моделот или одеднаш? Еден начин да се максимизира флексибилноста е да се дефинира метод кој прифаќа стринг параметар кој може да содржи каква било изјава SQL, но ова во најмала рака е ризично.

Идеално, подобро е да имате збир на методи кои овозможуваат процесот на повикување да ги менува записите различни начини. Сепак, за нашата едноставна библиотека за пристап до податоци, ќе дефинираме единствен метод што овозможува процесот на повикување да го промени пријателското име на наведеното возило:

Јавна празнина UpdateCarPetName (int id, string newpetName) ( string sql = string.Format ("Ажурирај го множеството залихи PetName = "(0)" Каде CarID = "(1)"", newpetName, id); користејќи (SqlCommand cmd = ново SqlCommand(sql, this.connect)) ( cmd.ExecuteNonQuery(); ) )

Додавање логика за земање примероци

Сега треба да додадеме метод за преземање записи. Како што беше прикажано претходно, објектот за читач на податоци специфичен за провајдерот дозволува да се изберат записи со помош на курсор само напред. Со повикување на методот Read(), можете да го обработувате секој запис по ред. Сето ова е одлично, но сега треба да откриеме како да ги вратиме овие записи во слојот на апликацијата за повикување.

Еден пристап би бил да се добијат податоците користејќи го методот Read(), потоа да се пополни и да се врати повеќедимензионална низа (или друг објект како генеричка листа ).

Друг начин е да се врати објектот System.Data.DataTable, кој всушност припаѓа на самостојниот слој ADO.NET. DataTable е класа што претставува табеларен блок од податоци (како хартија или табела).

Класата DataTable содржи податоци како збирка од редови и колони. Овие збирки може да се пополнат програмски, но DataTable има метод Load() кој може автоматски да ги пополни со помош на читач на податоци! Еве еден пример каде податоците од табелата за залихи се враќаат како табела со податоци:

Јавна табела со податоци GetAllInventoryAsDataTable() ( DataTable inv = new DataTable (); string sql = "Изберете * Од Инвентар"; користејќи (SqlCommand cmd = нова SqlCommand(sql, this.connect)) ( SqlDataReader dr = cmd.ExevReader); .Load(dr); dr.Close(); ) return inv;

Работа со параметриизирани командни објекти

Досега, во логиката за вметнување, ажурирање и бришење за типот InventoryDAL, користевме хард-кодирани стринг буквали за секое SQL барање. Веројатно сте свесни за постоењето на параметриизирани прашања, кои ви дозволуваат да ги третирате SQL параметрите како објекти, а не само како дел од текстот.

Работата со SQL пребарувања на повеќе објектно-ориентиран начин не само што помага да се намали бројот на печатни грешки (во присуство на силно напишани својства), туку параметризираните барања обично се извршуваат многу побрзо од стринговите буквално, бидејќи тие се анализираат само еднаш (и не секој пат, како што се случува ако на својството CommandText му се додели SQL стринг). Дополнително, параметризираните барања штитат од напади со инјектирање SQL (добро познат безбедносен проблем за пристап до податоци).

За поддршка на параметризирани прашања, командните објекти ADO.NET одржуваат збирка од поединечни параметарски објекти. Стандардно, оваа збирка е празна, но можете да додадете кој било број на параметарски објекти што се совпаѓаат параметар на местово SQL барање. Ако сакате да поврзете параметар за пребарување SQL со член на колекцијата параметри на некој команден објект, претходете на параметарот SQL со симбол @ (барем кога работите со Microsoft SQL Server, иако не сите DBMS ја поддржуваат оваа нотација).

Поставување параметри користејќи го типот DbParameter

Пред да започнеме да создаваме параметриизирани прашања, ајде да го разгледаме типот DbParameter (базната класа за објектите на параметрите на давателот). Оваа класа има голем број својства кои ви дозволуваат да го поставите името, големината и типот на параметарот, како и други карактеристики, како што е насоката во која се гледа параметарот. Некои важни својства на типот DbParameter се дадени подолу:

DbType

Го добива или поставува типот на податоци од параметарот, претставен како тип CLR

насока

Добива или поставува тип на параметар: само влез, само излез, влез и излез или параметар за враќање на вредност

Дали е поништен

Добива или поставува дали параметарот може да зема нула вредности

Име на параметар

Го добива или го поставува името на DbParameter

големина

Прашања или множества максимална големинаподатоци за параметарот (корисен само за текстуални податоци)

вредност

Добива или поставува вредност на параметар

За да покажеме како да пополниме збирка командни објекти со објекти компатибилни со DBParameter, ајде да го преработиме методот InsertAuto() така што тој користи параметарски објекти (можеме да ги преправаме сите други методи на ист начин, но овој пример ќе ни биде доволен):

Јавна празнина InsertAuto(int id, боја на стринг, стринг марка, низа petName) ( // SQL исказ string sql = string.Format("Insert In Inventory" + "(CarID, Make, Color, PetName) Вредности("(0) ","(1)","(2)","(3)")", id, марка, боја, petName); // Параметаризирана команда користејќи (SqlCommand cmd = нова SqlCommand(sql, this.connect)) ( SqlParameter param = new SqlParameter(); param.ParameterName = "@CarID"; param.Value = id; param.SqlDbType = SqlDbType.Int; cmd.Parameters.Add(param); param = нов SqlParameter(); ParameterName = "@Make"; param.Value = make; param.SqlDbType = SqlDbType.Char; param.Size = 10; cmd.Parameters.Add(param); param = нов SqlParameter(); param.ParameterName = "@боја "; param.Value = боја; param.SqlDbType = SqlDbType.Char; param.Size = 10; cmd.Parameters.Add(param); param = new SqlParameter(); param.ParameterName = "@PetName"; парам.Value = petName;param.SqlDbType = SqlDbType.Char;param.Size = 10;cmd.Parameters.Add(param);cmd.ExecuteN onQuery(); ))

Забележете дека овде SQL барањето исто така содржи четири знаци на место за место, на секоја пред нив има знак @. Користејќи го својството ParameterName на типот SqlParameter, можете да го опишете секое од овие поставки и да обезбедите различни информации (вредност, тип на податоци, големина, итн.) на силно отчукуван начин. Откако ќе се подготват сите параметарски објекти, тие се додаваат во колекцијата на командни објекти користејќи го повикот Add().

Овде се користат различни својства за стилизирање на параметарските објекти. Сепак, имајте предвид дека параметарските објекти поддржуваат голем број преоптоварени конструктори кои ви дозволуваат да поставите различни вредности на својствата (што резултира со покомпактна база на кодови). Исто така, имајте предвид дека Visual Studio 2010 има различни графички дизајнери кои автоматски ќе генерираат многу од овој мачен код за ракување со параметрите за вас.

Создавањето параметрирано барање често резултира со повеќе код, но резултатот е попогоден начин за програмски прилагодување на SQL изјавите, како и подобри перформанси. Оваа техника може да се примени на секое SQL барање, иако параметризираните барања се најкорисни кога треба да извршите складирани процедури.

Правила квадратни заградиозначува [изборен дел] од конструкција. Вертикалната лента го означува изборот помеѓу опциите (var1|var2). Елипса значи можно повторување неколку пати - пати 1, пати 2 [, ...]

ИЗБЕРИ Изјава

Му дава инструкции на моторот за база на податоци на Microsoft Access да враќа информации од базата на податоци како збир на записи.

Синтакса

ИЗБИРАЈ[ прирок] { * | маса.* | [маса.]поле 1

[, [маса.]поле 2 [, ...]]}
ОД маса_израз [, ...]




Изјавата SELECT ги вклучува следните елементи.

Елемент

Опис

Прирок

Еден од следниве предикати: СИТЕ, РАЗЛИЧНИ, РАЗЛИЧНИ или ТОП. Предикатите се користат за ограничување на бројот на вратени записи. Ако не е наведен предикат, стандардното е СИТЕ.

Одредува дека сите полиња се избрани од наведената табела или табели

Табела

Името на табелата од чии полиња се избираат записите

поле 1, поле 2

Имињата на полињата што ги содржат преземените податоци. Ако се наведени повеќе полиња, податоците ќе се преземат по редоследот по кој се наведени нивните имиња.

алијас 1, алијас 2

Имиња што се користат како наслови на колони наместо оригинални имиња на колони табели

маса_израз

Едно или повеќе имиња на табели кои ги содржат податоците за преземање.

надворешна_база на податоци

Името на базата на податоци што ги содржи табелите наведени во компонентата маса_израздоколку ги нема во тековната база на податоци

Забелешки

За да ја изврши оваа операција, моторот на базата на податоци на Microsoft Access ги бара наведените табели, ги извлекува саканите колони, ги избира редовите што ги исполнуваат наведените услови и ги подредува или групира добиените редови по наведениот редослед.

Изјавите SELECT не ги менуваат податоците од базата на податоци.

Изјавата SELECT обично е првиот збор на изјавата SQL (SQL изјава (низа). Израз што дефинира SQL команда, како што се ИЗБЕРИ, АЖУРИРАЈ или ИЗБРИШИ, и вклучувајќи клаузули, како КАДЕ или НАРАЧАЈ ПО. SQL изјавите/низите најчесто се користат во прашања и во збирни функции.). Повеќето SQL изјави се или SELECT изјави или SELECT...INTO изјави.

Минималната синтакса за изјавата SELECT е како што следува:

ИЗБЕРИ полињаОД маса

Можете да користите ѕвездичка (*) за да ги изберете сите полиња во табелата. Следниот пример ги избира сите полиња во табелата Вработени.

ИЗБЕРЕ * ОД Вработени;

Ако името на полето е вклучено во повеќе од една табела во клаузулата FROM, претходете го со името на табелата и изјавата «.» (точка). Во следниот пример, полето Оддел е присутно во табелите Вработени и шефови. Изјавата SQL ги избира одделенијата од табелата Вработени и имињата на шефовите од табелата Bosses.

Избери вработени. Оддел, раководители. Име на извршната власт ОД ВРАБОТНИЦИ ВНАТРЕШНИ ПРИКЛУЧУВАЈТЕ Директори КАДЕ Вработени. Оддел = Раководители. Оддел;

Кога креирате објект RecordSet, името на полето за табелата се користи од моторот на базата на податоци на Microsoft Access како име на објектот „Поле“ во објектот. постави рекорд. Ако името на полето треба да се смени или не е обезбедено со изразот што го генерира полето, користете резервиран збор (Резервиран збор. Збор што е јазичен елемент, како што е јазикот на Visual Basic. оператори и објекти.) AS. Следниот пример покажува како заглавието „Ден“ се користи за именување на вратениот објект Полево примениот предмет постави рекорд.

ИЗБЕРЕТЕ Роденден КАКО ДЕН ОД Вработените;

Кога работите со збирни функции или прашања кои враќаат двосмислени или идентични имиња на објекти Поле, треба да ја користите клаузулата AS за да креирате друго име на објект Поле. Во следниот пример, вратениот објект Полево примениот предмет постави рекордименуван како „Попис“.

SELECT COUNT(EmployeeCode) AS Census FROM Employees;

Кога работите со изјава SELECT, можете да користите дополнителни клаузули за дополнително ограничување и организирање на примените податоци. За повеќе информации, погледнете ја темата за помош за понудата што ја користите.

ОД клаузула

Ги одредува табелите и барањата што ги содржат полињата наведени во изјавата SELECT.

Синтакса

ИЗБЕРИ поле_листа
ОД маса_израз

Изјавата SELECT што ја содржи клаузулата FROM ги вклучува следните елементи:

Елемент

Опис

поле_листа

маса_израз

Израз што дефинира една или повеќе табели - извори на податоци. Изразот може да биде име на табела, име на зачувано барање или израз на резултат составен со помош на операциите ВНАТРЕШЕН ПРИКЛУЧУВАЊЕ, ЛЕВО ПРИКЛУЧУВАЊЕ или ДЕСНО ПРИКЛУЧУВАЊЕ

надворешна_база на податоци

Целосна патека до надворешната база на податоци што ги содржи сите табели наведени во маса_израз

Забелешки


Присуството на клаузулата FROM по изјавата SELECT е задолжително.

Редоследот на листата на табелите во маса_изразне е важно.

Користење на поврзани табели (Поврзана табела. Табела што е зачувана во датотека што не припаѓа на отворена база на податоци, но е достапна од Microsoft Access. Корисникот има можност да додава, брише и менува записи во поврзаната табела, но не може да ја промени неговата структура.) наместо реченица IN, можете да го олесните и поефикасно процесот на преземање податоци од надворешна база на податоци.

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

ИЗБЕРЕТЕ Презиме, Име

ОД Вработени;

Наведете записи избрани за SQL прашања ( SQL јазик(Структуриран јазик за пребарување). Структуриран програмски јазик за пребарување и бази на податоци, широко користен за пристап, барање, ажурирање и манипулирање со податоци во релациони DBMS.

Синтакса

ИЗБЕРИ ]]
ОД маса

Изјавата SELECT што ги содржи овие предикати ги вклучува следните компоненти:

Компонента

Опис

Имплицирано ако ниту еден од предикатите не е вклучен. Моторот на базата на податоци на Microsoft Access ги избира сите записи што одговараат на условите на изјавата SQL (SQL изјава (низа). Израз што дефинира SQL команда, како што се SELECT, UPDATE или DELETE, и вклучува клаузули, како што се WHERE или ORDER BY SQL изјавите/низите најчесто се користат во прашања и во збирни функции.). Следниве два идентични примери покажуваат како да се вратат сите записи во табелата Вработени.

ОД Вработените

НАРАЧАЈ ПО EmployeeCode;

ОД Вработените

НАРАЧАЈ ПО EmployeeCode;

Исклучува записи што содржат дупликат податоци во избраните полиња. Само уникатните вредности на секое од полињата наведени во изјавата SELECT се вклучени во резултатите од барањето. На пример, некои од вработените наведени во табелата Вработени може да имаат исто презиме. Ако два записи го содржат презимето Иванов во полето Презиме, изјавата SQL подолу враќа само еден запис што го содржи презимето Иванов.

ИЗБЕРЕТЕ РАЗЛИЧНИ

Ако компонентата DISTINCT е испуштена, барањето ги враќа двата записи со презиме Иванов.

Ако клаузулата SELECT содржи повеќе полиња, комбинацијата на вредностите на сите полиња се вклучува во резултатите од барањето само ако е единствена за тој запис.

Резултатите од барањето што ја користи компонентата DISTINCT не се ажурираат за да ги одразуваат последователните промени направени од други корисници.

Исклучува податоци за евиденција кои целосно се повторуваат и не содржат поединечни полиња со исти податоци. Да претпоставиме дека е креирано барање кое се придружува на табелите „Клиенти“ и „Нарачки“ преку полето „Код на клиенти“. Табелата "Клиенти" не содржи дупликатни полиња за ИД на клиенти, но тие постојат во табелата "Нарачки" бидејќи секој клиент може да има повеќе нарачки. Следната изјава на SQL покажува како да се користи компонентата DISTINCTROW за да се наведат организациите кои направиле барем една нарачка без да ги спомнат деталите за тие нарачки.

ИЗБЕРЕТЕ РАЗЛИЧНИ ИМЕ ОД Клиенти ВНАТРЕШНИ ПРИКЛУЧУВАЊА НА нарачки

ON клиенти. CustomerCode = Нарачки. Код на клиентот

ПОРАЧАЈ СПОРЕД Наслов;

Ако компонентата DISTINCTROW е испуштена, барањето враќа повеќе редови за секоја организација што нарачала повеќе од еднаш.

Компонентата DISTINCTROW работи само кога се избираат полиња од некои од табелите што се користат во барањето. Компонентата DISTINCTROW се игнорира ако барањето вклучува само една табела или ако полињата се преземени од сите табели.

ВРВ n

Враќа одреден број записи кои се меѓу првите или последните записи од опсегот наведен во клаузулата ORDER BY. Да претпоставиме дека сакате да ги прикажете имињата на најдобрите 25 ученици во класата 1994 година.

Име презиме

КАДЕ Дипломска година = 2003 година

ПОРАЧАЈ ПО Оценка Просечна оценка DESC;

Ако не вклучите клаузула ORDER BY, барањето ќе врати случаен сет од 25 записи од табелата Студенти што ја задоволува клаузулата WHERE.

Предикатот ТОП не бара избор помеѓу еднакви вредности. Ако 25-тата и 26-тата записа од претходниот пример го имаа истиот Успех, барањето ќе врати 26 записи.

Можете исто така да го користите резервираниот збор PERCENT за да вратите одреден процент од првите или последните записи во опсегот наведен во клаузулата ORDER BY. Да претпоставиме дека наместо првите 25, сакате да ги прикажете долните 10% од студентите на дипломирањето.

ИЗБЕРЕТЕ ТОП 10 ПРОЦЕНТИ

Име презиме

КАДЕ Дипломска година = 2003 година

ПОРАЧАЈ СПОРЕД GradePointAverage ASC;

Предикатот ASC го одредува излезот на вредностите од долниот дел на опсегот. Вредноста што го следи предикатот TOP мора да биде вредност од типот Цел број (Цел број податочен тип. Основниот тип на податоци што се користи за складирање цели броеви. Целобројна променлива се зачувува како 64-битен (8-бајти) број во опсегот -32768 до 32767. ) непотпишана.

TOP предикат не влијае на можноста за ажурирање на барањето.

маса

Името на табелата од која се преземаат записите.

исто така види

ИЗБЕРИ Изјава

ОД клаузула

КАДЕ клаузула

Определува кои записи од табелите наведени во клаузулата FROM се обработуваат со изјавите SELECT, UPDATE или DELETE.

Синтакса

ИЗБЕРИ поле_листа
ОД маса_израз
КАДЕ избор_услови

Изјавата SELECT која содржи клаузула WHERE ги има следните делови.

Дел

Опис

поле_листа

Името на полето или полињата преземени заедно со кои било псевдоними (Алиас (SQL). Алтернативно име за табела или поле во израз. Алијасите обично се користат како пократки имиња на табели или полиња за полесно да се упатуваат подоцна во програмите, за да се спречат двосмислени референци и повеќе описни имиња при прикажување на резултатите од барањето.), предикати (ALL, DISTINCT, DISTINCTROW или TOP) или со која било друга опција од изјавата SELECT.

маса_израз

Името на табелата или табелите од кои се преземаат податоците.

избор_услови

Израз (Израз. Комбинација од математички и логички оператори, константи, функции, имиња на полиња, контроли и својства што резултира со една вредност. Изразот може да врши пресметки, да обработува текст или да потврдува податоци.), што мора да одговара на записи вклучени во резултатите од барањето.

Забелешки

Моторот на базата на податоци на Microsoft Access избира записи што ги исполнуваат условите наведени во клаузулата WHERE. Ако не е наведена клаузула WHERE, барањето ги враќа сите редови во табелата. Ако барањето специфицира повеќе табели, но не специфицира клаузула WHERE или JOIN, барањето произведува декартов производ (декартов производ. Е резултат на изјава SQL SELECT која има клаузула FROM која упатува на две или повеќе табели и нема WHERE или JOIN клаузула која го одредува методот на спојување.) табели.

Клаузулата WHERE не е потребна, но ако е потребна, мора да ја следи клаузулата FROM. На пример, можете да ги изберете сите вработени од одделот за продажба (WHERE Department = „Sales“) или сите клиенти на возраст од 18 до 30 години (WHERE Age Between 18 And 30).

Ако клаузулата JOIN не се користи за операција за спојување на SQL со повеќе табели, добиениот објект Снимањеќе биде невозможно да се ажурира.

Клаузулата WHERE е слична на клаузулата HAVING и ги дефинира избраните записи. Откако записите се групирани по клаузулата GROUP BY, клаузулата HAVING исто така одредува кој запис да се прикаже.

Клаузулата WHERE се користи за да се исклучат записите кои не треба да се групираат користејќи ја клаузулата GROUP BY.

Користете различни изрази за да одредите кои записи се враќаат со изјавата SQL. На пример, следната SQL изјава ги избира сите вработени чија плата е поголема од РС.

SELECT Презиме, Плата ОД Вработени КАДЕ Плата > 21000;

Клаузулата WHERE може да содржи до 40 изрази поврзани со логички оператори (на пример, ИИ ИЛИ).

Кога внесувате име на поле со празни места или интерпункциски знаци, ставете го во квадратни загради (). На пример, табелата со детали за клиентите може да содржи информации за одредени клиенти.

ИЗБЕРИ [Омилен ресторан на клиентот]

Со давање аргумент избор_услови, буквални датуми (Датум буквално. Секоја низа од знаци на валиден формат затворена во нумерички знаци (#). Валидни формати се форматот на датумот наведен во поставките за јазикот и стандардите и универзалниот формат на датум.) мора да биде претставен во формат на САД, дури и доколку се користи формат кој не е од САД.верзија на моторот на базата на податоци на Microsoft Access. На пример, датумот „10 мај 1996“ е напишан како 10/5/96 во ОК и како 05/10/1996 во Русија. Запомнете да приложите буквални датуми во нумерички знаци (#), како што е прикажано во примерите подолу.

За да најдете записи за 10 мај 1996 година во базата на податоци на ОК, користете ја следнава изјава SQL:

ИЗБЕРИ * ОД нарачки КАДЕ Датум на испорака = #10.05.1996#;

Можете исто така да ја користите функцијата DateValue, кој ги препознава меѓународните параметри, инсталиран од Microsoft Windows®. На пример, за Русија, користете го следниов код:

SELECT * FROM Orders WHERE Датум на испорака = DateValue ("05/10/1996");

И следниов код е за ОК:

SELECT * FROM Orders WHERE ShippingDate = DateValue("10/5/96");

Забелешка.Ако колоната наведена во редот за критериуми за избор е од типот GUID (Реплика ID (GUID). Поле од 16 бајти во базата на податоци на Microsoft Access што се користи за уникатни идентификатори при репликација. и други објекти.Во базите на податоци на Microsoft Access, GUID-ите се нарекуваат реплика ID.), синтаксата што се користи во услови на филтер е малку поинаква.

WHERE ReplicaID=(GUID(AB-CDEF0ABCDEF))

Проверете дали вгнездените загради и цртички се поставени правилно.

Изворна страница: http://office. /en-us/access/HA.aspx? pid=CH

ГРУПА ПО понуда

Спојува записи со иста вредност што се во наведената листа на полиња во еден запис. Збирна вредност се генерира за секој запис ако е вклучена SQL агрегатната функција во изјавата SELECT, на пример сумаили брои.

Синтакса

ИЗБЕРИ поле_листа
ОД маса
КАДЕ избор_состојба

Изјавата SELECT што ја содржи клаузулата GROUP BY ги вклучува следните елементи:

Елемент

Опис

поле_листа

Имиња на полиња преземени заедно со кои било псевдоними (Алијас (SQL). Алтернативно име за табела или поле во израз. Алијасите обично се користат како пократки имиња на табели или полиња за полесно да се посочат подоцнежните референци во програмите, за да се спречат двосмислени референци, и да се добијат повеќе описни имиња при прикажување на резултатите од барањето.) и SQL агрегати, предикати (ALL, DISTINCT, DISTINCTROW или TOP) или други опции SELECT на изјавата

маса

избор_услови

услов за избор. Ако изјавата содржи клаузула WHERE, тогаш откако ќе се примени на записите, вредностите ќе бидат групирани од моторот за база на податоци на Microsoft Access.

група_поле_листа

група_поле_листа

Забелешки

Клаузулата GROUP BY е изборна.

Ако агрегатите на SQL не се вклучени во изјавата SELECT, збирните вредности не се пресметуваат.

Вредностите на полето GROUP BY кои се нула може да содржат Null вредности.) се групирани и не се испуштаат. Сепак, вредностите Нуланиту една од статистичките функции на SQL не се оценува.

Клаузулата WHERE се користи за исклучување на редови кои не треба да се групираат. Клаузулата HAVING се користи за филтрирање на записите по групирањето.

Полиња од листата на полиња GROUP BY кои не содржат податоци од типот Memo (тип на податоци „Field MEMO“. Тип на податоци на полето во базата на Microsoft Access. Полето MEMO може да содржи до 65535 знаци.) или OLE Object ( Тип на податоци „Поле ОЛЕ објект“. Тип на податочен терен што се користи за складирање на објекти од други апликации поврзани со или вградени во базата на податоци на Microsoft Access.) може да се однесува на кое било поле во која било табела наведена во клаузулата FROM, дури и ако полето не е вклучено во изјавата SELECT. За да го направите ова, доволно е да имате барем една SQL агрегатна функција во изјавата SELECT. Моторот на базата на податоци на Microsoft Access не дозволува групирање по полиња што содржат податоци од типот „MEMO поле“ или „OLE објект“.

Сите полиња во списокот со полиња SELECT мора или да бидат содржани во клаузулата GROUP BY или да бидат аргументи на SQL агрегатната функција.

исто така види

ИЗБЕРИ Изјава

Избери...ВО изјава

Предикати СИТЕ, РАЗЛИЧНИ, РАЗЛИЧНИ, ТОП

ОД клаузула

ДА ИМА понуда

НАРАЧАЈ ПО понуда

КАДЕ клаузула

SQL статистички функции

Изворна страница: http://office. /en-us/access/HA.aspx? pid=CH

ДА ИМА понуда

Одредува групирани записи да се прикажуваат во изјава SELECT со клаузула GROUP BY. Откако записите се групирани по клаузулата GROUP BY, клаузулата HAVING ќе ги прикаже оние записи што одговараат на нејзините услови.

Синтакса

ИЗБЕРИ поле_листа
ОД маса
КАДЕ избор_услови
ГРУПА ПО група_поле_листа

Изјавата SELECT која содржи клаузула HAVING ги вклучува следните елементи:

Елемент

Опис

поле_листа

Имиња на полиња вчитани со какви било псевдоними (Алиас (SQL). Алтернативно име за табела или поле во изразот. Алијасите обично се користат како пократки имиња на табели или полиња за да се олеснат подоцнежните референци во програмите, за да се спречат двосмислени референци, и за да се добијат позначајни имиња кога се прикажуваат резултатите од барањето.) и SQL агрегати, предикати (ALL, DISTINCT, DISTINCTROW или TOP) или други опции за SELECT изјава.

маса

Името на табелата од која се вчитуваат записите

избор_состојба

услов за избор. Ако изјавата содржи клаузула WHERE, тогаш откако ќе се примени на записите, моторот на базата на податоци на Microsoft Access ќе ги групира вредностите.

група_поле_листа

Имиња на полиња (максимум 10) што се користат за групирање записи. Редоследот на имињата во група_поле_листаго одредува нивото на групирање - од највисоко до најниско

група_состојба

Израз кој одредува кои записи да се прикажуваат

Забелешки

Клаузулата HAVING е изборна.

Клаузулата HAVING е слична на клаузулата WHERE, која го одредува изборот на записи. По групирањето на записите со клаузулата GROUP BY, клаузулата HAVING одредува кои записи да се прикажат.

SELECTTypeCode,

Збир (во залиха)

ОД Производи

ГРУПА ПО Тип Код

ИМАЊЕ Sum(Instock) > 100 и како „TEL*“;

Клаузулата HAVING може да содржи до 40 изрази поврзани со логички оператори како на пр ИИ Или.

Изворна страница: http://office. /en-us/access/HA.aspx? pid=CH

НАРАЧАЈ ПО понуда

Ги подредува записите вратени од барањето во растечки или опаѓачки редослед според вредностите на наведените полиња.

Синтакса

ИЗБЕРИ поле_листа
ОД маса
КАДЕ избор_состојба
[, поле 2 ][, ...]]]

Изјавата SELECT што содржи клаузула ORDER BY ги вклучува следните елементи.

Елемент

Опис

поле_листа

Имиња на полиња преземени заедно со кои било псевдоними (Алијас (SQL). Алтернативно име за табела или поле во израз. Алијасите обично се користат како пократки имиња на табели или полиња за полесно да се посочат подоцнежните референци во програмите, за да се спречат двосмислени референци, и за да се добијат позначајни имиња кога се прикажуваат резултатите од барањето.) и SQL агрегати, предикати (ALL, DISTINCT, DISTINCTROW или TOP) или други опции за SELECT изјава.

маса

Името на табелата од која се преземаат записите

избор_услови

услови за избор. Ако изјавата содржи клаузула WHERE, тогаш откако ќе ја примени на записите, моторот на базата на податоци на Microsoft Access ќе ги нареди вредностите на записите

поле 1, поле 2

Имињата на полињата по кои се подредени записите.

Забелешки

Клаузулата ORDER BY е изборна. Треба да се користи кога треба да се прикажат податоците во сортирана форма.

Стандардниот редослед на сортирање е (Редослед на подредување. Начин на подредување податоци врз основа на нивната вредност и тип. Податоците може да се подредуваат по азбучен ред, по нумеричка вредност или по датум. Редоследот на сортирање може да биде растечки (0 до 100, од ​​А до Ш) или опаѓачки (100 до 0, Z до A).) растечки (А до Ш, 0 до 9). Примерите подолу покажуваат сортирање на имињата на вработените по презиме.

ИЗБЕРЕТЕ Презиме, Име

ОД Вработените

ПОРАЧАЈ ПО Презиме;

ИЗБЕРЕТЕ Презиме, Име

ОД Вработените

ПОРАЧАЈ ПО Презиме ASC;

За да ги подредите полињата по опаѓачки редослед (Z до A, 9 до 0), додадете го резервираниот збор DESC на името на секое од овие полиња. Следниот пример е сортиран по опаѓачки редослед врз основа на платите на вработените.

ИЗБЕРЕТЕ Презиме, Плата

ОД Вработените

ПОРАЧАЈ СПОРЕД Плата ОПИС, Презиме;

Ако наведете полиња во клаузулата ORDER BY кои содржат податоци од типот MEMO Field (Тип на податоци „MEMO Field“. Типот на полето во базата на Microsoft Access. Полето MEMO може да содржи до 65535 знаци.) или OLE Object Поле (Тип на податоци „OLE Object Field“. Тип на теренски податок што се користи за зачувување на објекти од други апликации кои се поврзани со или вградени во базата на податоци на Microsoft Access.), ова ќе резултира со грешка. Моторот за база на податоци на Microsoft Access не може да ги сортира овие типови полиња.

Клаузулата ORDER BY е обично последната клаузула во изјавата SQL (SQL изјава (низа). Израз што дефинира команда SQL, како што се SELECT, UPDATE или DELETE, и вклучува клаузули, како WHERE или ORDER BY. SQL изјави /редовите најчесто се користат во прашања и во статистичките функции.).

Дополнителни полиња може да се вклучат во клаузулата ORDER BY. Записите прво се подредуваат по полето наведено прво во клаузулата РЕД ПО . Записите со иста вредност во првото поле потоа се подредуваат според полето наведено во второто поле итн.
исто така види

ИЗБЕРИ Изјава

Избери...ВО изјава

Предикати СИТЕ, РАЗЛИЧНИ, РАЗЛИЧНИ, ТОП

ОД клаузула

ГРУПА ПО понуда

ДА ИМА понуда

КАДЕ клаузула

SQL статистички функции

Изворна страница: http://office. /en-us/access/HA.aspx? pid=CH

Операција ВНАТРЕШНО СОЈУВАЊЕ

Спојува записи од две табели ако поврзувачките полиња на овие табели ги содржат истите вредности.

Синтакса

ОД Табела 1ВНАТРЕШЕН ПРИКЛУЧУВАЊЕ табела 2НА Табела 1.поле 1 споредба_оператор табела2.поле 2

Операцијата ВНАТРЕШЕН ПРИКЛУЧУВАЊЕ се состои од следниве елементи:

Елемент

Опис

Табела 1, табела 2

Имиња на табели кои содржат споени записи

поле 1, поле 2

Поврзани имиња на полиња. Полињата кои не се нумерички мора да бидат од ист тип на податоци (Тип на податоци. Карактеристика на поле што го одредува типот на податоци што може да ги содржи ова поле. Достапни се следните типови податоци: Булова, Цел број, Долг, Валута, Единечна, Двојна, Датум, низа и варијанта (стандардно).) и содржат податоци од ист вид. Сепак, имињата на овие полиња може да бидат различни.

споредба_оператор

Било кој оператор за споредба: (=,<, >, <=, >= или<>)




Врв