MySQL - SELECT - syntax
Sider vedr. SELECT kan ses herfra:
![x](/felles/ikoner/right.gif) | Syntaks |
![x](/felles/ikoner/right.gif) | Diverse kodeksempler |
![x](/felles/ikoner/right.gif) | Dynamisk select |
![x](/felles/ikoner/right.gif) | Sideopdelt select |
Nedenfor er vist alle de primære SELECT -parametre. SELECT og FROM er obligatoriske, mens alle øvrige er optionelle. De optionelle skal anvendes i den rækkefølge, hvori de er vist i oversigten.
Oversigten er ikke nødvendigvis komplet indenfor de enkelte parametre. For en del af dem vil der på detail-niveau være yderligere funktionalitet og kombinationsmuligheder, end der er vist idenne oversigt.
Alias-værdier kan kun bruges som kriterie i GROUP BY, ORDER BY og HAVING.
| Obl. | Opt. 1 | Opt. 2 | Beskrivelse | | |
![x](/felles/ikoner/ned.gif) | select![x](/felles/ikoner/rodfir.gif) | | | Kriterie for udtræk af felter.
| |
![x](/felles/ikoner/nr2.gif) |
![x](/felles/ikoner/ned.gif) | avg() , count() , first() , last() , max() , min() , sum()![x](/felles/ikoner/rodfir.gif) | [as] | Aggregerende SQL-funktioner. Returnerer en enkelt værdi baseret på værdier i en kolonne. | |
![x](/felles/ikoner/nr2.gif) |
![x](/felles/ikoner/ned.gif) | ucase() , lcase() , mid() , len() , round() , now() , format()![x](/felles/ikoner/rodfir.gif) | [as] | Skalerende SQL-funktioner. Returnerer en enkelt værdi baseret på | |
![x](/felles/ikoner/nr2.gif) |
![x](/felles/ikoner/ned.gif) | isnull() , nvl() , ifnull() , coalesce()![x](/felles/ikoner/rodfir.gif) | [as] | NULL funktioner. | |
![x](/felles/ikoner/nr2.gif) |
![x](/felles/ikoner/ned.gif) | concat() , date_pre(), date_sub() , substr()![x](/felles/ikoner/rodfir.gif) | [as] | Andre SQL-funktioner. | |
![x](/felles/ikoner/nr2.gif) |
![x](/felles/ikoner/ned.gif) | [all | distinct | distinctrow] | | Underkriterier for udtræk af data. | |
![x](/felles/ikoner/nr2.gif) |
![x](/felles/ikoner/ned.gif) | [high_priority] | | Ændring af prioritering for adgang til databasen. | | - |
![x](/felles/ikoner/ned.gif) | [sql_small_result | sql_big_result] [sql_buffer_result] | | Styring af metode til lagring af mellemresultater. | | - |
![x](/felles/ikoner/ned.gif) | [sql_cache | sql_no_cache] [sql_calc_found_rows] | | Styring af om udtræk skal gemmes i cache, samt optælling af antal records. | | - |
![x](/felles/ikoner/ned.gif) | [into]![x](/felles/ikoner/rodfir.gif) | [outfile | dumpfile | @variable] | Lagring af udtræk i filer / variabler. | |
![x](/felles/ikoner/nr2.gif) |
![x](/felles/ikoner/ned.gif) | from | | | Ident for (primær) tabel, der skal udtrækkes data fra. | | ![x](/felles/ikoner/nr2.gif) |
![x](/felles/ikoner/ned.gif) | [partition] | | Udtræk fra tabeller, der er opbygget (create) med partition. | | |
![x](/felles/ikoner/ned.gif) | [inner join | left join | right join![x](/felles/ikoner/rodfir.gif) | | Tilknytning af udtræk fra sekundære tabeller. | | |
![x](/felles/ikoner/ned.gif) | [where]![x](/felles/ikoner/rodfir.gif) | [and]![x](/felles/ikoner/rodfir.gif) [or]![x](/felles/ikoner/rodfir.gif) [between]![x](/felles/ikoner/rodfir.gif) [like]![x](/felles/ikoner/rodfir.gif) in() not in() is null![x](/felles/ikoner/rodfir.gif) is not null![x](/felles/ikoner/rodfir.gif) match() against() ..... | []Filter til afgrænsning af udtræk af poster fra FROM- og JOIN-tabeller.
() Kommasepareret liste eller afgrænsning med sekvens eller indlejret SELECT til styring af søgning.
NULL Medtager kun / ikke NULL-records. Bruges i 'full text' søgning. | |
![x](/felles/ikoner/nr3.gif) |
![x](/felles/ikoner/ned.gif) | [group by]![x](/felles/ikoner/rodfir.gif) | | Kriterie (feltnavn) til opdeling af udtræk i grupper. | | |
![x](/felles/ikoner/ned.gif) | [having]![x](/felles/ikoner/rodfir.gif) | count() , sum(), min(), max() | Filter til afgrænsning af udtræk med funktioner. | | |
![x](/felles/ikoner/ned.gif) | [order by]![x](/felles/ikoner/rodfir.gif) | [asc | desc | rand()] | Kriterie (feltnavn) til styring af orden, hvori udtræk skal vises. | |
|
![x](/felles/ikoner/ned.gif) | [limit]![x](/felles/ikoner/rodfir.gif) [limit offset]![x](/felles/ikoner/rodfir.gif) | | Antal records, der skal indgå i uddata - i forlængelse af 'offset'. | | |
![x](/felles/ikoner/ned.gif) | [procedure] | !!!!!!!! | | | |
![x](/felles/ikoner/ned.gif) | [for update | lock in share mode] | | Låsning af records før opdatering. | | |
Collate
Collate (sammenligning, samordning) hører som parameter til i skemaet, men kan ikke indsættes deri, da det kan indsættes (mindst) 6 steder.
select
* | select * | Selekterer alle felter i anfordret / anfordrede tabeller. Kan ikke kombineres med funktioner eller andet. |
feltnavn | select feltnavn01, .., feltnavn0n, func(x) as "a" | selekterer anførte kommaseparerede felter i anfordret / anfordrede tabeller. Gælder både felter fra hovedtabel og fra JOIN-tabeller. |
Alias
F.eks. for det ene felt når to felter i '*'-selektionen har samme navn. Skal placeres efter '*'.
$query = "SELECT *,PRI.fk_PRI_id AS alias01,count(fk_SEK_id) AS alias02 FROM PRI
LEFT JOIN SEK ON fk_SEK_id = PRI_id
LEFT JOIN TER ON PRI.fk_PRI_id = TER.TER_id
WHERE fk_PRI_id = $var_id
GROUP BY PRI_id
|
#################################################
Aggregerede funktioner
For felter med numeriske værdier. Skal have tilknyttet et alias for at kunne bruges. Anvendes GROUP BY agerer funktionerne med individuelt resultat for hver enkelt gruppe.
avg() | select avg(feltnavn) as "a" | Returnerer den gennemsnitlige værdi af udtræk fra numerisk kolonne. |
![x](/felles/ikoner/nr2.gif) |
count() | select feltnavn01, count(*) as "a" | Returnerer antal forekomster af anført kriterie. |
![x](/felles/ikoner/nr2.gif) |
first() |
| Returnerer den første udtrukne værdi fra den anførte kolonne. |
![x](/felles/ikoner/nr2.gif) |
last() |
| Returnerer den sidste udtrukne værdi fra den anførte kolonne. |
![x](/felles/ikoner/nr2.gif) |
max() | select max(feltnavn) as "a" | Returnerer den højeste udtrukne værdi fra den anførte kolonne. |
![x](/felles/ikoner/nr2.gif) |
min() | select min(feltnavn) as "a" | Returnerer den laveste udtrukne værdi fra den anførte kolonne. |
![x](/felles/ikoner/nr2.gif) |
sum() | select sum(feltnavn) as "a" | Returnerer summen af værdier udtrukket fra numerisk kolonne. |
![x](/felles/ikoner/nr2.gif) |
|
| . |
![x](/felles/ikoner/nr2.gif) |
| select feltnavn01, concat(feltnavn02, ' ', feltnavn03) as "a" | Selekterer feltet feltnavn01 og samler feltnavn02 og feltnavn03 til felt med navnet "a". |
| select sum(distinct filnavn) as "a" | Summerer værdier fra distinct records til felt med navnet "a". |
| select department, sum(feltnavn) as "a" | Summerer værdier fra alle records til felt med navnet "a". |
| select avg(feltnavn) as "a" | Finder gennemsnitsværdien for feltet til felt med navnet "a". |
![x](/felles/ikoner/nr2.gif) |
| select count(feltnavn) as "a" | Placerer antal records pr. GROUP BY gruppe i felt med navnet "a". |
count() og GROUP BY
$query = "SELECT * , count(fk_SEK_id) AS alias FROM PRItab
LEFT JOIN SEKtab ON fk_SEK_id = PRI_id
GROUP BY PRI_id
|
Skalerede funktioner
For felter med numeriske værdier.
ucase() |
| Konverterer tekst i anført felt til store bogstaver. |
![x](/felles/ikoner/nr2.gif) |
lcase() |
| Konverterer tekst i anført felt til små bogstaver. |
![x](/felles/ikoner/nr2.gif) |
mid() |
| Udtrækker anført antal karakterer fra data i anført felt. |
![x](/felles/ikoner/nr2.gif) |
len() |
| Returnerer længden (antal kar.) for adta i anført felt. |
![x](/felles/ikoner/nr2.gif) |
round() |
| Afrunder numerisk felt baseret på anført antal decimaler. |
![x](/felles/ikoner/nr2.gif) |
now() |
| Returnerer aktuel system dato+tid.. |
![x](/felles/ikoner/nr2.gif) |
format() |
| Formattering af viste data fra anført felt. . |
![x](/felles/ikoner/nr2.gif) |
count() og GROUP BY
$query = "SELECT * , count(fk_SEK_id) AS alias FROM PRItab
LEFT JOIN SEKtab ON fk_SEK_id = PRI_id
GROUP BY PRI_id
|
NULL funktioner
For felter med numeriske værdier.
func() as | select feltnavn01, count(*) as "a" | Selekterer feltet feltnavn01 og tæller antallet af records til felt med navnet "a". |
![x](/felles/ikoner/nr2.gif) |
| select feltnavn01, concat(feltnavn02, ' ', feltnavn03) as "a" | Selekterer feltet feltnavn01 og samler feltnavn02 og feltnavn03 til felt med navnet "a". |
| select max(feltnavn) as "a" | Finder den maksimale værdi til felt med navnet "a". |
![x](/felles/ikoner/nr2.gif) |
| select min(feltnavn) as "a" | Finder den minimale værdi til felt med navnet "a". |
![x](/felles/ikoner/nr2.gif) |
| select SUM(feltnavn) as "a" | Summerer alle værdier til felt med navnet "a". |
![x](/felles/ikoner/nr2.gif) |
| select sum(distinct filnavn) as "a" | Summerer værdier fra distinct records til felt med navnet "a". |
| select department, sum(feltnavn) as "a" | Summerer værdier fra alle records til felt med navnet "a". |
| select avg(feltnavn) as "a" | Finder gennemsnitsværdien for feltet til felt med navnet "a". |
![x](/felles/ikoner/nr2.gif) |
| select count(feltnavn) as "a" | Placerer antal records pr. GROUP BY gruppe i felt med navnet "a". |
count() og GROUP BY
$query = "SELECT * , count(fk_SEK_id) AS alias FROM PRItab
LEFT JOIN SEKtab ON fk_SEK_id = PRI_id
GROUP BY PRI_id
|
Andre funktioner
For felter med numeriske værdier.
func() as | select feltnavn01, count(*) as "a" | Selekterer feltet feltnavn01 og tæller antallet af records til felt med navnet "a". |
![x](/felles/ikoner/nr2.gif) |
| select feltnavn01, concat(feltnavn02, ' ', feltnavn03) as "a" | Selekterer feltet feltnavn01 og samler feltnavn02 og feltnavn03 til felt med navnet "a". |
| select max(feltnavn) as "a" | Finder den maksimale værdi til felt med navnet "a". |
![x](/felles/ikoner/nr2.gif) |
| select min(feltnavn) as "a" | Finder den minimale værdi til felt med navnet "a". |
![x](/felles/ikoner/nr2.gif) |
| select SUM(feltnavn) as "a" | Summerer alle værdier til felt med navnet "a". |
![x](/felles/ikoner/nr2.gif) |
| select sum(distinct filnavn) as "a" | Summerer værdier fra distinct records til felt med navnet "a". |
| select department, sum(feltnavn) as "a" | Summerer værdier fra alle records til felt med navnet "a". |
| select avg(feltnavn) as "a" | Finder gennemsnitsværdien for feltet til felt med navnet "a". |
![x](/felles/ikoner/nr2.gif) |
| select count(feltnavn) as "a" | Placerer antal records pr. GROUP BY gruppe i felt med navnet "a". |
count() og GROUP BY
$query = "SELECT * , count(fk_SEK_id) AS alias FROM PRItab
LEFT JOIN SEKtab ON fk_SEK_id = PRI_id
GROUP BY PRI_id
|
all, distinct, distinctrow
all |
| Alle forekomster af et søgeresultat medtages. Default og kan derfor udelades. |
distinct | select distinct feltnavn, ..., feltnavn | Ved duplikate forekomster af et søgeresultat medtages kun et. |
distinctrow | select distinctrow feltnavn, ..., feltnavn | Samme resultat som ved distinct. |
high_priority
high_priority | select high_priority feltnavn, ..., feltnavn | Giver SELECT kommandoenen højere prioritet end UPDATE kommandoen. (Sikrer at SELECT bliver udført hurtigere end den ellers ville blive - på UPDATEs bekostning). |
straight_join
straight_join | select straight_join feltnavn, ..., feltnavn | Styrer at tabeller joines i den rækkefølge, hvori de er anført i FROM kommandoen. |
sql_small_result, sql_big_result, sql_buffer_result
sql_small_result | select sql_small_result feltnavn, ..., feltnavn | Hurtige midlertidige tabeller bruges til lagring af mellemresultater fra DISTINCT og GROUP BY. |
sql_big_result | select sql_big_result feltnavn, ..., feltnavn | Sortering foretrækkes fremfor at midlertidige tabeller ved behandling af resultater fra DISTINCT og GROUP BY. |
sql_buffer_result | select sql_buffer_result feltnavn, ..., feltnavn | Brug af midlertidige tabeller ved behandling af resultater gennemtvinges. Låste tabeller frigives hurtigere. Kan ikke anvendes sammen med queries indlejret i andre queries. |
sql_cache, sql_no_cache, sql_calc_found_rows
sql_cache | select sql_cache feltnavn, ..., feltnavn | Default. Udtrukket resultat lagres i cache. Derved hurtigere at genbruge frem for at genudtrække, hvis samme select bliver udført igen indenfor cache-tiden. | |
sql_no_cache | select sql_no_cache feltnavn, ..., feltnavn | Udtrukket resultat lagres ikke i cache. | |
sql_calc_found_rows | select sql_calc_found_rows feltnavn, ..., feltnavn | Beregner antallet af records i udtræk (ser bort fra limit). Resultatet kan udtrækkes med funktionen SELECT FOUND_ROWS(). |
|
into
Udtræk af data til filer:
- outfile: Udtrækker selekterede records til en fil. Felt- og linie-separatorer kan angives svarende til det ønskede format af komma-separeret (csv) typen.
- dumpfile: Udtrækker til en enkelt streng uden formattering
- var_list: Udtrækker feltværdier og lagrer dem som variabler.
into outfile | into outfile '/sti og filnavn.csv' fields terminated by ',' lines terminated by '\n'; |
Opbygning af 'kommasepareret' fil (.csv) til lagring indenfor eget LAN.
FIELDS TERMINATED BY ','. Separator mellem felter. Normalt ',' eller ';'. Escape-karakteren '\t' (tabulator) kan også anvendes. Vigtigst er, at det anvendte tegn ikke forekommer i datastrengene og at filen kan læses af det program, der skal bruge dataene.
LINES TERMINATED BY '\n'. Escape-karakteren '\n' (linieskift) anvendes oftest til at afslutte records.
|
into dumpfile | into dumpfile 'sti og filnavn.txt' | Udtrækker kun 1 record. |
into var_list |
| |
from
from | from tabelnavn | Ident for (primær) tabel, der skal udtrækkes data fra. Obligatorisk i enhver SELECT. Skal der trækkes data fra flere tabeller tilknyttes disse med 'join'. |
partition
Udtræk fra tabeller, der er opbygget (create) med partition.
partition | FROM information_schema.partitions | Udtræk fra tabel, der er partitioneret. |
|
| SELECT table_rows as 'count(*)' FROM information_schema.partitions WHERE table_schema = schema() and table_name ='employees' and partition_name = 'p0'; |
join
Inner join | FROM tabel01
INNER JOIN tabel02 ON tabel01.feltnavn01 = tabel02.feltnavn02
| Etablerer en virtuel tabel som kopi af tabel01 (selekterede felter). Med feltnavn01 og feltnavn02 som bindeled tilknyttes så mange data som muligt fra tabel02 (selekterede felter) til den virtuelle tabel. Records i den virtuelle tabel med tomme felter slettes. Den virtuelle tabel bruges som grundlag for etablering af $row. |
Left outer join | FROM tabel01
LEFT JOIN tabel02 ON tabel01.feltnavn01 = tabel02.feltnavn02 | Etablerer en virtuel tabel som kopi af tabel01 (selekterede felter). Med feltnavn01 og feltnavn02 som bindeled tilknyttes så mange data som muligt fra tabel02 (selekterede felter) til den virtuelle tabel. Eventuelle tomme 'tabel02-felter' i den virtuelle tabel får værdien NULL. Den virtuelle tabel bruges som grundlag for etablering af $row. |
Right outer join | FROM tabel01
RIGHT JOIN tabel02 ON tabel01.feltnavn01 = tabel02.feltnavn02 | Etablerer en virtuel tabel som kopi af tabel02 (selekterede felter). Med feltnavn01 og feltnavn02 som bindeled tilknyttes så mange data som muligt fra tabel01 (selekterede felter) til den virtuelle tabel. Eventuelle tomme 'tabel01-felter' i den virtuelle tabel får værdien NULL. Den virtuelle tabel bruges som grundlag for etablering af $row. |
where
Aggregate functions.
Filter bestående af feltnavn operator og værdi til at styre, at kun relevante feltværdier bliver udtrukket.
Værdierne kan være datastreng eller variabler.
Flere filtre kan anvendes samtidig separeret med: AND OR og/eller ().
Der kan anvendes følgende 6 operatorer, der skal være TRUE for at udtræk foretages:
= TRUE når værdierne før og efter er ens.
!= TRUE når værdierne før og efter er forskellige.
> TRUE når værdien før er større end værdien efter.
< TRUE når værdien før er mindre end værdien efter.
>= TRUE når værdien før er større end eller lig værdien efter.
<= TRUE når værdien før er mindre end eller lig værdien efter.
| | where feltnavn01 = "a" | streng | ![x](/felles/ikoner/nr2.gif) |
| | where feltnavn01 = "a" | streng | ![x](/felles/ikoner/nr2.gif) |
where | where feltnavn01 = "a" | streng |
| where feltnavn01 = $a | variabel | |
| where feltnavn01 = 1 AND feltnavn02 = $a; | multi med AND separator | ![x](/felles/ikoner/nr2.gif) |
| where feltnavn01 = 'a' OR feltnavn02 = 'b'; | multi med OR separator | ![x](/felles/ikoner/nr2.gif) |
| where feltnavn01 = $a AND (feltnavn02 = 'a' OR feltnavn02 = 'b'); | multi med AND, OR og () separatorer | ![x](/felles/ikoner/nr2.gif) |
| where feltnavn01 like 'A%' | Alle værdier, der begynder med A. | ![x](/felles/ikoner/nr2.gif) |
| where feltnavn01 like '%A' | Alle værdier, der ender på A. | |
| where feltnavn01 like '%A%' | Alle værdier, der indeholder A. | |
| where feltnavn01 BETWEEN 'talstreng01' and 'talstreng02' | Between | ![x](/felles/ikoner/nr2.gif) |
| where feltnavn01 BETWEEN $variabel01 and $variabel02 | Between | |
group by
Kriterie (feltnavn) til opdeling af udtræk i grupper.
group by | group by feltnavn01, feltnavn02, ... feltnavn0n | Opdeling af udtræk i grupper baseret på anført feltnavn. Ved flere feltnavne foretages nestning. |
having
Filter baseret på funktioner med parametre eller variabler (tal) som afgrænsning.
having | having count(tabelnavn.feltnavn) > 10; | |
| having count(feltnavn) > 1 AND MAX(feltnavn) < $variabel | Tælling af antal felter |
| having sum(feltnavn) > 1000; | Tælling af antal felter |
| having min(feltnavn) > 35000; | |
| having max(feltnavn) < $variabel; | |
| having max(feltnavn) = $variabel | |
order by
Kriterie (feltnavn) til styring af orden, hvori udtræk skal vises.
order by | order by feltnavn asc | Sorteringsorden A-Z |
| order by feltnavn01 asc, feltnavn02 desc , feltnavn03 asc | Blandet sorteringsorden. |
| order by feltnavn01, ..., feltnavn0n desc | Sorteringsorden Z-A |
| order by rand() | Urtræk i tilfældig orden. |
limit
Antal records, der skal indgå i uddata - i forlængelse af 'offset'.
limit | limit 5 | limit |
| limit 5, 10 | offset og limit |
| limit $offset, 10 | offset og limit |
| limit $offset,$limit | offset og limit |
limit offset | limit 5 offset 10 | offset og limit |
| limit 10 offset $offset | offset og limit |
| limit $limit offset $offset | offset og limit |
procedure
for update og lock in share mode
Relevante når mulighed for 'ophedede' opdateringssituationer som f.eks. ved auktioner, billetbestillinger, visse finansielle situationer. Forkert brug kan skabe 'deadlock'.
for update | SELECT feltnavn01 FROM tabelnavn01 FOR UPDATE; UPDATE tabelnavn01 SET feltnavn01 = feltnavn01 + 1; | Låser selekterede records så der ikke kan foretages andre SELECT, UPDATE eller DELETE før frigivelse med en efterfølgende commit eller rollback. |
lock in share mode | SELECT * FROM tabelnavn WHERE feltnavn = værdi LOCK IN SHARE MODE; | Låser selekterede records så der ikke kan foretages andre UPDATE eller DELETE før frigivelse med en efterfølgende commit eller rollback. |
|