Podstawy Strukturalnego Języka Zapytań sql rozkazy języka sql



Pobieranie 370,43 Kb.
Strona1/8
Data05.12.2017
Rozmiar370,43 Kb.
  1   2   3   4   5   6   7   8




  1. Podstawy Strukturalnego Języka Zapytań SQL

    1. Rozkazy języka SQL

      1. Spis rozkazów języka SQL


Poniższa tabela zawiera spis podstawowych rozkazów języka SQL wraz z krótkim opisem. Rozkazy te możemy podzielić na trzy grupy:

  • rozkazy definicji danych - (Date Definition Language - DDL),

  • rozkazy manipulowania danymi - (Data Manipulation Language - DML),

  • rozkazy sterowania transakcjami - (Data Control Language - DCL).

Operacje relacyjne były szczegółowo omówione w rozdziale 3.


Rozkaz

Typ

Opis

ALTER TABLE

DDL

Dodaje kolumnę do tabeli, redefiniuje kolumnę w istniejącej tabeli lub redefiniuje ilość miejsca zarezerwowaną dla danych

CREATE INDEX

DDL

Tworzy indeks dla tabeli

CREATE SEQUENCE

DDL

Tworzy obiekt służący do generowania kolejnych liczb - sekwencję. Sekwencji można użyć do generowania unikalnych identyfikatorów w tabelach

CREATE TABLE

DDL

Tworzy tabelę i definiuje jej kolumny oraz alokację przestrzeni dla danych

CREATE VIEW

DDL

Definiuje widok dla jednej lub większej ilości tabel lub innych widoków

DELETE

DML

Usuwa wszystkie lub wyróżnione wiersze z tabeli

DROP obiekt

DDL

Usuwa indeks, sekwencje, tablicę, widok lub inny obiekt

INSERT

DML

Dodaje nowy wiersz (lub wiersze) do tabeli lub widoku

RENAME

DDL

Zmienia nazwę tabeli, widoku lub innego obiektu

SELECT

DML

Wykonuje zapytanie. Wybiera wiersze i kolumny z jednej lub kilku tabel

UPDATE

DML

Zmienia dane w tabeli

COMMIT

DCL

Kończy transakcję i na stałe zapisuje zmiany

ROLLBACK

DCL

Wycofuje zmiany od początku transakcji lub zaznaczonego punktu.

SAVEPOINT

DCL

Zaznacza punkt, do którego możliwe jest wykonanie rozkazu ROLLBACK

SET TRANSACTION

DCL

Zaznacza aktualną transakcję jako read-only (tylko do odczytu).
      1. Definicje podstawowe


Identyfikator (nazwa) - ciąg liter, cyfr i znaków podkreślenia rozpoczynający się literą lub znakiem podkreślenia. Różne systemy baz danych umożliwiają stosowanie innych znaków wewnątrz identyfikatorów (np. znak '$', lub '!'). Stosowanie tych znaków nie jest jednak zalecane ze względu na późniejsze problemy związane z przenośnością napisanych w ten sposób aplikacji.

Słowa zarezerwowane - identyfikatory zastrzeżone posiadające specjalne znaczenie w języku SQL. Spis wszystkich słów zarezerwowanych w języku SQL przez twórców ORACLE'a przedstawia tabela:


access

add


all

alter


and

any


as

asc


audit

between


by

char


check

cluster


column

comment


compress

connect


create

current


date

dba


decimal

default


delete

desc


distinct

drop


else

exclusive

exists

file


float

for


from

grant


graphic

group


having

identified

if

immediate



in

increment

index

install


initialinsert

integer


intersect

into


is

level


like

lock


long

max


extents

minus


mode

modify


noaudit

nocompress

notnowait

null


number

of

offline



on

online


option

or


order

pctfree


prior

privileges

publicraw

rename


resource

revoke


row

rowid


rownum

row


select

session


set

share


size

smallint


start

successful

synonym

sysdate


table

then


to

trigger


uid

union


unique

update


user

validate


values

varchar


var

graphic


view

when


ever

where


with
Liczby - mogą być całkowite lub rzeczywiste. Liczba całkowita nie posiada kropki dziesiętnej. W systemie ORACLE liczby można zapisywać w formacie zwykłym lub wykładniczym. Format wykładniczy składa się z liczby oraz wykładnika liczby 10, przez który należy pomnożyć tę liczbę oddzielonego literą 'e' lub 'E'.

Przykłady.

  • 7E2 = 7 * 102

  • 25e-03 = 25 * 10-3

Dodatkowo w systemie ORACLE liczbę całkowitą można zakończyć literą 'K' lub literą 'M'. Litera 'K' oznacza, że cała liczba ma być pomnożona przez 1024 (1 KB), natomiast litera 'M', że liczbę należy pomnożyć przez 1048576 (1 MB).

