Căutați valori în toate tabelele SQL. Lucrul cu baza de date

Interogările sunt scrise fără ghilimele de escape, deoarece MySQL, MS SQLŞi PostGree sunt diferite.

Interogare SQL: obținerea câmpurilor specificate (necesare) din tabel

SELECT ID, country_title, count_people FROM table_name

Primim o listă de înregistrări: TOATE țările și populațiile lor. Numele câmpurilor obligatorii sunt indicate separate prin virgule.

SELECT * FROM table_name

* denotă toate câmpurile. Adică vor fi spectacole ABSOLUT TOTUL câmpuri de date.

Interogare SQL: scoaterea înregistrărilor dintr-un tabel, excluzând duplicatele

SELECTAȚI DISTINCT country_title FROM table_name

Primim o listă de înregistrări: țări în care se află utilizatorii noștri. Pot exista mulți utilizatori dintr-o singură țară. În acest caz, este cererea dvs.

Interogare SQL: afișarea înregistrărilor dintr-un tabel pe baza unei anumite condiții

SELECT ID, country_title, city_title FROM table_name WHERE count_people>100000000

Primim o listă de înregistrări: țări în care numărul de persoane este mai mare de 100.000.000.

Interogare SQL: scoaterea înregistrărilor dintr-un tabel cu ordonare

SELECT ID, city_title FROM table_name ORDER BY city_title

Primim o listă de înregistrări: orașe în ordine alfabetică. La începutul A, la sfârșitul Z.

SELECT ID, city_title FROM table_name ORDER BY city_title DESC

Obținem o listă de înregistrări: orașe în sens invers ( DESC) Bine. La început I, la sfârșit A.

Interogare SQL: numărarea numărului de înregistrări

SELECTAȚI COUNT(*) FROM table_name

Obținem numărul (numărul) de înregistrări din tabel. În acest caz, NU există o listă de înregistrări.

Interogare SQL: ieșirea intervalului dorit de înregistrări

SELECT * FROM table_name LIMIT 2, 3

Obținem 2 (a doua) și 3 (a treia) înregistrări din tabel. Interogarea este utilă atunci când se creează navigarea pe pagini WEB.

Interogări SQL cu condiții

Afișarea înregistrărilor dintr-un tabel bazat pe o condiție dată folosind operatori logici.

Interogare SQL: construcție ȘI

SELECT ID, city_title FROM table_name WHERE country="Russia" AND oil=1

Primim o listă de înregistrări: orașe din Rusia ŞI au acces la petrol. Când să folosiți operatorul ŞI, atunci ambele condiții trebuie să se potrivească.

Interogare SQL: construcție SAU

SELECT ID, city_title FROM table_name WHERE country="Russia" SAU country="USA"

Primim o listă de înregistrări: toate orașele din Rusia SAU STATELE UNITE ALE AMERICII. Când să folosiți operatorul SAU, atunci cel puțin o condiție trebuie să se potrivească.

Interogare SQL: ȘI NU construcție

SELECT ID, user_login FROM table_name WHERE country="Russia" AND NOT count_comments<7

Primim o listă de înregistrări: toți utilizatorii din Rusia ŞI care a făcut NU MAI MAI 7 comentarii.

Interogare SQL: construcție IN (B)

SELECT ID, user_login FROM table_name WHERE country IN ("Rusia", "Bulgaria", "China")

Primim o listă de înregistrări: toți utilizatorii care locuiesc în ( ÎN) (Rusia, sau Bulgaria sau China)

Interogare SQL: NU ÎN construcție

SELECT ID, user_login FROM table_name WHERE country NOT IN ("Rusia","China")

Primim o listă de înregistrări: toți utilizatorii care nu locuiesc în ( NU IN) (Rusia sau China).

Interogare SQL: construcție IS NULL (valori goale sau NOT goale)

SELECT ID, user_login FROM table_name WHERE starea ESTE NULL

Primim o listă de înregistrări: toți utilizatorii pentru care starea nu este definită. NULL este o problemă separată și, prin urmare, este verificată separat.

SELECT ID, user_login FROM table_name WHERE starea NU ESTE NULL

Obținem o listă de înregistrări: toți utilizatorii în care starea este definită (NU NULL).

Interogare SQL: construcție LIKE

SELECT ID, user_login FROM table_name WHERE nume de familie LIKE „Ivan%”

Primim o listă de înregistrări: utilizatori al căror nume de familie începe cu combinația „Ivan”. Semnul % înseamnă ORICE număr de ORICE caractere. Pentru a găsi semnul %, trebuie să utilizați evadarea „Ivan\%”.

Interogare SQL: BETWEEN construcție

SELECT ID, user_login FROM table_name WHERE salariul INTRE 25000 SI 50000

Primim o listă de înregistrări: utilizatori care primesc un salariu de la 25.000 la 50.000 inclusiv.

Există o mulțime de operatori logici, așa că studiați documentația serverului SQL în detaliu.

Interogări SQL complexe

Interogare SQL: combinarea mai multor interogări

(SELECT id, user_login FROM table_name1) UNION (SELECT id, user_login FROM table_name2)

