Drodzy czytelnicy, poniższe pytania zostały przygotowane w taki sposób, aby każdy z Was mógł się zaznajomić rodzajem pytań na które możecie natrafić w trakcie rozmowy kwalifikacyjnej związanej z językiem SQL. W praktyce często okazuję się, że rozmowa zaczyna się od postawowych zagadanień a następnie na podstawie Twoich odpowiedzi dyskusja jest kontynuowana - zagłębiamy się w szczegóły.

Czym jest SQL?
SQL oznacza Structured Query Language. Jest to język baz danych używany do tworzenia baz danych, usuwania, pobierania i modyfikowania wierszy.

Kiedy pojawił się SQL?
SQL pojawił się w 1974 roku. Jest językiem często używanym do zarządzania relacyjnymi bazami danych. W roku 1986 stał się standardem amerykańskiego National Standards Institute, w skrócie ANSI oraz ISO, tj. International Organization for Standarization w roku 1987.

Do czego używany jest SQL?
  • do wykonywania zapytań do bazy danych;
  • do pobierania danych z bazy danych;
  • do dodawania rekordów do bazy danych;
  • do zaktualizowania rekordów w bazie danych;
  • do usunięcia rekordów z bazy danych;
  • do tworzenia nowych baz danych;
  • do tworzenia nowych tabel w bazie danych;
  • do tworzenia widoków w bazie danych;
  • do wykonywania złożonych operacji w bazie danych.

Czy SQL wspiera programowanie?
Nie, SQL nie ma pętli ani instrukcji warunkowych. Jest używany jak język poleceń do uzyskiwania dostępu do baz danych. Podstawowym celem SQL jest pobieranie, manipulowanie, aktualizowanie i wykonywanie złożonych operacji takich jak łączenie danych znajdujących się w bazie danych.

Jakie są podzbiory SQL?
  • Data definition language (DDL);
  • Data manipulation language (DML);
  • Data control language (DCL).

Czym jest ‘Data Defintion Langauge’?
DDL (Data Definition Language) pozwala na używanie operacji tworzenia (CREATE), zmiany (ALTER) oraz kasowania (DELETE) obiektów baz danych takich jaki schematy, tabele, widoki, etc.

Czym jest ‘Data Manipulation Language’?
DML (Data Manipulation Language) daje użytkownikowi dostęp do danych i możliwość manipulowania nimi. Służy do wykonywania następujących operacji:
  • wstawaienie danych do bazy danych;
  • pobieranie danych z bazy danych;
  • aktualizowanie danych w bazie danych;
  • usuwanie danych z bazy danych.

Czym jest ‘Data Control Language’?
DCL (Data Control Language) pozwala użytkownikowi kontrolować dostęp do bazy danych. Zawiera dwie komendy:
  • GRANT: przyznanie konkretnemu użytkownikowi możliwość wykonywania określonych zadań;
  • REVOKE: unieważnienie poprzednio odmówionego lub przyznanego uprawnienia.

Czym są tabele i pola w bazie danych?

Tabela to zestaw uporządkowanych danych. Ma kolumny i wiersze. Kolumny można zakwalifikować jako pionowe, wiersze są poziome.

Tabela zawiera określoną liczbę kolumn zwanych polami ale może mieć dowolną liczbę wierszy, które znane są jako rekordy.


Czym jest klucz główny?
Klucz główny jest kombinacją pól, które jednoznaczenie określają wiersz. Jest to szczególny rodzaj klucza unikalnego. Klucz główny nie może mieć wartości NULL.

Czym jest klucz obcy?
Klucz obcy określany jest jako klucz powiązany z kluczem głównym innej tabeli. Należy utworzyć relację między dwiema tabelami korzystając z odwołania do klucza obcego, który jest kluczem podstawowym innej tabeli.

Czym jest klucz unikalny?

Klucz unikalny jednoznaczenie identyfikuje każdy rekord w bazie danych. Zapewnia to niepowtarzalność kolumny lub zestawu kolumn.

Warto wiedzieć jaka jest różnica pomiędzy kluczem unikalnym a kluczem głównym. Klucz podstawowy zawiera wartość unikalną ale jego wartość nie może być NULL. Klucz unikalny również przechowuje wartość unikalną ale może mieć jedno pole o wartości NULL.


Czym jest baza danych?