Przykłady.

  • 256K = 256 * 1024

  • 1M = 1 * 1048576

Rozkazy języka SQL kończą się średnikiem.
      1. Rozkaz CREATE TABLE


Rozkaz CREATE TABLE służy do tworzenia struktury tabeli (bez danych) i posiada dodatkowe opcje umożliwiające:

  • określenie sposobu alokacji przestrzeni do przechowywania danych

  • określenie rozmiaru tabeli

  • przydzielenie tabeli do określonego klastra

  • załadowanie danych będących wynikiem podanego zapytania, do tabeli

Rozkaz CREATE TABLE posiada następującą składnię:

CREATE TABLE [user.]table ( {column_element | table_constraint}

[, {column_element | table_constraint} ] ... )

[ PCTFREE n ] [ PCTUSED n ]

[ INITTRANS n ] [ MAXTRANS n ]

[ TABLESPACE tablespace ]

[ STORAGE storage ]

[ CLUSTER cluster (column [, column] ...) ]

[ AS query ];
Parametry:

  • user - właściciel tabeli, jeśli nie zostanie podany, to właścicielem staje się osoba tworząca tabelę. Tabele dla innych użytkowników może tworzyć tylko administrator systemu zarządzania bazą danych (DBA)

  • table - nazwa tabeli, powinna być prawidłowym identyfikatorem. Wszystkie obiekty danego użytkownika powinny mieć unikalne nazwy

  • column_element - definiuje kolumnę i opcjonalne ograniczenia na wartości w tej kolumnie. Tabela musi zawierać co najmniej jedną kolumnę (jak to wynika ze składni)

  • table_constraints - określa ograniczenia jakie musi spełniać cała tabela

  • tablespace - określa obszar, w którym należy umieścić tabelę

  • storage - określa przyszły sposób alokacji pamięci

  • cluster - określa klaster (którego właścicielem musi być właściciel tabeli), do którego należy przydzielić tabelę

  • query - jest poprawnym zapytaniem takim samym jak zdefiniowane w rozkazie SELECT. Jeśli podane jest zapytanie, to można podać tylko nazwy kolumn - typy i rozmiary są kopiowane z odpowiednich kolumn określonych w zapytaniu. Możliwe jest również pominięcie nazw kolumn, ale tylko wtedy, gdy nazwy te są unikalne i dobrze zdefiniowane w zapytaniu. Liczba wyspecyfikowanych kolumn musi być taka sama jak liczba kolumn w zapytaniu.

Przykład.

CREATE TABLE pracownicy

( nr_pracownika NUMBER NOT NULL PRIMARY KEY,

imie CHAR(15) NOT NULL CHECK (imie = UPPER(imie)),

nazwisko CHAR(25) NOT NULL CHECK (nazwisko = UPPER(nazwisko)),

nr_wydzialu NUMBER (3) NOT NULL );


      1. Rozkaz DROP


Rozkaz drop służy do kasowania obiektów różnego rodzaju. Ogólna postać tego rozkazu jest następująca:

DROP object_type [user.]object

Poniżej przedstawione są różne postacie rozkazu drop służące do kasowania poszczególnych typów obiektów:



  • DROP CLUSTER [user.]cluster [INCLUDING TABLES] - kasowanie klastra. W przypadku podania klauzuli INCLUDING TABLES zostaną skasowane wszystkie tabele przydzielone uprzednio do kasowanego klastra. Jeśli klauzula INCLUDING TABLES nie zostanie podana, to przed skasowaniem klastra muszą być skasowane wszystkie należące do niego tabele. Jest to zabezpieczenie przed omyłkowym skasowaniem klastra zawierającego tabele, które są potrzebne.

  • DROP [PUBLIC] DATABASE LINK link - usuwanie połączenia. Jeśli połączenie jest publiczne to skasować je może tylko administrator (DBA).

  • DROP INDEX [user.]index - kasowanie indeksu.

  • DROP [PUBLIC] ROLLBACK SEGMENT segment - kasowanie segmentu wycofywania (rollback). Można usunąć tylko te segmenty wycofywania, które nie są używane w danym momencie. Kasowanie segmentów wycofywania może wykonywać tylko administrator bazy danych.

  • DROP SEQUENCE [user.]sequence - kasowanie sekwencji.

  • DROP [PUBLIC] SYNONYM [user.]synonym - usuwanie synonimu. Synonim publiczny może zostać usunięty tylko przez administratora (DBA). Poszczególni użytkownicy mogą usuwać tylko te segmenty, których są właścicielami.

  • DROP TABLE [user.]table - usuwanie tabeli. W momencie usunięcia tabeli automatycznie kasowane są skojarzone z nią indeksy zarówno utworzone przez właściciela tabeli jak i przez innych użytkowników. Widoki i synonimy wskazujące na tabelę nie są kasowane automatycznie, ale stają się nieprawidłowe.

  • DROP TABLESPACE tablespace [INCLUDING CONTENTS] - usuwanie obszaru danych. Rozkaz ten może być wykonany tylko przez administratora (DBA). W przypadku podania klauzuli INCLUDING CONTENTS obszar danych zostanie skasowany nawet wtedy, gdy zawiera dane. Jeśli klauzula INCLUDING CONTENTS nie została podana, a obszar zawiera dane, to nie zostanie skasowany.

  • DROP VIEW [user.]view - usuwanie widoku. Po usunięciu widoku, inne widoki lub synonimy, które odwoływały się do widoku skasowanego, nie zostaną skasowane, ale stają się nieprawidłowe.



      1. Rozkaz INSERT


