Jak wyświetlić wszystkie kolumny i tabele w bazie danych Informix SQL

W bazie danych Informix możemy wyświetlić wszystkie tabele przy użyciu systables i poniższego zapytania:

select * from systables;

W jego wyniku dostaniemy listę z informacjami takimi jak: nazwa i tabid tabeli, właściciel, liczba rekordów, kolumn, założonych indeksów, datę utworzenia, czy poziom blokady (tzw. locklevel). W powyższym zapytaniu możemy oczywiście skorzystać z warunku where, w przypadku kiedy np. chcemy odszukać konkretnej tabeli, a nie pamiętamy jej dokładnej nazwy. Poniższe zapytanie wyświetli nam wszystkie tabele, które w swojej nazwie zawierają słowo: “klient”

select * from systables where tabname like '%klient%';

Powyższe zapytania SQL nie zwrócą nam jednak nazwy kolumn. Do tego celu musimy skorzystać z syscolumns:

select * from syscolumns;

które wyświetli między innymi: nazwę kolumny, tabid, numer kolumny w tabeli, jej typ czy rozmiar kolumny. Także tutaj możemy skorzystać z where aby wyszukać np. tabid – czyli identyfikator tabeli w której znajduje się pole: “pesel”

select tabid from syscolumns where colname="pesel";

Mamy wyszukiwanie tabel oraz kolumn, połączymy teraz oba te zapytania w jedno, które wyświetli nam wszystkie tabele i ich kolumny. Wykorzystamy tutaj tabid jako warunek połączenia:

select tabname, colname from systables, syscolumns 
where systables.tabid=syscolumns.tabid;

Zmodyfikujmy jeszcze nieco powyższe zapytanie. Chcemy w wyniku otrzymać wszystkie tabele ze słowem “kli” w nazwie oraz zawierające w sobie kolumnę “mail“.

select tabname, colname from systables, syscolumns 
where systables.tabid=syscolumns.tabid and 
systables.tabname like '%kli%' and syscolumns.colname='mail';

Wróćmy jeszcze do przykładu z peselem. Wyszukiwaliśmy tam pola tabid w tabeli syscolumns, Wykorzystajmy je do połączenia z systables i zwróćmy nazwę tabel zawierających kolumnę o nazwie pesel. Dla czytelniejszego kodu wykorzystamy teraz alias dla nazw tabel:

select tabname from systables t, syscolumns c 
where t.tabid=c.tabid and c.colname='pesel';