Baza danych jest zorganizowaną formą danych. Dzięki temu dostęp do danych, manipulacja, pobieranie, przechowywanie oraz zarządzanie danymi jest łatwe i uporządkowane.

Baza danych jest również uporządkowaną formą danych. Dzięki tak ustrukturyzowanemu formatowi możesz łatwo uzyskać dostęp do danych.


Jakie są różne typy systemów zarządzania bazami danych?
Możemy wyróżnić cztery typy baz danych:
  • DBMS - Hierarchiczne bazy danych;
  • RDBMS - Relacyjne bazy danych;
  • Sieciowe bazy danych;
  • Obiektowe bazy danych.

Czym jest DBMS?

DBMS to skrót podchodzący od Database Management System. Jest to system używany do kontroli tworzenia, utrzymywania oraz używania bazy danych. Można go porównać do menadżera plików, który zarządza danymi w bazie danych, zamiast zapisywania ich w systemach plików.

System zarządzania bazami danych to interfejs między bazą danych a użytkownikiem. Ułatwia pobieranie danych i dostęp do nich.

System zarządzania bazami danych to oprogramowanie, które zapewnia nam możliwość wykonywania operacji takich jak tworzenie, utrzymywanie czy wykorzystywanie danych z bazy danych za pomocą prostego zapytania.

Bez systemu zarządzania bazami danych byłoby znaczeniej trudniej uzyskać dostęp do danych z bazy danych.


Czym jest RDBMS?
RDBMS to skrót podchodzący od Relational Database Management System. Jest to system zarządzania bazami danych oparty na modelu relacyjnym. RDBMS przechowuje dane w zbiorze tabel. Ułatwia manipulowanie danymi przechowywanymi w tabelach za pomocą operatorów relacyjnych.

Czym jest Normalizacja w bazie danych?

Normalizacja jest używana do minimalizowania nadmiarowości (redundancja) i zależności poprzez odpowiednie organizowanie pól i tabel bazy danych.

Istnieją pewne zasady normalizacji baz danych, które znane są powszechnie jako postaci normalne:

  • Pierwsza postać normalna (1NF);
  • Druga postać normalna (2NF);
  • Trzecia postać normalna (3NF);
  • Postać normalna Boyce’a-Codd’a (BCNF lub 3.5NF).


Jakie jest główne użycie Normalizacji?
Normalizacja służy głównie do dodawania, usuwania lub modyfikacji pola, które można utworzyć w pojedynczej tabeli. Podstawowym założeniem Normalizacji jest usunięcie nadmiarowości. Dokonuje się tego dzięki podziałowi tabeli na małe partycje, które następnie łączy się za pomocą różnych relacji tak, aby uniknać szans na pojawienie się redundancji.

Jakie są wady nie wykonywania Normalizacji baz danych?
Możemy do nich zaliczyć:
  • Występowanie w bazie danych zbędnych terminów, które powodują marnowanie miejsca na dysku;
  • Ze względu na powtarzalność określeń (terminy, które mogą być zdefiniowane w osobnej tabeli) mogą wystąpić niespójności związane z identyfikatorami. Poszczególne zmiany zostaną wprowadzone w tych samych lub innych tabelach co doprowadzi do niespójności danych a w efekcie do naruszenia właściwości ACID - zbiór właściwości gwarantujących poprawne przetwarzanie transakcji w bazie danych.

Czym jest niespójna zależność?
Niespójna zależność odnosi się do trudności w uzyskaniu dostępu do konkretnych danych. Problem może wynikać z problemem ścieżki dostępu, która może być brakująca lub uszkodzona. Niespójna zależność powoduje, że użytkownicy przeszukują dane w niewłaściwej tabeli co powoduje, że błąd zostaje wyświetlony jako wynik.

Czym jest Denormalizacja w bazie danych?
Denormalizacja służy do uzyskiwania dostępu do danych z wyższej lub niższej postaci normalnej bazy danych. Przetwarza ona również nadmiarowość w tabeli wprowadzając dane z powiązanych tabel. Denormalizacja dodaje wymagany nadmiarowy termin do tabeli dzięki czemu możemy uniknąć stosowania złożonych sprzężeń i wielu innych złożonych operacji.