Rozkaz insert dodaje nowe wiersze do tabeli lub do tabel przynależących do widoku. Aby dodać wiersze do tabeli należy być właścicielem tabeli, administratorem (DBA) lub posiadać uprawnienia dopisywania do tej tabeli.

Składnia rozkazu:



INSERT INTO [user.]table [ (column [, column] ...) ]

{ VALUES (value [, value] ...) | query };

Parametry:



  • user - nazwa właściciela tabeli

  • table - nazwa tabeli, do której dopisywane są wiersze

  • column - nazwa kolumny wewnątrz tabeli lub widoku

  • value - pojedyncza wartość odpowiadająca odpowiedniej pozycji na liście

  • kolumn. Wartość może być dowolnym wyrażeniem. Jeśli wprowadzana wartość nie jest równa NULL to musi być zgodna z typem wartości kolumny, do której zostanie dopisana.

  • query - prawidłowy rozkaz SELECT, który zwraca taką ilość wartości jak podana w liście określającej kolumny. Zapytanie nie może mieć klauzuli ORDER FOR ani FOR UPDATE.

Opis:

Rozkaz INSERT użyty z klauzulą VALUES zawsze dodaje dokładnie jeden wiersz. Do pól wyspecyfikowanych w liście kolumn (lub do wszystkich kolumn) wstawiane są podane wartości. Kolumny nie wyspecyfikowane na liście kolumn przyjmują wartości puste NULL (w związku z tym nie mogą być uprzednio zadeklarowane jako NOT NULL).

Jeśli użyje się rozkazu SELECT zamiast klauzuli VALUES, to możliwe jest dodanie większej ilości wierszy (wszystkich zwróconych przez zapytanie). Po wykonaniu zapytania kolumny będące jego rezultatem są dopasowywane i wpisywane do kolumn podanych na liście kolumn (lub do wszystkich kolumn, jeśli ich nie wyspecyfikowano). Zapytanie może odwoływać się również do tabeli, do której

dopisywane są wiersze.

W przypadku, gdy lista kolumn nie jest podana, to wartości są dopasowywane do poszczególnych kolumn na podstawie ich wewnętrznego porządku. Porządek ten nie musi być taki sam jak kolejność kolumn przy tworzeniu tabeli. Żaden wiersz nie zostanie dopisany, jeśli zapytanie nie zwróci żadnych wierszy.
Przykłady.


  • INSERT INTO pracownicy

VALUES (50, 'JAN', 'KOWALSKI', 3);


  • INSERT INTO ksiazki (tytul, autor, miejsce)

SELECT 'Pan Tadeusz', autor_nr, miejsce_nr

FROM autorzy, miejsca

WHERE nazwisko = 'Mickiewicz' AND miejsce = 'lewa polka' ;

      1. Rozkaz DELETE


Rozkaz DELETE służy do usuwania wierszy z tabeli.

Składnia:



DELETE [FROM] [user.]table [alias] [WHERE condition] ;
Parametry:

  • user - nazwa użytkownika

  • table - nazwa tabeli lub widoku, z którego należy usunąć wiersze

  • alias - nazwa aliasu odnoszącego się do tabeli, który jest używany w rozkazie DELETE z powiązanymi zapytaniami

  • condition - warunek jaki muszą spełniać wiersze, które należy usunąć. Warunek ten może odwoływać się do tabeli, na której przeprowadza się operację i zawierać powiązane z nim zapytania. Konieczne jest jednak, by warunek, dla każdego z wiersza podanej tabeli, był obliczany do wartości TRUE lub FALSE.

Opis:

Cała przestrzeń zwolniona przez skasowane wiersze i elementy indeksów jest zatrzymywana przez tę tabelę i indeks.


Przykłady:

  • Skasowanie wszystkich wierszy w tabeli pracownicy:

DELETE FROM pracownicy ;

  • Skasowanie wszystkich wierszy zawierających książki, których autor oznaczony jest numerem 2:

DELETE FROM ksiazki WHERE autor = 2 ;

      1. Rozkaz CREATE SEQUENCE


Tworzy obiekt (nazywany sekwencją), za pomocą którego wielu użytkowników może generować unikalne liczby całkowite. Sekwencję mogą być użyte do generacji kluczy pierwotnych w sposób automatyczny. Do utworzenia sekwencji konieczne są przynajmniej uprawnienia RESOURCE w co najmniej jednej przestrzeni tabel.

Składnia:



CREATE SEQUENCE [user.]sequence

[INCREMENT BY n]

[START WITH n]

[MAXVALUE n | NOMAXVALUE]

[MINVALUE n | NOMINVALUE]

[CYCLE | NOCYCLE]

[CACHE n | NOCACHE]

[ORDER | NOORDER];

Parametry:



  • user - nazwa użytkownika

  • sequence - nazwa tworzonej sekwencji, musi być poprawnym identyfikatorem i być unikalna w obrębie danego użytkownika.

  • INCREMENT BY - określa różnicę między kolejno generowanymi liczbami. Jeśli liczba ta jest ujemna, to będą generowane liczby w porządku malejącym, w przeciwnym wypadku - w porządku rosnącym. Domyślnie przyjmowana jest wartość 1. Dozwolona jest każda liczba różna od 0.

  • START WITH - pierwsza liczba, która powinna być wygenerowana przez sekwencję. Domyślną wartością jest MINVALUE dla sekwencji rosnących i MAXVALUE dla sekwencji malejących. Utworzona sekwencja nie jest zainicjalizowana i pierwszą wartość otrzymuje się po jednokrotnym odczytaniu pseudokolumny NEXTVAL.

  • MINVALUE - określa minimalną wartość jaką może wygenerować sekwencja. Domyślnie dla sekwencji rosnących jest to 1, natomiast dla malejących wartość ta wynosi -10e27 + 1. Podanie NOMINVALUE powoduje, że sekwencja nie będzie sprawdzać wartości minimalnej.

  • MAXVALUE - określenie maksymalne wartości, jaką może wygenerować sekwencja. Wartościami domyślnymi są -1 i 10e27 - 1 odpowiednio dla sekwencji malejącej i rosnącej. Wyspecyfikowanie NOMAXVALUE powoduje, że sekwencja nie będzie sprawdzać wartości maksymalnej.

  • CYCLE, NOCYCLE - domyślną wartością jest NOCYCLE, które powoduje, że żadne dodatkowe numery nie zostaną wygenerowane po osiągnięciu końca sekwencji. W tym wypadku każda próba generacji kolejnego numeru spowoduje zgłoszenie błędu. W przypadku podania klauzuli CYCLE po osiągnięciu wartości maksymalnej sekwencja powróci do wartości minimalnej (dla sekwencji rosnących) lub po osiągnięciu wartości minimalnej powróci do maksymalnej (dla sekwencji malejących) rozpoczynając kolejny cykl generacji numerów.

  • CACHE, NOCACHE - klauzula CACHE włącza wykonywanie pre-alokacji numerów sekwencji i przechowywanie ich w pamięci, co skutkuje zwiększeniem szybkości generacji kolejnych liczb. Klauzula NOCACHE wyłącza tę możliwość. Domyślnie przyjmowane jest CACHE 20. Wartość podana w CACHE musi być mniejsza niż MAXVALUE - MINVALUE.

  • ORDER, NOORDER - klauzula ORDER gwarantuje, że kolejne liczby będą generowane w porządku jakim otrzymane zostały przez system polecenia ich generacji. Klauzula NOORDER wyłączą tę własność. Kolejność generacji numerów w sekwencji jest ważna w aplikacjach, w których ważna jest kolejność (czasowa) wykonywanych operacji. Zwykle nie jest ona ważna w aplikacjach, które wykorzystują sekwencje tylko do generacji kluczy pierwotnych.

Opis:


Sekwencje mogą być używane do generacji kluczy pierwotnych dla jednej tabeli lub wielu tabel i wielu użytkowników. Aby mieć dostęp do sekwencji, której właścicielem jest inny użytkownik, należy mieć uprawnienia SELECT do tej sekwencji. Sekwencja może posiadać synonim. Numery w sekwencjach są generowane niezależnie od tabel, dlatego mogą być używane jako liczby unikalne dla kilku różnych tabel i użytkowników. Jest jednak możliwe, że niektóre numery z sekwencji zostaną pominięte, ponieważ zostały one wygenerowane i użyte w transakcji, która następnie została wycofana. Dodatkowo jeden użytkownik może nie zdawać sobie sprawy, że inni użytkownicy korzystają z tej samej sekwencji (co również skutkuje pominięciem numerów dla tego użytkownika). Dostęp do sekwencji zapewniają dwie pseudokolumny: NEXTVAL i CURRVAL. Pseudokolumna NEXTVAL jest używana do generacji następnej wartości z podanej sekwencji.