Primim o listă de intrări: utilizatori care sunt înregistrați în sistem, precum și acei utilizatori care sunt înregistrați separat pe forum. Operatorul UNION poate combina mai multe interogări. UNION acționează ca SELECT DISTINCT, adică elimină valorile duplicat. Pentru a obține absolut toate înregistrările, trebuie să utilizați operatorul UNION ALL.

Interogare SQL: numărarea valorilor câmpului MAX, MIN, SUM, AVG, COUNT

Afișarea unei valori maxime a contorului în tabel:

SELECT MAX(contorul) FROM table_name

Ieșire a unei valori minime de contor din tabel:

SELECT MIN(contorul) FROM table_name

Afișarea sumei tuturor valorilor contorului în tabel:

SELECTAȚI SUMA(contorul) FROM table_name

Afișarea valorii medii a contorului în tabel:

SELECTAȚI AVG(contor) FROM table_name

Afișarea numărului de contoare din tabel:

SELECTAȚI COUNT(contorul) FROM table_name

Afișarea numărului de contoare din atelierul nr. 1 în tabel:

SELECT COUNT(counter) FROM table_name WHERE office="Workshop No. 1"

Acestea sunt cele mai populare echipe. Se recomandă, acolo unde este posibil, utilizarea interogărilor SQL de acest fel pentru calcule, deoarece niciun mediu de programare nu poate compara viteza de procesare a datelor decât serverul SQL însuși atunci când procesează propriile date.

Interogare SQL: gruparea înregistrărilor

SELECTAȚI continentul, SUM(țara_zona) FROM Țara GROUP BY continent

Primim o listă de înregistrări: cu numele continentului și suma zonelor tuturor țărilor lor. Adică, dacă există un director de țări în care fiecare țară are aria sa înregistrată, atunci folosind constructul GROUP BY puteți afla dimensiunea fiecărui continent (pe baza grupării pe continente).

Interogare SQL: folosind mai multe tabele prin alias

SELECT o.order_no, o.amount_paid, c.company FROM comenzi AS o, client AS cu WHERE o.custno=c.custno AND c.city="Tyumen"

Primim o listă de înregistrări: comenzi de la clienți care locuiesc numai în Tyumen.

De fapt, cu o bază de date proiectată corespunzător de acest tip, interogarea este cea mai frecventă, așa că a fost introdus în MySQL un operator special care funcționează de multe ori mai rapid decât codul scris mai sus.

SELECT o.order_no, o.amount_paid, z.company FROM comenzi AS o LEFT JOIN client AS z ON (z.custno=o.custno)

Subinterogări imbricate

SELECT * FROM table_name WHERE salariu=(SELECT MAX(salariu) FROM angajat)

Obținem o singură înregistrare: informații despre utilizatorul cu salariul maxim.

Atenţie! Subinterogările imbricate sunt unul dintre cele mai mari blocaje din serverele SQL. Împreună cu flexibilitatea și puterea lor, ele măresc, de asemenea, semnificativ sarcina pe server. Ceea ce duce la o încetinire catastrofală pentru alți utilizatori. Cazurile de apeluri recursive în interogări imbricate sunt foarte frecvente. Prin urmare, recomand insistent să NU folosiți interogări imbricate, ci să le împărțiți în altele mai mici. Sau utilizați combinația LEFT JOIN descrisă mai sus. În plus, acest tip de solicitare este o sursă sporită de încălcări de securitate. Dacă decideți să utilizați subinterogări imbricate, atunci trebuie să le proiectați foarte atent și să faceți rulări inițiale pe copii ale bazelor de date (baze de date de testare).

Interogările SQL modifică datele

Interogare SQL: INSERT

Instrucţiuni INTRODUCE vă permit să introduceți înregistrări într-un tabel. Cu cuvinte simple, creați un rând cu date într-un tabel.

Opțiunea #1. Instrucțiunea care este adesea folosită este:

INSERT INTO table_name (id, user_login) VALUES (1, "ivanov"), (2, "petrov")

la masa" table_name„2 (doi) utilizatori vor fi introduși deodată.

Opțiunea #2. Este mai convenabil să folosiți stilul:

INSERT table_name SET id=1, user_login="ivanov"; INSERT table_name SET id=2, user_login="petrov";

Acest lucru are avantajele și dezavantajele sale.

Principalele dezavantaje:

  • Multe interogări SQL mici se vor executa puțin mai lent decât o interogare SQL mare, dar alte interogări vor fi în coadă pentru service. Adică, dacă o interogare SQL mare durează 30 de minute pentru a se finaliza, atunci în tot acest timp interogările rămase vor fuma bambus și își vor aștepta rândul.
  • Solicitarea se dovedește a fi mai masivă decât versiunea anterioară.

Principalele avantaje:

  • În timpul interogărilor SQL mici, alte interogări SQL nu sunt blocate.
  • Ușurință de citit.
  • Flexibilitate. În această opțiune, nu trebuie să urmați structura, ci să adăugați doar datele necesare.
  • Când creați arhive în acest fel, puteți copia cu ușurință o linie și o puteți rula prin linia de comandă (consolă), astfel nu restaurând întreaga ARHIVĂ.
  • Stilul de scriere este similar cu declarația UPDATE, făcându-l mai ușor de reținut.

Interogare SQL: UPDATE

UPDATE table_name SET user_login="ivanov", user_surname="Ivanov" WHERE id=1

În tabel " table_name„în înregistrarea cu numărul id=1, valorile câmpurilor user_login și user_surname vor fi modificate la valorile specificate.