Jakie typy operatorów dostępne są w SQL?
  • operatory arytmetyczne – dodawanie (+), odejmowanie (-), mnożenie (*), dzielenie (/), etc.;
  • operatory logiczne – ALL, AND, ANY, ISNULL, EXISTS, BETWEEN, IN, LIKE, NOT, OR, UNIQUE;
  • operatory porówniania - =,! =, <>, <,>, <=,> =,! <,!>.

Czym jest widok w SQL?
Widok jest wirtualną tabelą, która zawiera podzbiór danych. Nie są one zdefiniowane domyślnie. Zajmują również mniej miejsca do przechowywania. Widok może zawierać dane z jednej lub większej liczby tabel – wszystko zależy od relacji. Widoki służą do zastosowania mechanizmu zabezpieczeń na serwerze SQL. Widok bazy danych to obiekt w którym możemy wyszukiwać dane w podobny sposób jakby dane znajdowały się w tabeli. Nie możemy jednak wprowadzać modyfikacji.

Czym jest Index w SQL?

Indkesy pozwalają na zmniejszenie ‘kosztu’ generowanego zapytania ponieważ taki wysoki ‘koszt’ prowadzi do spadku wydajności wykonywanej kwerendy. Służą do zwiększenia wydajności i umożlwiają szybsze pobranie rekordów z tabeli. Indeksowanie zmniejsza liczbę stron danych przez które musi przejść kwerenda, aby znaleźć tę właściwą. Indeks ma również swoją unikalną wartość co oznacza, że nie może zostać zduplikowana.

Indeks tworzy pozycję dla każdej wartości dzięki czemu pobieranie danych będzie szybsze. Warto prześledzić prosty przykład:
Książka zawiera w sobie informacje dotyczące każdego kraju. Naszym obiektem zainteresowania jest tylko Japonia. Zdecydowanie łatwiej przejść do spisu treści i odszukać (indeks) tego kraju niż przechodzić przez wszystkie pozostałe strony.


Jakie są różne typy indeksów w SQL?
  • indeks unikalny;
  • indeks klastrowany;
  • indeks nieklastrowany;
  • indeks bitmapowy;
  • indeks normalny;
  • indeks złożony;
  • indeks B-drzewo;
  • indeks funkcjonalny.

Czym jest indeks unikalny?
Aby utworzyć indeks unikalny, użytkownik musi w pierwszej kolejności sprawdzić dane w kolumnie, ponieważ indeksy unikalne są używane, gdy dowolna kolumna ma unikalne wartości. Taki typ indeksu nie pozwala, aby pole zawierało zduplikowane wartości. Indeks unikalny może być stosowany automatycznie po zdefiniowaniu klucza głównego.

Czym jest indeks klastrowany?
Indeks klastrowany służy do porządkowania fizycznej kolejności tabeli i wyszukiwania na podstawie wartości klucza. Każda tabela może mieć tylko jeden indeks klastrowany. Indeks ten jest jedynym indeksem, który został utworzony automatycznie po wygenerowaniu klucza głównego. Klucz ten jest preferowany jeżeli niezbednę są umiarkowane modyfikacje w danych tabeli.

Czym jest indeks nieklastrowany?
Powodem utworzenia tego indeksu jest wyszukiwanie danych. Z poprzedniego pytania wiemy, że indeks klastrowany jest tworzony automatycznie, gdy dodawne są klucze główne. Z kolei indeksy nieklastrowane są tworzone, gdy w zapytaniu używane są warunki wielu połączeń oraz filtry. Indeks bez klastrowania nie zmienia fizycznej kolejności tabel i utrzymuje logiczną kolejność danych. Każda tabela może zawierać 999 nieklastrowych indeksów.

Jakie są różnice pomiędzy SQL, MySQL oraz SQL Sever?
SQL to język używany do komunikacji z relacyjną bazą danych. Zapewnia sposób manipulowania i tworzenia bazy danych. Systemy zarządzania relacyjnami bazami danych takie jak: MySQL czy SQL Server używają SQL jako standardowego języka relacyjnej bazy danych. Pierwszy z systemów jest udostępniony za darmo w ramach projektu open source.

Jakie są różnice pomiędzy SQL a PL/SQL?

SQL to język używany do komunikacji z relacyjną bazą dabych. Zapewnia sposób manipulowania i tworzenia bazy danych. PL/SQL to dialekt języka SQL, który służy do zwiększenia możliwości SQL. Został opracowany przez Oracle Corporation na początku lat 90-tych. Dodaje on proceduralne cechy języków programowania w SQL.