Składnia jest następująca:



sequence.NEXTVAL

gdzie sequence jest nazwą sekwencji.

Pseudokolumna CURRVAL pozwala na odczytanie aktualnej wartości sekwencji. Aby możliwe było użycie CURRVAL konieczne jest wcześniejsze użycie NEXTVAL w aktualnej sesji dla danej sekwencji.

Składnia jest następująca:



sequence.CURRVAL

gdzie sequence jest nazwą sekwencji. Pseudokolumny NEXTVAL i CURRVAL mogą być używane w:



  • w klauzuli SELECT i rozkazie SELECT (z wyjątkiem widoków),

  • liście wartości rozkazu INSERT,

  • wyrażeniu SET w rozkazie UPDATE.

Pseudokolumn NEXTVAL i CURRVAL nie można używać w: podzapytaniach w liście select dla widoków ze słowem kluczowym DISTINCT z klauzulami ORDER BY, GROUP BY i HAVING w rozkazie SELECT z operatorem ustawienia (UNION, INTERSECT, MINUS)

Przykład.

CREATE SEQUENCE eseq INCREMENT BY 10;

INSERT INTO pracownicy

VALUES (eseq.NEXTVAL, 'Jan', 'Kowalski', 3);


      1. Rozkaz SELECT


Rozkaz SELECT służy do wyświetlania wierszy i kolumn z jednej lub kilku tabel. Może być używany jako osobny rozkaz lub (z pewnymi ograniczeniami) jako zapytanie lub podzapytanie w innych poleceniach. Aby odczytać dane z określonej tabeli trzeba być jej właścicielem, mieć uprawnienia SELECT dla tej tabeli lub być administratorem bazy (DBA).

Składnia:



SELECT [ALL | DISTINCT]

{* | table.* | expr [c_alias] }

[, { table.* | expr [c_alias] } ] ...

FROM [user.]table [t_alias]

[, [user.]table [t_alias]] ...

[ WHERE condition ]

[ CONNECT BY condition [START WITH condition] ]

[ GROUP BY expr [. Expr] ... [HAVING condition] ]

[ {UNION | INTERSECT | MINUS} SELECT ...]

[ ORDER BY {expr | position} [ASC | DESC]

[, {expr | position} [ASC | DESC]] ] ...

[ FOR UPDATE OF column [, column] ... [NOWAIT] ];
Parametry:

  • ALL - ustawiane domyślnie, oznacza, że wszystkie wiersze, które spełniają warunki rozkazu SELECT powinny zostać pokazane.

  • DISTINCT - określa, że wiersze powtarzające się powinny zostać usunięte przed zwróceniem ich na zewnątrz. Dwa wiersze traktuje się jako równe jeśli wszystkie wartości dla każdej z kolumn zwracanych rozkazem SELECT są sobie równe.

  • * - oznacza, że wszystkie kolumny ze wszystkich wymienionych tabel powinny zostać pokazane.

  • table.* - oznacza, że wszystkie kolumny z podanej tabeli powinny zostać pokazane

  • expr - wyrażenie, zostanie opisane w dalszej części wykładu

  • c_alias - jest inną nazwą dla kolumny (aliasem) i powoduje, że nazwa ta zostanie użyta jako nagłówek kolumny podczas wyświetlania. W żaden sposób nie jest zmieniana rzeczywista nazwa kolumny. Aliasy kolumn nie mogą być używane w dowolnym miejscu zapytania.

  • [user.]table - określa które tabele i widoki należy pokazać. Jeśli użytkownik nie jest podany to domyślnie przyjmowany jest użytkownik aktualny (wykonujący rozkaz SELECT).

  • t_alias - pozwala określić inną nazwę dla tabeli w celu obliczenia zapytania. Najczęściej jest używane w zapytaniach powiązanych. W tym wypadku inne odwołania do tabeli wewnątrz zapytania muszą posługiwać się wyspecyfikowanym aliasem.

  • condition - warunek, jaki muszą spełniać wiersze, aby zostały zwrócone przez zapytanie. Warunki zostaną opisane dokładniej w dalszej części wykładu.

  • position - identyfikuje kolumnę bazując na jej tymczasowym położeniu w rozkazie SELECT, a nie na nazwie.

  • ASC, DESC - określa, że zwracane wiersze powinny być posortowane w kolejności rosnącej lub malejącej (odpowiednio).

  • column - nazwa kolumny należąca do jednej z tabel podanych w klauzuli FROM.

  • NOWAIT - określa, że ORACLE powinien zwrócić sterowanie do użytkownika, zamiast czekać na możliwość zablokowania wiersza, który został uprzednio zablokowany przez innego użytkownika.