Interogare SQL: DELETE

DELETE FROM table_name WHERE id=3

În tabelul table_name înregistrarea cu numărul ID 3 va fi ștearsă.

  1. Se recomandă să scrieți toate numele câmpurilor cu litere mici și, dacă este necesar, să le separați cu un spațiu forțat „_” pentru compatibilitate cu diferite limbaje de programare, precum Delphi, Perl, Python și Ruby.
  2. Scrieți comenzile SQL cu majuscule pentru a fi lizibile. Amintiți-vă întotdeauna că alte persoane pot citi codul după dvs. și, cel mai probabil, voi înșivă după N perioadă de timp.
  3. Numiți câmpurile mai întâi cu un substantiv și apoi cu o acțiune. De exemplu: city_status, user_login, user_name.
  4. Încercați să evitați cuvintele rezervate în diferite limbi care pot cauza probleme în SQL, PHP sau Perl, cum ar fi (nume, număr, link). De exemplu: linkul poate fi folosit în MS SQL, dar este rezervat în MySQL.

Acest material este o referință scurtă pentru munca de zi cu zi și nu pretinde a fi o sursă super mega autorizată, care este sursa originală de interogări SQL pentru o anumită bază de date.

Să începem cu interogările de bază. Cum ar fi fără ei? Cea mai laconică formă a unei interogări SQL se traduce prin „Vreau să obțin toate datele din acest tabel”. Rezultatul următoarei interogări sunt toate înregistrările cu toate câmpurile din tabelul D_STAFF.

SELECTAȚI * FROM D_STAFF

Introducerea unei interogări SQL în programul de instruire.

Selectați [secțiunea SQL] în Explorer din stânga, faceți clic pe [butonul SQL] deasupra listei din dreapta, introduceți o interogare și faceți clic din nou pe [butonul SQL]. După confirmarea cererii, lista din dreapta va arăta astfel. În acest caz, totul este mai simplu: trebuie doar să introduceți interogarea SQL în câmpul corespunzător și să faceți clic pe [Run].


Rezultatul executării unei interogări SQL simple.

Folosirea (*) după instrucțiunea SELECT este cu siguranță convenabilă, mai ales dacă nu știi ce câmpuri există în tabel, dar este și costisitoare - structurile care stochează rezultatul unei interogări consumă destul de multă memorie „extra”, iar acest lucru se adaugă doar la creșterea timpului petrecut pentru executarea interogării în sine. Următoarea opțiune este mult de preferat dacă aveți nevoie doar de informații despre numele dvs. complet. angajat și vechimea acestuia. Traducerea este cam așa: „Vreau să știu doar asta și asta despre toți cei din tabel...”

SELECTAȚI S_NAME, S_EXPERIENCE FROM D_STAFF

Rezultatul ultimei interogări SQL ocupă mult mai puțin spațiu în lățime.


Selectarea valorilor pentru anumite câmpuri de tabel.

Pasul 2. Interogare SQL cu un criteriu de selecție simplu

Cele mai simple interogări nu sunt practic aplicabile în practică, deoarece „extrag” absolut toate înregistrările din tabelul specificat și pot exista sute de mii de ele. SGBD-ul poate refuza pur și simplu să îndeplinească o astfel de solicitare și pur și simplu s-ar putea să nu existe suficientă memorie RAM pe computerul clientului. Ce să faci cu rezultatele unor astfel de interogări, chiar dacă sunt executate corect, nu este întotdeauna clar, deși pentru unii va funcționa. Pentru a impune restricții asupra selecției înregistrărilor de care aveți nevoie, SQL folosește cuvântul cheie WHERE. Interogarea de mai jos selectează doar angajații cu mai puțin de 5 ani de experiență.

SELECTAȚI S_NAME, S_EXPERIENCE FROM D_STAFF WHERE S_EXPERIENCE


Utilizare criteriu simplu selecția înregistrărilor.

Pasul 3. Interogare SQL cu criterii de selecție compuse

Pentru ce sunt? criterii de selecție compoziteînregistrări, cred că nu este nevoie să explic. În același scop ca și interogările cu criterii simple. Condițiile sunt combinate folosind operații logice conjuncţiiŞi disjuncții(operatori AND și SAU) și sunt grupate folosind paranteze. Următoarea interogare va returna înregistrările angajaților cu mai puțin de 5 ani de experiență și cu o restricție suplimentară asupra funcției pe care o dețin.

SELECTAȚI S_NAME, S_EXPERIENCE, S_POSITION FROM D_STAFF WHERE (D_STAFF.S_POSITION 20) ȘI D_STAFF.S_EXPERIENCE


Utilizare criteriu complex selecția înregistrărilor.

Pasul 4. ÎNTRE Operator

Operatorul BETWEEN simplifică sintaxa pentru descrierea criteriilor care definesc intervalul de valori acceptabile. În loc de ÎNTRE 3 ȘI 7 de mai jos, puteți scrie D_STAFF.S_EXPERIENCE >=3 AND D_STAFF.S_EXPERIENCE<=7 . Первый вариант способствует наглядности запроса – это раз, поиск на стороне СУБД может выполняться по отдельному алгоритму, специально оптимизированному для подобного вида ограничений – это два.