W SQL wykonywana jest pojedyczna kwerenda(w tym samym momencie), podczas gdy w PL/SQL cały blok kody jest wykonywany natychmiast.

SQL jest źródłem danych, które będziemy wyświetlać, podczas gdy PL/SQL zapewnia platformę, która jest zdolna wyświetlić te dane.

Instrukcja SQL może być osadzona w PL/SQL - odwrotne połączenie nie zadziała ponieważ SQL nie obsługuje żadnego języka programowania i słów kluczownych.


Czy możliwe jest sortowanie kolumn przy użyciu aliasu kolumny?
Tak. W tym celu należy użyć aliasu kolumny w klauzuli ORDER BY zamiast WHERE w momencie sortowania danych.

Jakie są różnice pomiędzy klastrowanym i nieklastrowanym indeksem w SQL?
W SQL istnieją dwa różne typy indeksów, indeks klastrowany oraz nieklastrowany. Rożnicę pomiędzy nimi są niezwykle ważne z punktu widzenia wydajności SQL.
  1. Jedna tabela może mieć tylko jeden indeks klastrowany oraz wiele indeksów nieklastrowanych.
  2. Indeks klastrowany określa sposób fizycznego przechowywania danych w tabeli. Indeksy są przechowywane w klastrze, powiązane dane są przechowywane razem – wyszukiwanie danych staje się proste.
  3. Indeksy klastrowane przechowują informację o danych oraz same dane, podczas gdy indeks nieklastrowany przechowuje tylko informacje a następnie odsyła do danych przechowywanych w danych klastrowanych.
  4. Odczyt z indeksu klastrowanego jest znacznie szybszy niż odczyt z indeksu nieklastrowanego z tej samej tabeli.
  5. Klastrowany indeks sortuje i zapisuje dane danego wiersza w tabeli lub widoku na podstawie zawartości ich klucza, podczas gdy indeks nieklastrowany ma strukturę oddzieloną od wiersza.

Jakie polecenie SQL pozwala na wyświetlenie obecnej daty?
Pozwala na to wbudowa funkcja GetDate(), która służy do zwracania bieżącej daty.

Jaki są najpopularniejsze rodzaje łączenia w SQL?
Najcześciej używane połączenia w SQL to: INNER JOIN oraz LEFT JOIN i RIGHT JOIN.

Jakie są różne typy połączeń w SQL?

JOIN'y są używane do łączenia lub pobierania danych z dwóch tabel. Najczęściej używane połączenia to:

  • Theta Join;
  • Natural Join;
  • Equijoin.
oraz
  • Right outer join
  • Left outer join
  • Full outer join


Czym jest INNER JOIN w SQL?
INNER JOIN zwraca wiersze, gdy istnieje co najmniej jedno dopasowanie wierszy pomiędzy tabelami. Słowo kluczowe INNER JOIN dołącza pasujące rekody z obu tabel.

Czym jest RIGHT JOIN w SQL?
RIGHT JOIN służy do wyszukiwania wierszy wspólnych między tabelami oraz do zwrócenia wszystkich wierszy z tabeli po prawej stronie. Zwraca wszystkie wiersze z tabeli po prawej stronie nawet jeśli nie ma żadnych dopasowań w tabeli po lewej stronie.

Czym jest LEFT JOIN w SQL?
LEFT JOIN służy do wyszukiwania wierszy wspólnych między tabelami oraz do zwrócenia wszystkich wierszy z tabeli po lewej stronie. Zwraca wszystkie wiersze z tabeli po lewej stronie nawet jeśli nie ma żadnych dopasowań w tabeli po prawej stronie.

Czym jest FULL JOIN w SQL?
FULL JOIN zwraca wszystkie rekody, gdy istnieje dopasowanie w tabeli po lewej lub prawej stronie.

Czym jest ‘TRIGGER’ w SQL?
  • Wyzwalacz pozwala na wykonanie partii kodu SQL, gdy dochodzi do uruchomienia polecenia wstawiania, aktualizacji lub usuwania na konkretnej tabeli bazy danych. Jest to zbiór działań wykonywanych po dokonaniu jednej z powyższych operacji;
  • Wyzwalacz jest aktywowany, gdy powyższe polecenia przekazywane są do systemu.
  • Wyzwalacze są szczególnym typem procedur składowanych, które są zdefiniowane do automatycznego wykonywania po określonym działaniu;
  • Wyzwalacze są generowane za pomocą instrukcji CREATE TRIGGER.

