instrucțiune SELECT are următoarea structură:
SELECT este utilizat pentru a prelua rândurile selectate dintr-unul sau mai multe tabele. expresie Select_expression a coloanei specificate în care doriți să eșantion. În plus, declarația SELECT poate fi utilizat pentru a prelua rânduri calculate fără referire la orice masă. De exemplu:
Atunci când cuvintele cheie care specifică ar trebui să respecte cu exactitate procedura de mai sus. De exemplu, expresia HAVING trebuie plasat după toate clauza GROUP BY și înainte de toate expresiile ORDER BY.
Folosind cuvântul cheie AS. expresie în SELECT, aveți posibilitatea să atribuiți un alias. Alias-ul este folosit ca un nume de coloană în expresie și poate fi utilizată în ORDER BY sau HAVING. De exemplu:
aliasuri coloanelor nu pot fi utilizate în clauza WHERE. cum sunt coloanele de magnitudine la momentul de execuție care nu pot fi identificate încă. A se vedea secțiunea A.5.4, «Probleme cu alias».
Exprimarea DIN table_references specifică tabelul din care trebuie să extragă rândurile. Dacă un nume de mai mult de o masă, trebuie să fuzioneze. Pentru informații cu privire la sintaxa se alăture, a se vedea secțiunea 6.4.1.1, «Sintaxa Participați». puteți specifica un alias pentru fiecare tabel dat, la cerere.
În MySQL 3.23.12 versiuni, puteți specifica ce indexează (chei) MySQL ar trebui să folosească pentru a prelua informații dintr-un tabel. Acest lucru este util dacă EXPLICAȚI (informații despre afișarea de structura și ordinea SELECT interogare), arată că MySQL din lista de posibile indici au ales greșit. În cazul în care este necesar. pentru a căuta înregistrările din tabel, utilizând doar unul dintre indicii, trebuie să specificați valoarea indicelui în USE INDEX (KEY_LIST). Expresia alternativă IGNORE INDEX (KEY_LIST) interzice utilizarea MySQL în acest index particular.
În MySQL 4.0.9 puteți specifica, de asemenea, FORȚA INDEX. Acesta funcționează în același mod ca și indexul de (KEY_LIST), dar, în plus, face clar faptul că serverul de scanare tabel complet va fi operație foarte costisitoare. Cu alte cuvinte, în acest caz, o scanare tabel va fi utilizat numai atunci când este găsit un alt mod de a utiliza unul dintre acești indici pentru a căuta înregistrări în tabel.
Expresiile UTILIZARE / IGNORE KEY sunt sinonime pentru utilizare / IGNORE INDEX.
Link-uri către masa poate fi administrat ca tbl_name (în baza de date curentă), sau dbname.tbl_name pentru a specifica în mod clar în baza de date.
referințe de coloane pot fi prezentate în formă col_name. tbl_name.col_name sau db_name.tbl_name.col_name. În ceea ce privește tbl_name sau db_name.tbl_name nu este nevoie să specificați un prefix pentru o referință la o coloană într-o declarație SELECT. în cazul în care aceste link-uri nu pot fi interpretate în mod ambiguu. A se vedea secțiunea 6.1.2, „Numele de baze de date, tabele, coloane, indici aliasuri“. pentru exemple de cazuri ambigue, care necesită o definiție mai precisă a coloanei de referință.
Legătura la masă poate fi înlocuit cu un pseudonim, folosind tbl_name [AS] nume_alias.
În ORDER BY și GROUP BY pentru a se referi la coloanele selectate pentru ieșire, puteți utiliza orice nume de coloană sau alias-uri, sau poziția lor (locație). Numerotarea începe cu pozițiile coloana 1.
Pentru a sorta în ordine inversă, într-o ordine declarație de numele coloanei specificate în care pentru a sorta, adăugați DESC cuvinte cheie (descrescator). Standard acceptat de sortare în ordine crescătoare, care pot fi specificate în mod explicit, folosind cuvântul cheie ASC.
Expresia UNDE poate folosi oricare dintre funcțiile care sunt acceptate în MySQL. A se vedea secțiunea 6.3, „Funcții utilizate în clauzele SELECT și unde.“
Expresia HAVING se poate referi la orice coloană sau alias menționate în expresia select_expression. După ce a lucrat prin trecut, chiar înainte de a trimite datele către client, și fără nici un fel de discriminare de optimizare. Nu utilizați această expresie pentru a determina ceea ce trebuie să fie definit în cazul în care. De exemplu, nu puteți specifica următoarea declarație:
În schimb, ar trebui să întrebați:
În versiunea de MySQL 3.22.5 sau mai târziu, puteți scrie, de asemenea, interogări de genul:
În versiunile mai vechi ale MySQL în loc, puteți specifica:
Opțiuni (opțional) distinctivitate. DISTINCTROW și ALL specifică dacă să se întoarcă înregistrările duble. Setarea implicită (ALL), și anume întoarce toate aparițiile șirului. Și DISTINCTROW sunt DISTINCT sinonime și specifică faptul că rândurile duplicate din setul rezultat al datelor care urmează să fie șterse.
Toți parametrii, începând cu SQL_. STRAIGHT_JOIN și HIGH_PRIORITY. MySQL este o extensie a ANSI SQL.
Când specificați un parametru care conține HIGH_PRIORITY declarația SELECT va avea o prioritate mai mare decât o comandă care actualizează un tabel. Numai necesitatea de a utiliza această opțiune pentru interogări pentru a fi efectuate foarte rapid și imediat. Dacă tabelul este blocat pentru citirea, ancheta HIGH_PRIORITY SELECT va fi efectuată chiar dacă există o comandă de actualizare, așteptați până când un tabel devine liber.
Parametrul SQL_BIG_RESULT poate fi utilizat cu GROUP BY sau distincți. pentru a spune optimizatorul că rezultatul va conține un număr mare de rânduri. Dacă această opțiune este specificată, MySQL, dacă este necesar, se va utiliza imediat tabele temporare pe disc, dar se vor prefera să nu pentru a crea un tabel temporar cu o cheie pe elementele GROUP BY. și datele de sortare.
Când specificați parametrul SQL_BUFFER_RESULT MySQL va intra rezultatul într-un tabel temporar. Astfel, MySQL este capabil de a elibera dispozitivul de blocare înainte de masă; este de asemenea util atunci când pentru a trimite rezultatul la client ia o lungă perioadă de timp.
Opțiunea SQL_SMALL_RESULT este o opțiune specifică MySQL. Această opțiune poate fi utilizată cu BY GROUP sau distincți. pentru a spune optimizatorul că setul de rezultate va fi mic. În acest caz, MySQL pentru a stoca tabelul rezultat în loc de a folosi opțiunea de sortare se va utiliza tabele temporare rapid. În MySQL 3.23, specificați această opțiune nu este de obicei necesară.
SQL_CALC_FOUND_ROWS parametrilor (MySQL 4.0.0 și mai nou) returnează numărul de rânduri care urmează să fie returnate la instrucțiunea SELECT. în cazul în care nu a fost specificat LIMIT. Numărul dorit de linii pot fi obținute folosind FOUND_ROWS SELECT (). A se vedea secțiunea 6.3.6.2, «funcții diferite.“
Rețineți că versiunile MySQL înainte de 4.1.0 nu funcționează cu 0. LIMITĂ care este optimizat pentru a returna un rezultat nul imediat. A se vedea secțiunea 5.2.8, „Cum MySQL Optimizeaz LIMIT».
Parametrul SQL_CACHE instruiește MySQL stoca rezultatul interogării în cache-ul de interogare folosind QUERY_CACHE_TYPE = 2 (cerere). A se vedea secțiunea 6.9, „cache-ul de interogare MySQL».
Parametrul SQL_NO_CACHE interzice MySQL pentru a stoca rezultatul interogării în cache-ul de interogare. A se vedea secțiunea 6.9, „cache-ul de interogare MySQL».
Când utilizați GROUP BY expresii șir de ieșire vor fi sortate în funcție de ordinea specificată în GROUP BY. - ca și în cazul în care clauza ORDER BY aplicată tuturor domeniilor specificate în GROUP BY. În MySQL clauză GROUP BY este extins, astfel încât să puteți specifica, de asemenea, opțiunile ASC și DESC pentru el.
GROUP BY operatorul avansat în MySQL prevede, printre altele, alegerea de domenii care nu sunt menționate în cadrul grupului prin exprimare. Dacă solicitarea dvs. nu aduce rezultatele scontate, vă rugăm să citiți descrierea GROUP BY. A se vedea secțiunea 6.3.7, „Funcții utilizate în GROUP BY declarații.“
Dacă specificați STRAIGHT_JOIN de optimizare să se alăture tabele în ordinea în care acestea sunt enumerate în clauza FROM. Utilizarea acestui parametru permite creșterea vitezei de execuție a cererii în cazul în care de optimizare a produce mod suboptimal tabele de asociere. A se vedea secțiunea 5.2.1, «EXPLICAȚI Sintaxă (obținerea de informații despre SELECT).“
Expresia LIMIT poate fi utilizată pentru a limita numărul de rânduri returnate comanda SELECT. LIMIT ia una sau două argumente numerice. Aceste argumente trebuie să fie constante întregi. Dacă două argumente, primele puncte la începutul primului rând să se întoarcă, iar al doilea specifică numărul maxim de rânduri returnate. Deplasarea rândului inițial este 0 (1):
Pentru compatibilitate cu PostgreSQL MySQL sprijină, de asemenea, limita de # # OFFSET sintaxă.
Pentru a selecta toate rândurile dintr-o anumită compensare până la rezultatul final, puteți utiliza o valoare de -1 ca al doilea parametru:
Dacă un argument, acesta indică numărul maxim de rânduri returnate:
Cu alte cuvinte, LIMIT n este echivalent LIMIT 0, n.
instrucțiune SELECT pot fi prezentate sub formă de SELECT. ÎN outfile 'FILE_NAME'. Acest tip de echipă scrie rândurile selectate în fișierul specificat de nume_fișier. Acest fișier este creat pe server și înainte de care nu ar trebui să existe (astfel, printre altele, previne distrugerea tabelelor și a fișierelor, cum ar fi / etc / passwd). Pentru a utiliza această formă de comanda SELECT FILE privilegii necesare. forma SELECT. ÎN outfile este destinat în principal pentru a efectua haldei foarte rapid un tabel de pe calculatorul server. SELECT de comandă. ÎN outfile nu pot fi utilizate în cazul în care doriți să creați fișierul rezultat pe o gazdă diferită de server. În acest caz, pentru a genera fișierul dorit în locul comenzii ar trebui să folosească un alt program de client cum ar fi --tab mysqldump sau mysql -e „SELECT.“> Outfile. Comanda SELECT. ÎN outfile este completarea la infile LOAD; export_options parte sintaxa acestei comenzi conține câmpuri de expresie și LINII aceleași. care sunt utilizate în DATA INFILE comanda LOAD. A se vedea secțiunea 6.4.9, "LOAD Operator INFILE Sintaxa". Rețineți că în fișierul text rezultat ecrane de operator scăpat, numai următoarele caractere:
Simbolul scăpat
Primul simbol a câmpurilor de operator TERMINATED DE
Primul simbol al liniilor de operatori DE TERMINATED
Dacă în loc de a utiliza ÎN outfile ÎN DUMPFILE. atunci MySQL va înregistra în fișierul este doar o singură linie de caractere fara coloane sau rânduri este completă și fără nici un fel a fost de protectie. Acest lucru este util pentru stocarea BLOB tip de date într-un fișier.
Rețineți că orice fișier creat de ÎN outfile și ÎN DUMPFILE. Acesta va fi disponibil pentru a înregistra toți utilizatorii! Motivul pentru aceasta este după cum urmează: MySQL server nu se poate crea un fișier care aparține numai oricărui utilizator curent (niciodată nu poate rula mysqld ca root), respectiv, dosarul trebuie să fie inscriptibil de către toți utilizatorii.
Când se utilizează pentru tabelele handler UPDATE sprijin pagini de blocare / linii, rândul selectat va fi blocat pentru scris.