SELECTAȚI S_NAME, S_EXPERIENCE, S_POSITION FROM D_STAFF WHERE (D_STAFF.S_POSITION 20) ȘI D_STAFF.S_EXPERIENCE ÎNTRE 3 ȘI 7


Folosind operatorul BETWEEN.

Pasul 5: LIKE Operator

Acest operator minunat vă permite să restricționați valorile câmpurilor de text folosind metacaractere. Nu voi explica sintaxa, cred că totul este clar din exemplu. Căutăm angajați cu nume complet. incepand cu "CU", ar trebui să se întâlnească la mijloc "Arbore" si totul trebuie sa se termine cu „ich”. În unele SGBD, cuvântul cheie LIKE poate fi folosit și cu valori de dată și oră.

SELECTAȚI S_NAME DIN D_STAFF UNDE S_NAME LIKE „C%” ȘI S_NAME LIKE „%Val%” ȘI S_NAME LIKE „%ich”

SELECTAȚI S_NAME DIN D_STAFF WHERE S_NAME LIKE „S%Val%ich”


Folosind operatorul LIKE.

Pasul 6: Aliasuri de tabel și câmp

Tabelele și numele câmpurilor utilizate în interogare pot fi determinate pseudonime. Cum se face acest lucru este demonstrat mai jos. De ce se face acest lucru va fi arătat în următorii pași, inclusiv pasul 7, iar acest exemplu ilustrează cel mai evident folosind aliasuri în SQL– înregistrarea rezultatului cererii în conformitate cu cerințele pentru comoditatea perceperii acesteia de către o persoană. Pentru a defini un alias pentru un tabel sau un câmp în SQL, este folosit cuvântul cheie AS. Rezultatul interogării (antetul tabelului) în această versiune pare mai potrivit pentru realizarea unui raport pe baza acestuia.

SELECTAȚI S_NAME CA Angajat, S_EXPERIENCE AS [Experiență de lucru], S_POSITION AS Poziție FROM D_STAFF CA STAFF


Aplicarea aliasurilor de tabel și câmp.

Pasul 7. Relația „Șef - subordonat”

Acest exemplu completează „primii pași” de învățare a interogărilor SQL cu cele mai complexe dintre ele. Aici „programăm” rezultatul unei liste de angajați împreună cu managementul lor imediat. Dificultatea este că înregistrările despre ambele sunt stocate în același tabel și aici nu puteți face fără aliasuri. SGBD, în timpul procesării interogărilor, va accesa tabelul D_STAFF ca și cum ar fi două tabele diferite (sub aliasurile STAFF și CHIEF), pentru a combina înregistrările într-un singur caravană pe baza relaţiei „superior-subordonat”. Relația este modelată astfel: valoarea câmpului S_CHIEF_ID al unui subordonat corespunde valorii câmpului XD_IID al superiorului său.

SELECTAȚI STAFF.S_NAME CA Subordonat, STAFF.S_POSITION AS [Posiția subordonată], CHIEF.S_NAME CA Șef, CHIEF.S_POSITION AS [Posiția de supervizor] FROM D_STAFF CA STAFF, D_STAFF CA ȘEF WHERE STAFF.S_CHIEF_ID=CHIEF.


Obținerea ierarhiei „superior - subordonat” folosind un alias de tabel într-o interogare SQL.

Continuăm să explorăm capabilitățile SQL Server de la Microsoft și următoarea noastră componentă este Căutare text integral, în versiunea rusă este „ Căutare text integral", iar acum vom afla de ce este nevoie și cum să implementăm această căutare full-text într-un server SQL folosind această componentă.

Și vom începe, desigur, prin a lua în considerare elementele de bază ale căutării full-text, i.e. ce este si de ce este necesar?

Ce este căutarea text integral?

Căutare text integral este o căutare de cuvinte sau expresii în datele text. În mod obișnuit, acest tip de căutare este folosit pentru a căuta text într-o cantitate mare de date, de exemplu, un tabel cu un milion sau mai multe rânduri, deoarece este mult mai rapidă decât o căutare obișnuită, care poate fi făcută folosind constructul LIKE.

Căutarea full-text implică crearea unui index special ( este diferit de indicii obișnuiți) date text, care este un fel de dicționar de cuvinte care apar în aceste date.

Folosind căutarea full-text, puteți implementa un fel de sistem de căutare a documentelor ( aceste. linii), conform cuvintelor sau expresiilor din baza de date a afacerii dvs. Deoarece, pe lângă munca sa rapidă, are și capacitatea de a clasifica documentele găsite, i.e. atribuiți un rang fiecărui rând găsit, cu alte cuvinte, puteți găsi cele mai relevante înregistrări, adică cel mai potrivit pentru cererea dvs.

