Archief van de categorie ‘SQL’

MySQL: Random record

5 November 2007

Dit is de manier om een random record te nemen uit een table in MySQL.
select * from banners order by rand() limit 1

Update: Het voorstel van Frank in de reacties is veel beter.

Technorati , ,

Queries optimaliseren

17 April 2007

Om het resultaat van een query te krijgen heb je soms verschillende mogelijkheden. De vraag is dan dikwijls: Wat is nu de efficiëntste manier? Hiervoor heb je enkele technieken ter beschikking om de verschillende mogelijkheden te testen. Dit zijn eerst en vooral technieken voor mysql. Ik heb niet verder gezocht in hoeverre deze technieken ook werken op andere databasetypes.

explain gebruiken voor een query is een eerste techniek. Hiermee kan je eerst en vooral zien welke indexes er gebruikt worden. Deze techniek is dan ook vooral handig bij wat ingewikkeldere queries.

explain select * from table

Het resultaat is één of meerdere rijen met informatie over hoe de query wordt opgevraagd in de tabel of tabellen. Alle uitleg over wat de exacte betekenis is vind je in de MySQL 5.0 reference.

Later meer.

SQL joins

21 February 2007

Als je in aanraking komt met SQL dan kom je hoogst waarschijnlijk ook in aanraking met het probleem dat je velden uit twee (of meerdere) tabellen wil selecteren. Dit kan je doen door middel van JOIN.

Hieronder kan je de meest gebruikte terugvinden.

INNER JOIN
Met behulp van INNER JOIN krijg je alle record uit de eerste tabel met een bijhorend record uit de tweede tabel.
let op: indien er geen bijhorend record is gevonden in de tweede tabel dan zal het record uit tabel één niet worden weergegeven in de resultaattabel. Indien er meerdere bijhorende records worden gevonden in de tweede tabel dan zullen deze allemaal in de resultaattabel voorkomen.
SQL:
  1. SELECT * FROM tabel1 AS t1 INNER JOIN tabel2 AS t2 ON t1.id = t2.id;

LEFT OUTER JOIN
De LEFT OUTER JOIN zorgt ervoor dat alle records uit tabel één worden weergegeven, ook als er geen bijhorend record is gevonden in tabel twee. Indien er geen bijhorend record is gevonden zullen de velden null bevatten.
SQL:
  1. SELECT * FROM tabel1 AS t1 LEFT OUTER JOIN tabel2 AS t2 ON t1.id = t2.id;

RIGHT OUTER JOIN
De RIGHT OUTER JOIN doet hetzelfde als de LEFT OUTER JOIN maar zorgt ervoor dat alle record uit tabel twee worden weergegeven in de resultaattabel.
SQL:
  1. SELECT * FROM tabel1 AS t1 RIGHT OUTER JOIN tabel2 AS t2 ON t1.id = t2.id;

Indien de velden in alle twee de tabellen dezelfde naam hebben kan je 't1.id = t2.id' vervangen door 'USING(id)' gebruiken.

Opmerkingen, tips zijn steeds welkom.

Technorati , , ,