Opis:


Użycie nazwy tabeli przed nazwą kolumny i nazwy użytkownika przed nazwą tabeli jest najczęściej opcjonalne, to jednak dobrym zwyczajem jest podawanie nazw w pełni kwalifikowanych z dwóch powodów:

  • jeśli dwie tabele mają kolumny o tej samej nazwie, to nie wiadomo, która powinna być użyta w rozkazie SELECT

  • ORACLE wykonuje znacznie mniej obliczeń, jeśli nazwy te są podane i nie trzeba ich szukać.

Pozostałe operacje wykonywane przez rozkaz SELECT zostaną opisane w dalszej części wykładu.
Przykłady.

  • SELECT imię, nazwisko FROM pracownicy ;




  • SELECT tytuł, autorzy.imię, autorzy.nazwisko, miejsca.miejsce

FROM książki, autorzy, miejsca

WHERE książki.autor = autorzy.autor_nr AND książki.miejsce = miejsca.miejsce_nr ;


      1. Rozkaz UPDATE


Rozkaz UPDATE służy do zmiany danych zapisanych w tabeli. Warunkiem wykonania tego polecenia jest bycie właścicielem tabeli, administratorem (DBA) lub posiadanie uprawnień UPDATE dla tej tabeli.
Składnia:

UPDATE [user.]table [alias]

SET column = expr [, column = expr] ...

[ WHERE condition ];

lub


UPDATE [user.]table [alias]

SET (column [, column] ...) = (query)

[, column [, column] ...) = (query) ] ...

[ WHERE condition ];
Parametry:

  • user - nazwa właściciela tabeli.

  • table - nazwa istniejącej tabeli.

  • alias - dodatkowa nazwa używana do dostępu do tabeli w pozostałych klauzulach rozkazu.

  • column - kolumna wewnątrz tabeli. Nawiasy nie są potrzebne jeśli lista kolumn zawiera tylko jedną kolumnę.

  • expr - wyrażenie - zostanie opisane w dalszej części wykładu

  • query - rozkaz SELECT bez klauzul ORDER BY i FOR UPDATE, często skorelowany ze zmienianą tabelą.

  • condition - poprawny warunek. Warunek musi zwracać wartość TRUE lub FALSE.

Warunki będą opisane w dalszej części wykładu
Opis:

Klauzula SET określa, które kolumny zostaną zmienione i jakie nowe wartości mają być w nich zapisane. Klauzula WHERE określa warunki jakie muszą spełniać wiersze, w których należy wymienić wartości podanych wcześniej kolumn. Jeśli klauzula WHERE nie jest podana, to zmieniane są wszystkie wiersze w tabeli. Rozkaz UPDATE dla każdego wiersza, który spełnia warunki klauzuli WHERE oblicza wartości wyrażeń znajdujących się po prawej stronie operatora '=' i przypisuje te wartości do pola określanego przez nazwę kolumny z lewej strony. Jeśli klauzula SET posiada podzapytanie, to musi ono zwrócić dokładnie jeden wiersz dla każdego ze zmienianych wierszy. Każda wartość jest przypisywana zgodnie z kolejnością na liście kolumn. Jeśli zapytanie (w przypadku klauzuli postaci SET value = query) nie zwróci wierszy to odpowiednie pola są ustawiane na NULL.

Zapytanie może odwoływać się do zmienianej tabeli. Jest ono obliczane oddzielnie dla każdego zmienianego wiersza a nie dla całego rozkazu UPDATE.
Przykład.

UPDATE pracownicy

SET nr_wydziału = 4

WHERE nr_wydziału = 3 ;


      1. Rozkaz RENAME


Rozkaz RENAME zmienia nazwę tabeli, widoku lub synonimu. Zmiany może dokonać właściciel tabeli, widoku lub synonimu.

Składnia:



RENAME old TO new

Parametry:



  • old - aktualna nazwa tabeli, widoku lub synonimu

  • new - żądana nazwa tabeli, widoku lub synonimu

Opis:


Wszystkie pozwolenia, które posiadał obiekt o starej nazwie, przechodzą na obiekt o nowej nazwie. Za pomocą tego rozkazu nie można zmieniać nazw kolumn. Zmiana nazwy kolumny może być dokonana za pomocą trzech rozkazów: CREATE TABLE, DROP TABLE i RENAME w następujący sposób:

CREATE TABLE temporary (new_column_name)

AS SELECT old_column_name FROM table ;

DROP TABLE table ;

RENAME temporary TO table ;
Przykład.

RENAME wydziały TO jednostki ;


      1. Rozkaz CREATE INDEX


Rozkaz tworzy nowy indeks dla tabeli lub klastra. Indeks zapewnia bezpośredni dostęp do wierszy w tabeli w celu zredukowania czasu wykonywania operacji. Indeks zawiera informację o każdej wartości, która jest zapisana w indeksowanej kolumnie. Indeks może utworzyć właściciel tabeli, użytkownik posiadający uprawnienia INDEX dla danej tabeli lub administrator (DBA).
Składnia:

CREATE [UNIQUE] INDEX index ON

{table(column [ASC|DESC][, column [ASC|DESC]]...) |

CLUSTER cluster}

[INITTRANS n] [MAXTRANS n]

[TABLESPACE tablespace]

[STORAGE storage]

[PCTFREE n]

[NOSORT];
Parametry:

  • UNIQUE - zakłada, że tabela nie ma nigdzie dwóch wierszy zawierających te same wartości we wszystkich indeksowanych kolumnach. W aktualnej wersji ORACLE'a jeśli indeks typu UNIQUE nie zostanie utworzony dla tabeli, to tabela może zawierać powtarzające się wiersze.

  • indeks - nazwa tworzonego indeksu. Nazwa ta musi być inna od każdego innego obiektu bazy danych danego użytkownika.

  • table - nazwa istniejącej tabeli, dla której tworzy się indeks.

  • column - nazwa kolumny w tabeli.

  • ASC, DESC - zostały dodane w systemie ORACLE w celu zapewnienia kompatybilności z systemem DB2, ale zawsze są tworzone w porządku rosnącym.

  • CLUSTER cluster - określa klaster, dla którego tworzony jest indeks.

  • NOSORT - wskazuje ORACLE'owi, że wiersze przechowywane w bazie są już posortowane, w związku z czym nie jest konieczne sortowanie podczas tworzenia indeksu.

Opis:


Indeksy są tworzone w celu przyspieszenia operacji: dostępu do danych w posortowanych według kolumn indeksowanych wyszukiwania wierszy, zawierających dane z indeksowanych kolumn. Należy jednak zwrócić uwagę, że indeks spowalnia wstawianie, usuwanie i zmiany wartości w indeksowanych kolumnach, ponieważ jego zawartość musi ulec zmianie w momencie zmiany zawartości tabeli. Do jednego indeksu wstawionych może być co najwyżej 16 kolumn. Jeden element indeksu jest konkatenacją wartości tych kolumn w poszczególnych wierszach. W momencie wyszukiwania może być użyty cały element indeksu lub pewna jego część początkowa. Dlatego kolejność kolumn w indeksie jest ważna. Jeśli więc indeks zostanie utworzony na podstawie trzech kolumn A, B, C w takiej kolejności, to zostanie on użyty do wyszukiwania konkatenacji kolumn A, B, C, kolumn A i B lub tylko kolumny A. Nie będzie natomiast używany w przypadku wyszukiwania połączenia kolumn B i C lub pojedynczej kolumny B lub C. Możliwe jest utworzenie dowolnej ilości indeksów dla jednej lub kilku tabel. Należy jednak pamiętać, że oprócz spowolnienia operacji modyfikacji tabeli, indeksy zajmują również dość dużą ilość miejsca na dysku.
Przykład.

CREATE INDEX i_prac_imię ON pracownicy (imię) ;


      1. Rozkaz CREATE VIEW


Rozkaz służący do tworzenia widoku, czyli logicznej tabeli bazującej na jednej lub wielu tabelach. Utworzyć widok może właściciel tabel, użytkownik posiadający do nich co najmniej uprawnienia SELECT lub administrator.
Składnia:

CREATE VIEW [user.]view [(alias [, alias] ...)]

AS query

[ WITH CHECK OPTION [CONSTRAINT constraint] ] ;
Parametry:

  • user - właściciel tworzonego widoku.

  • view - nazwa tworzonego widoku.

  • query - identyfikuje kolumny i wiersze tabel, na których bazuje widok. Zapytanie może być dowolnym poprawnym rozkazem SELECT nie zawierającym klauzul ORDER BY ani FOR UPDATE.

  • WITH CHECK OPTION - informuje, że wstawienia i zmiany wykonywane poprzez widok, są niedozwolone jeśli spowodują wygenerowanie wierszy, które będą niedostępne dla widoku. Klauzula WITH CHECK OPTION może być użyta w widoku bazującym na innym widoku.

  • CONSTRAINT - nazwa dołączona do warunku WITH CHECK OPTION.