Capabilitati de cautare a textului integral in MS SQL Server

  • În căutarea de text integral SQL Server, puteți căuta nu numai după cuvinte sau expresii individuale, ci și după expresii de prefix, de exemplu, setați textul începutului unui cuvânt sau al unei fraze;
  • De asemenea, puteți căuta cuvinte după forme de cuvânt, de exemplu, diferite forme de verbe sau substantive la singular și la plural, de ex. De expresii derivate;
  • Puteți crea o interogare pentru a găsi cuvinte sau expresii care sunt apropiate de alte cuvinte sau expresii, de ex. expresii sensibile la locație;
  • Este posibil să căutați formele sinonime ale unui anumit cuvânt (tezaur), adică de exemplu, dacă tezaurul specifică că " Auto" Și " masina" sunt sinonime, atunci când căutați cuvântul " Auto„Setul de rezultate va include, de asemenea, linii care conțin cuvântul „ masina»;
  • Puteți specifica cuvinte sau expresii în interogarea dvs valori ponderate, de exemplu, dacă o interogare conține mai multe cuvinte sau expresii, atunci li se poate atribui o importanță de la 0,0 la 1,0 ( 1.0 înseamnă că este cel mai important cuvânt sau expresie);
  • Pentru a ignora unele cuvinte în căutare, puteți folosi „ lista de cuvinte oprite", adică cuvintele incluse în această listă nu vor fi căutate.

Pregătirea pentru implementarea căutării full-text în MS SQL Server

Înainte de a începe să creați o căutare de text integral, există câteva lucruri importante pe care trebuie să le știți:

  • Pentru a implementa căutarea full-text, componenta Full-Text Search ( Căutare text integral) trebuie instalat;
  • Un tabel poate avea un singur index full-text;
  • Pentru a crea un index full-text, un tabel trebuie să conțină un index unic care include o coloană și nu permite valori nule. Se recomandă utilizarea unui index cluster unic ( sau doar cheia primară), a cărui primă coloană trebuie să fie un tip de date întreg;
  • Un index full-text poate fi creat pe coloane cu un tip de date: char, varchar, nchar, nvarchar, text, ntext, image, xml, varbinary sau varbinary(max);
  • Pentru a crea un index full-text, mai întâi trebuie să creați un catalog full-text. Începând cu SQL Server 2008, un catalog full-text este un concept logic care se referă la un grup de indici full-text, de exemplu. este un obiect virtual și nu face parte dintr-un grup de fișiere ( există o modalitate de a crea un index full-text folosind „Asistentul”, în care directorul poate fi creat simultan cu indexul, vom lua în considerare această metodă mai jos).

Nota! Voi implementa căutarea full-text folosind exemplul SQL Server 2008 R2. De asemenea, se presupune că ați instalat deja componenta Full-Text Search, dacă nu, instalați-o adăugând componenta corespunzătoare prin „Centrul de instalare SQL Server”, adică; bifați caseta corespunzătoare.

În exemplele de mai jos, voi folosi SQL Server Management Studio ca instrument pentru crearea și gestionarea cataloagelor și indicilor full-text.

Date inițiale pentru crearea unei căutări full-text

Să presupunem că avem o bază de date TestBase, iar în ea există un tabel TestTable, în care există doar două câmpuri, primul (id) este cheia primară, iar al doilea (textdata) este text, conform căruia noi va efectua o căutare integrală.

CREATE TABLE TestTable(id int IDENTITY(1,1) NOT NULL, textdata varchar(500) NULL, CONSTRAINT PK_TestTable PRIMARY KEY CLUSTERED (id ASC))

De exemplu, va conține următoarele date


Crearea unui catalog de text complet în SQL Server

Pentru a crea un catalog de text complet, precum și un index, puteți utiliza fie interfața grafică SSMS, fie instrucțiunile T-SQL, vom analiza ambele metode.

Crearea unui catalog full-text în T-SQL

CREATE FULLTEXT CATALOG TestCatalog WITH ACCENT_SENSITIVITY = ON CA AUTORIZARE IMPLICITĂ dbo GO

  • CREATE FULLTEXT CATALOG – comandă pentru a crea un catalog full-text;
  • TestCatalog – numele catalogului nostru full-text;
  • WITH ACCENT_SENSITIVITY (ON|OFF) – această opțiune specifică dacă catalogul full-text va ține cont de semnele diacritice pentru indexarea full-text. Implicit este ON;
  • AS DEFAULT – opțiune pentru a indica că directorul este directorul implicit. Dacă creați un index full-text fără a specifica în mod explicit un director, este utilizat directorul implicit;
  • AUTORIZARE dbo - setează proprietarul catalogului full-text, acesta poate fi un utilizator sau un rol de bază de date. În acest caz, am specificat rolul dbo.

Crearea unui catalog full-text în GUI Management Studio

Exact același catalog full-text poate fi creat în interfața grafică a Management Studio. Pentru a face acest lucru, deschideți baza de date, accesați folderul Stocare -> Cataloage full-text, faceți clic dreapta pe acest articol și selectați „ Creați un catalog cu text integral».


Se va deschide o fereastră de creare a directorului, unde specificăm numele directorului și opțiunile acestuia.


Modificarea și ștergerea unui catalog full-text în SQL Server

Pentru a schimba opțiunile de director, puteți folosi instrucțiunea ALTER FULLTEXT CATALOG, de exemplu, să facem catalogul nostru să nu mai ia în considerare diacritice, pentru aceasta scriem o instrucțiune SQL care ne va reconstrui catalogul cu noua opțiune.

ALTER FULLTEXT CATALOG TestCatalog RECONSTRUIRE WITH ACCENT_SENSITIVITY=OFF GO

Pentru a elimina un director puteți folosi o instrucțiune T-SQL, de exemplu

DROP FULLTEXT CATALOG TestCatalog