Jakie operatory zbiorów występują w SQL?
Zapytania SQL, które zawierają operacje łączenia zbiorów nazywamy zapytaniami złożonymi. Do tych operatorów zaliczamy: UNION, UNION ALL, INTERSECT oraz MINUS.

Jaka jest różnica pomiędzy operatorami warunkowymi BETWEEN oraz IN?

Operator BETWEEN służy do wyświetlania wartości na podstawie zdefiniowanego zakresu. Wartości mogą być liczbami, cyframi, tekstem oraz datami. Operator ten zwraca nam listę wszystkich wartości pomiędzy.

Operator IN służy do sprawdzenia wartości zawartych w określonym zbiorze. Jest używany, gdy mamy do wyboru więcej niż jedną wartość.


Czym jest ograniczenie (Constraint)? Jakie są ich poziomy?
Ograniczenia to reguły i przepisy, które są przypisane do kolumny tabeli. Wymuszają one przechowywanie poprawnych danych i uniemożliwiają użytkownikom przechowywanie nieistotnych informacji. Istnieją dwa poziomy ograniczeń:
  • ograniczenia na poziomie kolumny;
  • ograniczenia na poziomie tabeli.

Napisz SQL, który znajdzie imiona pracowników zaczynające się od litery ‘P’.
SELECT * FROM Employess WHERE EmpName like ‘A%’

Napisz SQL, który zwróci pracownika o 3-ciej najwyższej pensji.
SELECT TOP 1 salary   
FROM (  
SELECT TOP 3 salary  
FROM employee_table  
ORDER BY salary DESC ) AS emp  
ORDER BY salary ASC;   

Jaka jest różnica pomiędzy DELETE a TRUNCATE?
DELETE:
  • DELETE jest poleceniem DML;
  • W poleceniu DELETE możemy użyć WHERE;
  • DELETE jest używane do usunięcia wiersza z tabeli;
  • DELETE jest poleceniem wolniejszym niż TRUNCATE;
  • Po użyciu polecenia DELETE możemy przywrócić date (ROLLBACK).
TRUNCATE:
  • TRUNCATE jest poleceniem DDL;
  • wraz z poleceniem TRUNCATE nie może zostać użyta klauzula WHERE
  • instrukcja TRUNCATE służy do usunięcia wszystkich wierszy z tabeli;
  • instrukcja TRUNCATE jest szybsza niż DELETE;
  • Po użyciu polecenia TRUNCATE nie ma możliwości przywrócenia danych.

Czym jest właściwość ACID w bazie danych?
Właściwość ACID stwierdza, że transakcje w bazie danych są przetwarzanie prawidłowo. Transakcją nazywamy pojedynczą logiczną operację.

ACID jest skrótem od Atomicity, Consistency, Isolation, Durability.

Niepodzielność: transakcje traktowane są zgodnie ze stwierdzeniem: ‘wszystko albo nic’. Oznacza to, iż jeżeli jedna cześć transakcji się nie powiedzie to cała transakcja zakończy się niepowodzeniem a stan bazy danych nie zostanie zmieniony.

Spójność: wszystkie dane muszą spełniać warunki walidacji danych. Oznacza to, że po wykonaniu transkacji dane w bazie danych pozostaną spójne, nie zostaną naruszone zasady integralności.

Izolacja: oznacza, że dwie transakcje wykonują się współbieżnie – nie widzą zmian wprowadzanych przez siebie. Konfiguracja bazy danych pozwala na kontrolę nad poziomami izolacji, które określają jakich anomalii możemy się spodziewać po wykonaniu transakcji:
  • read uncommitted: jedna transakcja może odczytywać wiersze, na których wykonują się inne transkacje – jest to najniższy poziom izolacji;
  • read comitted: tylko wiersze zapisane mogą zostać odczytane;
  • repeatable read: transakcja nie może odczytywać ani zapisywać zmian na wierszach, które są odczytywane lub zapisywane w innej transakcji;
  • serializable: wynik współbieżnie realizowanych transakcji muszę być identyczne z wynikami tych samych zapytań realizowanych szeregowo – jest to pełna izolacja.