Opis:


Widok jest logicznym oknem dla jednej lub kilku tabel. Widok ma następujące właściwości:

  • widok nie przechowuje danych - jest on przeznaczony do pokazywania danych zawartych w innych tabelach.

  • widok może być użyty w rozkazie SQL w dowolnym miejscu, w którym możliwe jest użycie tabeli z zastrzeżeniem, że można wykonywać selekcję z widoku tylko wtedy, gdy zapytanie na którym bazuje widok zawiera:

  • połączenie ,

  • klauzule GROUP BY, CONNECT BY lub START WITH ,

  • klauzulę DISTINCT, pseudokolumny lub wyrażenia na liście kolumn.

Możliwa jest zmiana danych zawartych w widoku, który posiada pseudokolumny lub wyrażenia dotąd dopóki rozkaz UPDATE nie odwołuje się do pseudokolumny lub wyrażenia.

Widoki są używane do:



  • utworzenia dodatkowego poziomu zabezpieczenia tabeli poprzez ograniczenie dostępu do określonych kolumn lub wierszy tabeli bazowej

  • ukrycia złożoności danych - na przykład widok może być użyty do operacji na wielu tabelach tak, by wydawało się, że operacje wykonywane są na jednej tabeli.

  • pokazywania danych z innej perspektywy - dla przykładu widok może zostać użyty do zmiany nazwy kolumny bez zmiany rzeczywistych danych zapisanych w tabeli.

  • zapewnienia poziomu integralności.


Przykład.

CREATE VIEW bibl

AS SELECT ksiazki.tytul, autorzy.imie, autorzy.nazwisko, miejsca.miejsce

FROM ksiazki, autorzy, miejsca

WHERE ksiazki.autor = autorzy.autor_nr AND ksiazki.miejsce = miejsca.miejsce_nr

WITH CHECK OPTION CONSTRAINT chkopt ;


      1. Rozkaz COMMIT


Składnia:

COMMIT [WORK];
Opis:

Rozkaz COMMIT i COMMIT WORK wykonują tę samą operację polegającą na zakończeniu aktualnej transakcji i stałym zapisaniu wszystkich dokonanych zmian w bazie danych.


      1. Rozkaz ROLLBACK


Składnia:

ROLLBACK [ WORK ] [TO [ SAVEPOINT ] savepoint ];
Parametry:

  • WORK - opcjonalne, wprowadzone tylko dla kompatybilności ze standardem ANSI

  • SAVEPOINT - opcjonalne, nie zmienia działania rozkazu ROLLBACK

  • savepoint - nazwa punktu zaznaczonego podczas wykonywania aktualnej transakcji.

Opis:

Rozkaz ROLLBACK wycofuje wszystkie zmiany aż do podanego punktu (w przypadku klauzuli TO) lub początku transakcji (bez klauzuli TO).


Przykłady.

  • ROLLBACK ;




  • ROLLBACK TO SAVEPOINT SP5 ;



      1. Rozkaz SAVEPOINT


Składnia:

SAVEPOINT savepoint;
Parametry:

  • savepoint - nazwa punktu w aktualnej transakcji zaznaczanego przez wykonywany rozkaz

Opis:

Rozkaz SAVEPOINT jest używany w połączeniu z ROLLBACK do wycofywania fragmentów wykonywanej transakcji. Nazwy punktów muszą być unikalne w jednej transakcji. Systemy zarządzania bazami danych wprowadzają najczęściej ograniczenia na liczbę punktów, które można zaznaczyć w jednej transakcji.


Przykłady.

  • UPDATE pracownicy

SET placa_podstawowa = 2000

WHERE nazwisko = 'Kowalski' ;

SAVEPOINT Kow_plac;


  • UPDATE pracownicy

SET placa_podstawowa = 1500

WHERE nazwisko = 'Nowak' ;

SAVEPOINT Now_plac;


  • SELECT SUM(placa_podstawowa) FROM pracownicy;

ROLLBACK TO SAVEPOINT Kow_plac;


  • UPDATE pracownicy

SET placa_podstawowa = 1300

WHERE nazwisko = 'Nowak' ;

COMMIT;

      1. Rozkaz SET TRANSACTION


Składnia:

SET TRANSACTION { READ ONLY };
Parametry:

Opis:

Rozkaz informuje system, że wykonywana transakcja będzie składać się tylko z zapytań. Nie jest możliwe używanie w takiej transakcji rozkazów INSERT, UPDATE lub DELETE. Rozkaz SET TRANSACTION musi wystąpić jako pierwszy w transakcji, w przeciwnym razie zgłoszony zostanie błąd.




  1   2   3   4   5   6   7   8


©operacji.org 2017
wyślij wiadomość

    Strona główna