Podstawy języka SQL 2 Instrukcja CREATE TABLE CREATE TABLE tabela (pole_1 typ [(rozmiar)] [NOT NULL] [indeks_1] [, pole_2 typ [(rozmiar)] [NOT NULL] [indeks_2] [,...]] [, CONSTRAINT indeks_wielopolowy [,...]]) Nowa tabela CREATE TABLE Pracownicy (Imie CHARACTER VARYING, Nazwisko CHARACTER VARYING); Nowa tabela+index CREATE TABLE Pracownicy2 (Imie CHARACTER VARYING, Nazwisko CHARACTER VARYING, DataUrodzenia DATETIME, CONSTRAINT Moj_index UNIQUE (Imie, Nazwisko, DataUrodzenia)); CREATE TABLE Pracownicy3 (Imie CHARACTER VARYING, Nazwisko CHARACTER VARYING, PESEL INTEGER CONSTRAINT MojKlucz PRIMARY KEY); Trochę bardziej rozbudowany przykład: CREATE TABLE firma ( id_firma COUNTER CONSTRAINT pierwotny PRIMARY KEY, czyfirma BIT," kod CHARACTER VARYING(10), NIP CHARACTER VARYING(13), dowod CHARACTER VARYING(9)," pesel CHARACTER VARYING(11), id_dokument LONG, doknumer character varying(14), nazwa1 CHARACTER VARYING(48), nazwa2 CHARACTER VARYING(48), status char(1), typ char(1), zakup CURRENCY, sprzedaz CURRENCY, naleznosci CURRENCY, zobowiazania CURRENCY, kodpocztowy CHARACTER VARYING(6), miasto CHARACTER VARYING(25), ulica CHARACTER VARYING(40), tel1 CHARACTER VARYING(20), telopis1 CHARACTER VARYING(20), tel2 CHARACTER VARYING(20),
2 telopis2 fax Character varying(20), CHARACTER VARYING(25), nrkonta CHARACTER VARYING(35), bank CHARACTER VARYING(50), czyzalegajacy BIT, czynieuczciwy BIT, id_kategoria LONG, uwagi memo, wybrany BOOLEAN, CONSTRAINT Firma_KategoriaKlienta FOREIGN KEY (Id_Kategoria) REFERENCES KategoriaKlienta (Id_KategoriaKlienta), CONSTRAINT Firma_dokument FOREIGN KEY (Id_dokument) REFERENCES _dokument (Id_dokument), CONSTRAINT unikalnynip UNIQUE (NIP), CONSTRAINT unikalnydowod UNIQUE (Dowod), CONSTRAINT unikalnypesel UNIQUE (pesel), CONSTRAINT unikalnykod UNIQUE (kod) ); BINARY CURRENCY DATETIME GUID SINGLE DOUBLE SHORT Typy Danych (MS SQL) 1 bajt, na znak 8 bajtów, Skalowana liczba całkowita z przedziału od 922 337 203 685 477,5808 do 922 337 203 685 477,5807. 8 bajtów, Wartość oznaczająca datę lub godzinę z przedziału lat od 100 do 9999. 128 bitów, Unikatowy numer identyfikacyjny stosowany podczas zdalnego wołania procedur. 4 bajty, Wartość zmiennoprzecinkowa pojedynczej precyzji z zakresu od 3,402823E38 do 1,401298E-45 dla wartości ujemnych, od 1,401298E-45 do 3,402823E38 dla wartości dodatnich oraz 0. 8 bajtów, Wartość zmiennoprzecinkowa podwójnej precyzji z zakresu od 1,79769313486232E308 do 4,94065645841247E-324 dla wartości ujemnych, od 4,94065645841247E-324 do 1,79769313486232E308 dla wartości dodatnich oraz 0. 2 bajty, Liczba całkowita krótka z przedziału od 32 768 do 32 767. LONG 4 bajty, Liczba całkowita długa z przedziału od 2 147 483 648 do 2 147 483 647. LONGCHARACTER VARYING 1 bajt na znak, Od zera do maksymalnie 1,2 gigabajta. LONGBINARY Według wymagań, Od zera do maksymalnie 1,2 gigabajta. CHARACTER VARYING 1 bajt na znak, Od zera do 255 znaków.
3 Typy Danych (MS SQL a ANSI SQL) ANSI SQL MS SQL SYNONIM BIT, BIT VARYING BINARY VARBINARY BIT BOOLEAN, LOGICAL, LOGICAL1, YESNO BYTE INTEGER1 COUNTER AUTOINCREMENT CURRENCY MONEY DATE, TIME, TIMESTAMP DATETIME DATE, TIME, TIMESTAMP GUID DECIMAL REAL SINGLE FLOAT4, IEEESINGLE, REAL DOUBLE PRECISION, DOUBLE FLOAT FLOAT, FLOAT8, IEEEDOUBLE, NUMBER, NUMERIC SMALLINT SHORT INTEGER2, SMALLINT INTEGER LONG INT, INTEGER, INTEGER4 INTERVAL LONGBINARY GENERAL, OLEOBJECT LONGCHARACTER LONGCHAR, MEMO, NOTE VARYING CHARACTER, CHARACTER VARYING CHARACTER VARYING VALUE ALPHANUMERIC, CHAR, CHARACTER, STRING, VARCHAR Instrukcja Alter Table ALTER TABLE tabela {ADD {COLUMN typ_pola[(rozmiar)] [NOT NULL] [CONSTRAINT indeks] CONSTRAINT indeks_wielopolowy} DROP {COLUMN pole I CONSTRAINT nazwa_indeksu} }
4 Za pomocą instrukcji ALTER TABLE można zmienić istniejącą tabelę na kilka sposobów: Klauzula ADD COLUMN powoduje dodanie nowego pola do tabeli. Należy określić nazwę pola, typ danych oraz opcjonalnie rozmiar (dla pół tekstowych i binarnych). Klauzula ADD CONSTRAINT powoduje dodanie indeksu wielopolowego.. Klauzula DROP COLUMN powoduje usunięcie pola. W tym celu należy określić jedynie nazwę pola. Klauzula DROP CONSTRAINT powoduje usunięcie indeksu wielopolowego. W tym celu należy po słowie zastrzeżonym CONSTRAINT określić jedynie nazwę indeksu. ALTER TABLE Pracownicy ADD COLUMN Pensja CURRENCY; ALTER TABLE Pracownicy DROP COLUMN Nadgodziny; ALTER TABLE Zamowienia ADD CONSTRAINT ZamowieniaPracownicy FOREIGN KEY (PracownikID) REFERENCES Pracownicy (PracownikID); ALTER TABLE Zamowienia DROP CONSTRAINT ZamowieniaPracownicy; Instrukcja CONSTRAINT Ograniczenie dla pojedynczego pola: CONSTRAINT nazwa {PRIMARY KEY UNIQUE NOT NULL REFERENCES tabela_obca [(pole_obce_1, pole_obce_2)]} Ograniczenie dla wielu pól: CONSTRAINT nazwa {PRIMARY KEY (podstawowe_1[, podstawowe_2 [,...]]) UNIQUE (unikatowe_1[, unikatowe_2 [,...]]) NOT NULL (niepuste_1[, niepuste_2 [,...]]) FOREIGN KEY (odesłanie_1[, odesłanie_2 [,...]]) REFERENCES tabela_obca [(pole_obce_1[, pole_obce_2 [,...]])]} nazwa podstawowe_1, podstawowe_2 unikatowe_1, unikatowe_2 niepuste_1, niepuste_2 Nazwa tworzonego ograniczenia. Nazwa pola lub pól, które mają składać się na klucz podstawowy. Nazwa pola lub pól, które mają składać się na klucz unikatowy. Nazwa pola lub pól, których wartości muszą być różne od Null.
5 odesłanie_1, odesłanie_2 tabela_obca pole_obce_1, pole_obce_2 Nazwa pola lub pól klucza obcego, czyli wskazujących na pola w innej tabeli. Nazwa tabeli obcej zawierającej pole lub pola określone przez argumenty pole_obce. Nazwa pola lub pól z tabeli tabela_obca określone przez odesłanie_1, odesłanie_2. Ta klauzula może być pominięta, jeśli wskazywane pole jest kluczem podstawowym w tabeli tabela_obca. ograniczenia dla pojedynczego pola w klauzuli definiującej pole w instrukcji ALTER TABLE lub CREATE TABLE występuje zaraz po specyfikacji typu danych pola. ograniczenia dla wielu pól jest używana wtedy, gdy słowo zastrzeżone CONSTRAINT występuje poza klauzulą definicji pola w instrukcji ALTER TABLE lub CREATE TABLE. Za pomocą klauzuli CONSTRAINT można określić dla pola następujące typy ograniczenia: Za pomocą słowa zastrzeżonego UNIQUE można określić pole jako klucz unikatowy. Oznacza to, że żadne dwa rekordy w tabeli nie mogą mieć w tym polu takiej samej wartości. Jako unikatowe można określić dowolne pole lub listę pól. Jeśli w jednym ograniczeniu wiele pól jest określonych jako klucz unikatowy, unikatowe muszą być wartości tych pól traktowane jako całość, natomiast w pojedynczych polach wartości mogą się powtarzać. Za pomocą zastrzeżonego słowa PRIMARY KEY można określić pojedyncze pole lub zbiór pól w tabeli jako klucz podstawowy. Wszystkie wartości klucza podstawowego muszą być unikatowe i mieć wartości różne od Null, a tabela może zawierać tylko jeden klucz podstawowy. Za pomocą słów zastrzeżonych FOREIGN KEY można określić pola jako klucz obcy. Jeśli klucz podstawowy tabeli obcej składa się z więcej niż jednego pola, należy użyć definicji ograniczenia dla wielu pól, wymieniając wszystkie wskazujące pola, nazwę tabeli obcej oraz nazwy wskazywanych pól w tabeli obcej w tej samej kolejności, co pola wskazujące. Jeśli wskazywane pole lub pola są kluczami podstawowymi tabeli obcej, to nie jest konieczne określenie wskazywanych pól domyślnie, aparat bazy danych działa tak, jakby pola klucza podstawowego tabeli obcej były polami wskazywanymi. Instrukcja CREATE INDEX CREATE [ UNIQUE ] INDEX indeks ON tabela (pole [ASC DESC][, pole [ASC DESC],...]) [WITH { PRIMARY DISALLOW NULL IGNORE NULL }] Aby zapobiec występowaniu powtarzających się wartości w polu lub polach indeksowanych, należy użyć słowa zastrzeżonego UNIQUE. Posługując się opcjonalną klauzulą WITH, można określić reguły poprawności danych. Stosując opcję DISALLOW NULL, można zapobiec występowaniu wartości Null w polu lub polach indeksowanych nowych rekordów.
6 Stosując opcję IGNORE NULL, można zapobiec dołączaniu do indeksu rekordów zawierających w polu lub polach indeksowanych wartości Null. Dodając słowo zastrzeżone PRIMARY, można określić indeksowane pole lub pola jako klucz podstawowy. Pociąga to za sobą unikatowość, tak więc można wówczas pominąć słowo zastrzeżone UNIQUE. CREATE INDEX NowyIndex ON Pracownicy (telefon, kodpocztowy); CREATE UNIQUE INDEX KlieciID ON Klienci (KlienciID) WITH DISALLOW NULL; CREATE UNIQUE INDEX ZamowienieID ON SzczegolyZamowieniaODBC (ZamowienieID); Instrukcja DROP DROP {TABLE tabela INDEX indeks ON tabela} tabela Nazwa tabeli, która ma być usunięta, lub też tabeli, z której ma być usunięty indeks. indeks Nazwa indeksu, który ma być usunięty z tabeli. DROP INDEX MojIndex ON Pracownicy; DROP TABLE stazysci;