Trwałość: zapewnia, iż system po nagłych awariach (np. utrata prądu) jest w stanie uruchomić się i udostępnić spójne, aktualne i nienaruszone dane, które zostały zatwierdzone w ramach transkacji.

Jaka jest różnica pomiędzy NULL, zerem a wartością pustą?
Wartość NULL nie jest tym samym co zero lub puste pole. NULL to wartość, która jest: “niedostępna, nieprzypisana, nieznana lub ‘nie dotyczy’”. Z drugiej strony zero to liczba a puste miejsce jest traktowane jako znak.
Wartość NULL może być traktowana jako nieznana lub brakująca ale zero i puste miejsce są różne od wartości NULL.

Podaj przykłady użycia funkcji w SQL.
Funkcje nie pozwalają na wprowadzenie trwałych zmian w środowisku na serwerze SQL. Używamy ich do następujących celów:
  • aby wykonać obliczenia na danych;
  • aby zmodyfikować poszczególne elementy danych;
  • aby manipulować rezultatem;
  • aby odpowiednio sformatować daty i liczby;
  • aby przekonwertować typy danych

Co rozumiesz pod pojęciem funkcji manipulacji?
Funkcje te pozwalają na zmianę danych ze stanu w którym są przechowywane/zwracane na postać zapisaną dużymi, małymi lub mieszanymi literami.

Funkcje te mogą być używane w prawie każdej części instrukcji SQL.

Funkcje te są najczęściej używane, gdy należy wyszukać jakieś dane a użytkownik nie ma pojęcia, że dane te zapisane są małymi lub dużymi literami w naszej bazie danych.

Jakie znasz różne funkcje manipulacji w SQL?
Poniżej trzy funkcje manipulacji znakami:
  • LOWER: konwertuje znaki na małe litery;
  • UPPER: konwertuje znaki na duże litery;
  • INITCAP: konwertuje pierwsze znaki każdego kolejnego wyrazu na duże litery.

Co robią funkcje manipulacji ciągami znaków?
Funkcje manipulacji ciągami znaków służą do zmiany, wyodrębnienia lub usunięcia konkretych znaków.

Jeden lub więcej niż jeden znak powienien zostać przekazany do funkcji, aby mogło dojść do wykonania żądanej operacji.

Jakie znasz różne typy funkcji manipulacji znakami?
  • CONCAT: łącznie dwóch lub większej ilości wartości;
  • SUBSTR: wyodrębnianie ciągu o określonej długości;
  • LENGTH: zwracanie długości łańcucha znaków;
  • INSTR: zwrócenie dokładnej pozycji danego znaku;
  • LPAD: dopełnienie łańcucha znaków określonym ciągiem znaków od lewej strony;
  • RPAD: dopełnienie łańcucha znaków określonym ciągiem znaków od prawej strony;
  • TRIM: usunięcie zdefiniowanych znaków od początku, od końca lub od początku i końca łańcucha znaków;
  • REPLACE: zamiana określonej sekwencji znaków na inną sekwencję znaków.

Jaki jest przykład użycia funkcji NVL()?

Funkcja NVL() służy do konwersji wartości NULL na inną wartość. Jest ona używana przez Oracle, funkcja nie istnieje w SQL i MySQL.

Zamiast funkcji NVL() w MySQL możemy znaleźć IFNULL(). Z kolei w SQL Server mamy do dyspozycji funkcję ISNULL().


Jaka funkcja służy do zwracania reszty z dzielenia w SQL?
Do zwrócenia reszty z dzielenia możemy użyć funkcji MOD.

Do czego służy i jakie jest użycie funkcji COALESCE?
Funkcja COALESCE służy do zwrócenia pierwszego niepustego wyrażenia podanego na liście parametrów. Składnia wygląda następująco:
COALESCE(par1, par2, .... parn)  

Jakie jest użycie słowa kluczowego DISTINCT?
Słowo kluczowe DISTINCT pozwala na upewnienie się, że pobrana wartość jest unikalna (niezduplikowana). Słowo kluczowe DISTINCT używamy w następujący sposób: SELECT DISTINCT - pobieramy unikalną wartość z kolumny tabeli.