Toate acestea ar putea fi făcute în interfața grafică a Management Studio ( pentru a modifica parametrii directorului „Proprietăți”, pentru a șterge „Șterge”)

Crearea unui index full-text în SQL Server

Odată ce ați creat un catalog cu text integral, puteți începe să creați indecși cu text integral în el. În cazul nostru, dorim să creăm un index full-text care să includă câmpul textdata al tabelului TestTable.

Crearea unui index full-text în T-SQL

Pentru a crea un index full-text, puteți scrie următoarea instrucțiune SQL

CREATE FULLTEXT INDEX ON TestTable(textdata) KEY INDEX PK_TestTable ON (TestCatalog) WITH (CHANGE_TRACKING AUTO) GO

  • CREATE FULLTEXT INDEX – comandă pentru a crea un index full-text;
  • TestTable(textdata) – tabel și coloană incluse în index;
  • KEY INDEX PK_TestTable – numele indexului unic al tabelului TestTable;
  • ON (TestCatalog) - indică faptul că indexul de text complet va fi creat în catalogul de text integral TestCatalog. Dacă nu specificați acest parametru, indexul va fi creat în catalogul implicit cu text integral;
  • WITH (CHANGE_TRACKING AUTO) - spunem că toate modificările care vor fi făcute în tabelul de bază (TestTable) vor apărea automat în indexul nostru full-text, adică. umplere automată.

Crearea unui index full-text în GUI Management Studio

Un index full-text poate fi creat folosind instrumente grafice pentru a face acest lucru, deschideți proprietățile catalogului full-text și accesați articolul „; Tabele sau vederi", selectați tabelul, câmpul, indexul unic și metoda dorite pentru urmărirea modificărilor. În cazul nostru, avem un singur tabel disponibil și un câmp.


Modificarea sau eliminarea unui index de text complet

Dacă este necesar, puteți modifica parametrii indexului full-text. De exemplu, să schimbăm modul în care sunt urmărite modificările de la automat la manual. Pentru a face modificări în interfața grafică, puteți utiliza " Proprietăți catalog text integral -> Tabele sau vizualizări", pe care l-am folosit pentru a crea indexul full-text.

Sau puteți scrie următorul cod

ALTER FULLTEXT INDEX ON TestTable SET CHANGE_TRACKING = MANUAL

Pentru a șterge un index full-text, pur și simplu eliminați tabelul din lista de obiecte asociate cu catalogul full-text din aceeași fereastră " Proprietăți catalog text integral -> Tabele sau vizualizări»


Sau scrie cod T-SQL

ROȚIȚI INDEXUL TEXTULUI COMPLET PE TestTable

Crearea unui catalog cu text complet și a unui index folosind un expert

După cum am menționat mai devreme, un catalog și un index cu text complet pot fi create folosind vrăjitorul, de exemplu. pas cu pas, pentru a face acest lucru, faceți clic dreapta pe tabelul pe care vrem să-l includem în căutarea full-text și selectați „ Index text complet ->Definește index text complet».

Nota! Înainte de a face acest lucru, am șters atât directorul, cât și indexul pe care le-am creat în exemplele anterioare.


Aceasta va lansa Expertul de indexare a textului complet SQL Server.



Apoi coloana care va fi inclusă în indexul textului integral.


Apoi trebuie să alegeți o modalitate de a urmări modificările.


Indicăm numele directorului și opțiunile acestuia pentru a-l crea, deoarece se presupune că nu avem un director, l-am putea selecta;


Aici putem configura programul pentru completarea catalogului full-text.


Pentru a crea un catalog și un index, faceți clic pe „ Gata».


În fereastra următoare vom vedea rezultatul operațiunilor de creare a unui catalog și index full-text. În cazul meu, totul a mers bine.


Astfel, am creat catalogul full-text și indexul simultan folosind vrăjitorul.

Exemple de interogări full-text

Voi spune imediat că vom lua în considerare interogările full-text mai detaliat în materialele următoare, dar deocamdată, ca exemplu și confirmare că căutarea noastră full-text funcționează, să scriem câteva interogări simple cu text integral.

Dacă vă amintiți, TestTable-ul nostru conține definiții ale tehnologiilor, limbajelor de programare, în general, definiții legate de domeniul IT. Să presupunem că vrem să obținem toate înregistrările unde există o mențiune despre Microsoft, pentru aceasta scriem o interogare full-text cu cuvântul cheie CONTAINS, de exemplu:

SELECTAȚI * FROM TestTable WHERE CONTAINS (date text, „„Microsoft”)


Am obținut rezultatul, dar să presupunem că trebuie să-l sortăm și după relevanță, cu alte cuvinte, ce rânduri sunt mai relevante pentru interogarea noastră. Pentru a face acest lucru, vom folosi funcția CONTAINSTABLE, care atribuie un rang fiecărei înregistrări găsite.

SELECTați Table1.id AS ID, RowRank.Rank ca , Table1.textdata ca FROM TestTable Table1 INNER JOIN CONTAINSTABLE(TestTable, textdata, ""Microsoft") ca RowRank pe Table1.id=RowRank.


ORDER BY RowRank.RANK DESC

După cum puteți vedea, rangul este stabilit și liniile sunt sortate după el. Algoritmul de clasare în sine, precum și informații mai detaliate despre căutarea full-text, pot fi găsite în SQL Server Books Online.

Propun sa inchei aici, sper ca totul a fost clar, succes!

De aceea am pregătit un scurt tur al elementelor de bază ale SQL. Să începem!

1. Creați un tabel

Instrucțiunea CREATE TABLE este folosită pentru a crea tabele. Argumentele trebuie să fie numele coloanelor, precum și tipurile de date ale acestora.

Să creăm un tabel simplu după nume lună. Este format din 3 coloane:

  • id– Numărul lunii din anul calendaristic (întreg).
  • nume– Numele lunii (șir, maximum 10 caractere).
  • zile– Numărul de zile din această lună (întreg).

Iată cum ar arăta interogarea SQL corespunzătoare:

CREATE TABLE luni (id int, nume varchar(10), zile int);

De asemenea, la crearea tabelelor, este recomandabil să adăugați o cheie primară pentru una dintre coloane. Acest lucru va păstra înregistrările unice și va accelera cererile de preluare. În cazul nostru, să fie numele lunii unic (coloana nume)

CREATE TABLE luni (id int, name varchar(10), days int, PRIMARY KEY (nume));

Data și ora
Tip de dateDescriere
DATAValori date
DATETIMEValori date și ore exacte la minut
TIMPValori de timp

2. Inserarea rândurilor

Acum să ne completăm tabelul luni informatii utile. Adăugarea înregistrărilor la un tabel se face folosind instrucțiunea INSERT. Există două moduri de a scrie această instrucțiune.

Prima metodă nu este de a specifica numele coloanelor în care vor fi inserate datele, ci de a specifica doar valorile.

Această metodă de înregistrare este simplă, dar nesigură, deoarece nu există nicio garanție că, pe măsură ce proiectul se extinde și tabelul este editat, coloanele vor fi în aceeași ordine ca înainte. O modalitate sigură (și în același timp mai greoaie) de a scrie o instrucțiune INSERT necesită specificarea atât a valorilor, cât și a ordinii coloanelor:

Iată prima valoare din listă VALORI se potrivește cu primul nume de coloană specificat etc.

3. Extragerea datelor din tabele

Declarația SELECT este cel mai bun prieten al nostru atunci când dorim să extragem date dintr-o bază de date. Este folosit foarte des, așa că acordați o atenție deosebită acestei secțiuni.

Cea mai simplă utilizare a instrucțiunii SELECT este o interogare care returnează toate coloanele și rândurile dintr-un tabel (de exemplu, tabelele după nume personaje):

SELECTAȚI * DIN „personaje”

Simbolul asterisc (*) înseamnă că dorim să obținem date din toate coloanele. Deoarece bazele de date SQL constau de obicei din mai mult de un tabel, este necesar să specificați cuvântul cheie FROM, urmat de numele tabelului, separat de un spațiu.

Uneori nu dorim să obținem date de la toate coloanele dintr-un tabel. Pentru a face acest lucru, în loc de asterisc (*), trebuie să notăm numele coloanelor dorite, separate prin virgulă.

SELECT ID, numele FROM luna

În plus, în multe cazuri dorim ca rezultatele rezultate să fie sortate într-o anumită ordine. În SQL facem acest lucru folosind ORDER BY. Poate accepta un modificator opțional - sortarea ASC (implicit) în ordine crescătoare sau DESC, sortarea în ordine descrescătoare:

SELECT ID, nume FROM luna ORDENARE DUPA nume DESC

Când utilizați ORDER BY, asigurați-vă că este ultimul în instrucțiunea SELECT. În caz contrar, va fi afișat un mesaj de eroare.

4. Filtrarea datelor

Ați învățat cum să selectați anumite coloane dintr-o bază de date folosind o interogare SQL, dar ce se întâmplă dacă trebuie să recuperăm și anumite rânduri? Clauza WHERE vine în ajutor aici, permițându-ne să filtram datele în funcție de condiție.

În această interogare, selectăm doar acele luni din tabel lună, în care există mai mult de 30 de zile folosind operatorul mai mare decât (>).

SELECT ID, nume FROM luna WHERE zile > 30

5. Filtrare avansată a datelor. operatori AND și SAU

Anterior, am folosit filtrarea datelor folosind un singur criteriu. Pentru o filtrare mai complexă a datelor, puteți utiliza operatorii AND și SAU și operatorii de comparație (=,<,>,<=,>=,<>).

Aici avem un tabel care conține cele patru albume cele mai vândute din toate timpurile. Să le alegem pe cele care sunt clasificate ca rock și s-au vândut în mai puțin de 50 de milioane de exemplare. Acest lucru se poate face cu ușurință prin plasarea unui operator AND între aceste două condiții.


SELECT * FROM albume WHERE gen = „rock” AND sales_in_millions<= 50 ORDER BY released

6. În/Între/Like

WHERE acceptă, de asemenea, mai multe comenzi speciale, permițându-vă să verificați rapid interogările cele mai frecvent utilizate. Iată-le:

  • IN – servește pentru a indica o serie de condiții, dintre care oricare poate fi îndeplinită
  • BETWEEN – verifică dacă o valoare se află în intervalul specificat
  • LIKE – caută modele specifice

De exemplu, dacă vrem să selectăm albume cu popŞi suflet muzica, putem folosi IN("value1","value2") .

SELECTAȚI * DIN albumele WHERE genul IN ("pop","soul");

Dacă vrem să obținem toate albumele lansate între 1975 și 1985, trebuie să scriem:

SELECTAȚI * DIN albumele WHERE lansate ÎNTRE 1975 ȘI 1985;

7. Funcții

SQL este plin de funcții care fac tot felul de lucruri utile. Iată câteva dintre cele mai frecvent utilizate:

  • COUNT() – returnează numărul de rânduri
  • SUM() - returnează suma totală a unei coloane numerice
  • AVG() - returnează media unui set de valori
  • MIN() / MAX() – Obține valoarea minimă/maximă dintr-o coloană

Pentru a obține cel mai recent an în tabelul nostru, trebuie să scriem următoarea interogare SQL:

SELECT MAX (lansat) FROM albume;

8. Subinterogări

În paragraful anterior, am învățat cum să facem calcule simple cu date. Dacă dorim să folosim rezultatul din aceste calcule, nu ne putem lipsi de interogări imbricate. Să presupunem că vrem să ieșim artist, albumŞi anul lansării pentru cel mai vechi album din tabel.

Știm cum să obținem aceste coloane specifice:

SELECT artist, album, lansat DIN albume;

De asemenea, știm cum să obținem cel mai devreme an:

SELECT MIN (lansat) FROM album;

Tot ce este nevoie acum este să combinați cele două interogări folosind WHERE:

SELECT artist,album,released FROM albums WHERE lansat = (SELECT MIN(released) FROM albums);

9. Îmbinarea meselor

În bazele de date mai complexe, există mai multe tabele legate între ele. De exemplu, mai jos sunt două tabele despre jocuri video ( jocuri_video) și dezvoltatori de jocuri video ( game_developers).


În tabel jocuri_video există o coloană pentru dezvoltatori ( developer_id), dar conține un număr întreg, nu numele dezvoltatorului. Acest număr reprezintă identificatorul ( id) a dezvoltatorului corespunzător din tabelul dezvoltatorilor de jocuri ( game_developers), legând logic două liste, permițându-ne să folosim informațiile stocate în ambele în același timp.

Dacă vrem să creăm o interogare care să returneze tot ce trebuie să știm despre jocuri, putem folosi un INNER JOIN pentru a lega coloanele din ambele tabele.

SELECT video_games.name, video_games.genre, game_developers.name, game_developers.country FROM video_games INNER JOIN game_developers ON video_games.developer_id = game_developers.id;

Acesta este cel mai simplu și mai comun tip JOIN. Există mai multe alte opțiuni, dar acestea se aplică cazurilor mai puțin frecvente.

10. Aliasuri

Dacă te uiți la exemplul anterior, vei observa că există două coloane numite nume. Acest lucru este confuz, așa că să setăm un alias la una dintre coloanele care se repetă, astfel nume de la masă game_developers va fi chemat dezvoltator.

De asemenea, putem scurta interogarea prin aliasarea numelor tabelelor: jocuri_video hai sa sunam jocuri, game_developers - dezvoltatori:

SELECT games.name, games.genre, devs.name AS dezvoltator, devs.country FROM video_games AS jocuri INNER JOIN game_developers AS devs ON games.developer_id = devs.id;

11. Actualizarea datelor

Adesea trebuie să schimbăm datele pe unele rânduri. În SQL acest lucru se face folosind instrucțiunea UPDATE. Declarația UPDATE constă din:

  • Tabelul în care se află valoarea de înlocuire;
  • Numele coloanelor și noile lor valori;
  • Rândurile selectate folosind WHERE pe care dorim să le actualizăm. Dacă acest lucru nu se face, toate rândurile din tabel se vor schimba.

Mai jos este tabelul Seriale TV cu serialele TV și ratingurile acestora. Cu toate acestea, o mică eroare s-a strecurat în tabel: deși seria Game of Thronesși este descrisă ca o comedie, chiar nu este. Să reparăm asta!

Date de tabel tv_series UPDATE tv_series SET gen = "drama" WHERE id = 2;

12. Ștergerea datelor

Ștergerea unui rând de tabel folosind SQL este un proces foarte simplu. Tot ce trebuie să faceți este să selectați tabelul și rândul pe care doriți să le ștergeți. Să ștergem ultimul rând din tabel din exemplul anterior Seriale TV. Acest lucru se face folosind instrucțiunea >DELETE.

DELETE FROM tv_series WHERE id = 4

Aveți grijă când scrieți instrucțiunea DELETE și asigurați-vă că este prezentă clauza WHERE, altfel toate rândurile din tabel vor fi șterse!

13. Ștergeți un tabel

Dacă vrem să ștergem toate rândurile, dar să părăsim tabelul în sine, atunci folosiți comanda TRUNCATE:

TRUNCATE TABLE nume_tabel;

În cazul în care dorim efectiv să ștergem atât datele, cât și tabelul în sine, atunci comanda DROP ne va fi utilă:

DROP TABLE nume_tabel;

Fii foarte atent cu aceste comenzi. Nu pot fi anulate!/p>

Aceasta încheie tutorialul nostru SQL! Sunt multe pe care nu le-am acoperit, dar ceea ce știți deja ar trebui să fie suficient pentru a vă oferi niște abilități practice pentru cariera dvs. pe web.