Top 50 pitanja i odgovora na intervjuu za T-SQL (2026.)

Pripremate se za T-SQL intervju? Vrijeme je da poboljšate svoje razumijevanje kako baze podataka zapravo funkcioniraju ispod površine. S Pitanja za intervju za T-SQLRegruti ne procjenjuju samo poznavanje sintakse, već i vašu vještinu manipuliranja podacima, optimizacije i logičkog strukturiranja.
Mogućnosti u ovom području nastavljaju se širiti jer tvrtke ovise o uvidima temeljenim na podacima. Ističu se kandidati s jakim tehničkim znanjem, analitičkim vještinama i sposobnostima rješavanja problema iz stvarnog svijeta - bilo da su početnici ili profesionalci s 5 do 10 godina iskustva. Razumijevanje pitanja i odgovora na osnovnoj i naprednoj razini pomaže voditeljima timova, menadžerima i tehničkim stručnjacima da prepoznaju snažne SQL vještine i iskustvo na osnovnoj razini.
Naš vodič temelji se na uvidima više od 65 menadžera za zapošljavanje, više od 40 iskusnih programera i stručnjaka za podatke iz različitih industrija, osiguravajući pokrivenost od osnovne SQL logike do naprednih tehnika optimizacije kojima vjeruju tehnički lideri diljem svijeta. Čitaj više…
👉 Besplatno preuzimanje PDF-a: Pitanja i odgovori za intervju za T-SQL
Najčešća pitanja i odgovori za T-SQL intervju
1) Što je T-SQL i po čemu se razlikuje od standardnog SQL-a?
Transact-SQL (T-SQL) je Microsoftvlasničko proširenje SQL jezika, prvenstveno korišteno s Microsoft SQL ServerPoboljšava standardni SQL uvođenjem proceduralnih programskih značajki kao što su varijable, uvjeti, petlje, rukovanje pogreškama i ugrađene funkcije. Dok se standardni SQL fokusira na manipulaciju podacima (SELECT, INSERT, UPDATE, DELETE), T-SQL podržava naredbe za kontrolu toka (IF...ELSE, WHILE), rukovanje transakcijama i sistemske funkcije koje omogućuju programerima pisanje složenih skripti.
| Aspekt | SQL | T-SQL |
|---|---|---|
| Svojina | ANSI/ISO standard | Microsoft |
| Proceduralna logika | ograničen | Podržano (varijable, petlje) |
| Rješavanje pogrešaka | minimum | TRUY…CATCH podržan |
| Primarna upotreba | Generičke baze podataka | SQL Server |
Primjer:
DECLARE @count INT = 5;
WHILE @count > 0
BEGIN
PRINT @count;
SET @count -= 1;
END;
2) Objasnite različite vrste spajanja u T-SQL-u s primjerima.
Spojevi u T-SQL-u kombiniraju retke iz dvije ili više tablica na temelju povezanih stupaca. Razumijevanje njihovih tipova ključno je za relacijske upite podataka.
| Vrsta pridruživanja | Description | Primjer sintakse |
|---|---|---|
| INNER JOIN | Vraća samo odgovarajuće retke | SELECT * FROM A INNER JOIN B ON A.id = B.id; |
| LEFT JOIN | Sve s lijeva + podudaranja s desna | SELECT * FROM A LEFT JOIN B ON A.id = B.id; |
| PRAVO SE PRIDRUŽI | Sve s desna + podudaranja s lijeva | SELECT * FROM A RIGHT JOIN B ON A.id = B.id; |
| POTPUNI PRIDRUŽITE SE | Kombinira LIJEVO + DESNO | SELECT * FROM A FULL JOIN B ON A.id = B.id; |
| CROSS PRIDRUŽITE se | Kartezijanski produkt | SELECT * FROM A CROSS JOIN B; |
Praktični primjer: spajanje Orders i Customers kako biste pronašli koji su kupci izvršili narudžbe putem INNER JOIN.
3) Što su uobičajeni tablični izrazi (CTE) i koje su njihove prednosti?
Zajednički tablični izraz (CTE) pruža privremeni imenovani skup rezultata na koji se može referencirati unutar SELECT, INSERT, UPDATE, ili DELETE izjava. Poboljšava čitljivost i pojednostavljuje rekurzivne upite.
Prednosti:
- Poboljšava jasnoću i održavanje upita.
- Omogućuje rekurziju (za hijerarhijske podatke poput organizacijskih dijagrama).
- Pomaže u izbjegavanju ponovljenih podupita.
- Povećava modularnost u velikim skriptama.
Primjer:
WITH EmployeeCTE AS (
SELECT EmpID, EmpName, ManagerID
FROM Employees
)
SELECT * FROM EmployeeCTE WHERE ManagerID IS NULL;
4) Po čemu se privremene tablice i varijable tablice razlikuju u T-SQL-u?
Oba se koriste za pohranjivanje međurezultata, ali njihovo ponašanje i opseg se značajno razlikuju.
| svojstvo | Privremena tablica (#Temp) |
Varijabla tablice (@TableVar) |
|---|---|---|
| Pohranjeno u | TempDB | Memorija (s ograničenim korištenjem TempDB-a) |
| Transakcijski opseg | Prati transakcije | Neovisno o transakcijama |
| Indeksi | Podržano | ograničen |
| Izvođenje | Bolje za velike skupove podataka | Bolje za male skupove podataka |
Primjer:
DECLARE @TableVar TABLE (ID INT, Name NVARCHAR(50)); INSERT INTO @TableVar VALUES (1, 'Alice');
Koristite privremene tablice kada radite s velikim skupovima podataka ili kada su vam potrebni indeksi.
5) Objasnite koncept transakcija u T-SQL-u i njihov životni ciklus.
Transakcija u T-SQL-u osigurava da se niz operacija izvršava kao jedna logička jedinica. Životni ciklus uključuje ZAPOČNI TRANSAKCIJU, POČINITIi VRAĆANJE.
| Stadij | Description |
|---|---|
| ZAPOČNI TRANSAKCIJU | Započinje transakciju |
| IZVRŠI TRANSAKCIJU | Trajno sprema sve promjene |
| POVRATAK TRANSAKCIJE | Poništava sve operacije od zadnjeg BEGIN |
Primjer:
BEGIN TRANSACTION; UPDATE Accounts SET Balance = Balance - 100 WHERE AccID = 1; UPDATE Accounts SET Balance = Balance + 100 WHERE AccID = 2; COMMIT TRANSACTION;
Ako se greška dogodi usred procesa, ROLLBACK održava integritet podataka.
6) Koja je razlika između naredbi DELETE, TRUNCATE i DROP?
| naredba | funkcija | povrat na staro | Utječe na strukturu | Brzina |
|---|---|---|---|---|
| DELETE | Uklanja određene retke | Da | Ne | sporiji |
| SKRATITI | Uklanja sve retke | Ne (obično) | Ne | pompeznost |
| KAP | Briše cijelu tablicu | Ne | Da | najbrže |
Primjer:
DELETE FROM Employees WHERE Department = 'HR'; TRUNCATE TABLE TempData; DROP TABLE OldLogs;
Koristiti DELETE za selektivno uklanjanje, TRUNCATE za čišćenje i DROP da se stol potpuno ukloni.
7) Kako funkcionira obrada grešaka u T-SQL-u?
T-SQL pruža strukturirano rukovanje greškama putem TRY...CATCH blok, što omogućuje programerima elegantno upravljanje greškama tijekom izvođenja.
Primjer:
BEGIN TRY
INSERT INTO Employees VALUES (1, 'John');
END TRY
BEGIN CATCH
PRINT 'Error: ' + ERROR_MESSAGE();
END CATCH;
Ovaj pristup izolira neispravnu operaciju i sprječava da transakcija ošteti integritet podataka. Programeri također mogu pristupiti funkcijama sustava kao što su ERROR_NUMBER() or ERROR_SEVERITY() za dijagnostiku.
8) Koji su različiti načini optimizacije performansi T-SQL upita?
Optimizacija uključuje fino podešavanje SQL dizajna, indeksiranja i strategija izvršavanja.
Ključne tehnike:
- Koristiti pravilno indeksiranje na često upitanim stupcima.
- Izbjeći
SELECT *— eksplicitno navedite stupce. - Koristiti operacije temeljene na skupovima umjesto kursora.
- Analizirajte planove izvršenja pomoću SQL Server Management Studio.
- Koristiti Učinkovito se PRIDRUŽUJE uz odgovarajuće uvjete UKLJUČENO.
- Smanjiti ugniježđeni podupiti; preferiraju CTE-ove ili privremene tablice.
Podešavanje performansi u T-SQL-u također uključuje praćenje statistike izvršavanja upita pomoću SET STATISTICS IO ON.
9) Što su prozorske funkcije i kada ih treba koristiti?
Funkcije prozora izvode izračune u skupu redaka povezanih s trenutnim retkom, bez njihovog sažimanja u jedan rezultat. Korisne su za rangiranje, tekuće zbrojeve i pomične prosjeke.
Primjer:
SELECT
EmployeeID,
Salary,
RANK() OVER (ORDER BY Salary DESC) AS RankBySalary
FROM Employees;
Uobičajene funkcije uključuju RANK(), ROW_NUMBER(), DENSE_RANK()i SUM() OVER().
To je ključno za analitička opterećenja gdje su vam potrebni i agregirani i podaci na razini redaka.
10) Objasnite razliku između klasteriranih i neklasteriranih indeksa.
| svojstvo | Clusterizd. Kazalo | Ne-Clusterizd. Kazalo |
|---|---|---|
| Pohranu podataka | Fizički preuređuje tablicu | Odvojena struktura |
| Broj po stolu | jedan | višekratnik |
| Izvođenje | Brže za upite raspona | Brže za određene pretrage |
| Primjer upotrebe | Glavni ključ | Sekundarne pretrage |
Primjer:
CREATE CLUSTERED INDEX IX_EmployeeID ON Employees(EmployeeID); CREATE NONCLUSTERED INDEX IX_Dept ON Employees(Department);
Odabir prave vrste indeksa izravno utječe na brzinu izvršavanja upita i učinkovitost pohrane.
11) Što su pohranjene procedure u T-SQL-u i zašto se koriste?
Pohranjena procedura je prethodno kompilirana kolekcija jedne ili više SQL naredbi pohranjenih na poslužitelju. One poboljšavaju performanse, sigurnost i ponovnu upotrebu omogućujući vam enkapsulaciju logike i njezino ponovljeno izvršavanje bez ponovnog kompiliranja. Pohranjene procedure smanjuju mrežni promet i podržavaju parametre za dinamičko izvršavanje.
Primjer:
CREATE PROCEDURE GetEmployeeDetails @Dept NVARCHAR(50)
AS
BEGIN
SELECT EmpName, Position FROM Employees WHERE Department = @Dept;
END;
Prednosti:
- Bolje performanse zbog predkompilacije.
- Poboljšana sigurnost kroz kontrolirano izvršavanje.
- Lakše održavanje koda i modularizacija.
12) Objasnite razliku između pohranjene procedure i funkcije u T-SQL-u.
| Aspekt | Pohranjeni postupak | funkcija |
|---|---|---|
| Tip povrata | Može vratiti više vrijednosti | Mora vratiti jednu vrijednost ili tablicu |
| Koristi u SELECT-u | Nije dozvoljeno | dopušteno |
| Rješavanje pogrešaka | TRUY…CATCH podržan | ograničen |
| Izvršenje | Izvršeno putem EXEC |
Koristi se u liniji sa SQL-om |
| Kontrola transakcija | Podržano | Nije podržano |
Primjer:
- Postupak:
EXEC GetEmployeeDetails 'HR'; - Funkcija:
SELECT dbo.GetSalary(101);
Funkcije su idealne za izračune; procedure su bolje za poslovnu logiku i manipulaciju podacima.
13) Što je okidač u T-SQL-u i koje su njegove vrste?
Okidač je posebna pohranjena procedura koja se automatski izvršava kao odgovor na određene događaje (INSERT, UPDATE, DELETE) na tablici ili prikazu. Okidači se koriste za provođenje poslovnih pravila, reviziju promjena ili održavanje referencijalnog integriteta.
| Tip | Description |
|---|---|
| NAKON okidača | Pokreće se nakon završetka događaja |
| UMJESTO Okidač | Izvršava se umjesto okidačkog događaja |
Primjer:
CREATE TRIGGER trgAfterInsert
ON Employees
AFTER INSERT
AS
BEGIN
PRINT 'New employee record added!';
END;
Izbjegavajte prekomjernu upotrebu okidača - oni mogu utjecati na performanse i zakomplicirati otklanjanje pogrešaka.
14) Kako se u T-SQL-u obrađuju NULL vrijednosti?
NULL predstavlja nedostajuće ili nepoznate podatke. T-SQL nudi nekoliko funkcija za učinkovitu obradu:
ISNULL(expression, replacement)→ zamjenjuje NULL s zadanom vrijednošću.COALESCE(expression1, expression2, ...)→ vraća prvu vrijednost koja nije NULL.NULLIF(expression1, expression2)→ vraća NULL ako su izrazi jednaki.
Primjer:
SELECT ISNULL(Manager, 'No Manager') AS ManagerName FROM Employees;
Najbolja praksa: Uvijek uzmite u obzir NULL vrijednosti u spajanjima i uvjetima kako biste izbjegli neočekivane rezultate.
15) Što su kursori u T-SQL-u i kada ih treba izbjegavati?
Kursor omogućuje obradu rezultata upita redak po redak - korisno za složenu logiku gdje operacije temeljene na skupovima nisu dovoljne. Međutim, kursori su sporo i resursima težak u usporedbi s alternativama temeljenim na skupovima.
Primjer:
DECLARE emp_cursor CURSOR FOR SELECT EmpName FROM Employees; OPEN emp_cursor; FETCH NEXT FROM emp_cursor; -- process CLOSE emp_cursor; DEALLOCATE emp_cursor;
Nedostaci:
- Povećana upotreba memorije.
- Slaba skalabilnost.
- Smanjene performanse.
Alternativa: Koristite spajanje tablica, podupite ili prozorske funkcije kad god je to moguće.
16) Objasnite naredbu MERGE i njezine slučajeve upotrebe.
The MERGE izjava izvodi INSERT, UPDATEi DELETE operacije u jednoj naredbi - idealno za sinkronizaciju dvije tablice.
Primjer sintakse:
MERGE INTO Target AS T USING Source AS S ON T.ID = S.ID WHEN MATCHED THEN UPDATE SET T.Name = S.Name WHEN NOT MATCHED BY TARGET THEN INSERT (ID, Name) VALUES (S.ID, S.Name) WHEN NOT MATCHED BY SOURCE THEN DELETE;
Upotrijebite slučajeve:
- Skladištenje podataka (sinkronizacija pripravnih i ciljnih tablica).
- Inkrementalno učitavanje podataka.
- Održavanje revizijskih ili dimenzijskih tablica.
17) Koje su različite vrste korisnički definiranih funkcija (UDF-ova) u T-SQL-u?
| Tip | Description | Primjer |
|---|---|---|
| skalar | Vraća jednu vrijednost | CREATE FUNCTION GetTax(@Salary DECIMAL) RETURNS DECIMAL |
| Ugrađeno tablično vrednovanje | Vraća tablicu putem single-a SELECT |
RETURN SELECT * FROM Employees WHERE Dept = 'HR' |
| Višestruki iskaz s tabličnim vrijednostima | Vraća tablicu nakon više naredbi | Korisno za složenu logiku |
Funkcije potiču ponovnu upotrebu koda i poboljšavaju modularni dizajn upita.
Trebali bi biti deterministički (vratiti isti rezultat za isti ulaz) kad god je to moguće radi optimizacije performansi.
18) Što je normalizacija i koje su njezine prednosti i nedostaci?
Normalizacija je proces organiziranja podataka u bazi podataka kako bi se minimizirala redundancija i poboljšao integritet. Uključuje dijeljenje tablica na manje, povezane entitete.
| Normalna forma | Pravilo | Primjer |
|---|---|---|
| 1NF | Uklonite ponavljajuće grupe | Razdvajanje podataka odvojenih zarezima |
| 2NF | Uklonite djelomične ovisnosti | Osigurati potpunu ovisnost o primarnom ključu |
| 3NF | Uklonite tranzitivne ovisnosti | Premještanje izvedenih atributa |
Prednosti:
- Smanjuje redundanciju.
- Osigurava konzistentnost podataka.
- Pojednostavljuje održavanje.
Nedostaci:
- Složeni spojevi.
- Potencijalni kompromisi u performansama za analitičke upite.
19) Koje su različite vrste ograničenja u T-SQL-u?
Ograničenja nameću pravila o integritetu podataka unutar tablice.
| Ograničenje | Svrha | Primjer |
|---|---|---|
| OSNOVNI KLJUČ | Jedinstveno identificira svaki red | PRIMARY KEY (EmpID) |
| STRANI KLJUC | Povezuje dvije tablice | FOREIGN KEY (DeptID) |
| JEDINSTVENA | Osigurava jedinstvene vrijednosti stupaca | UNIQUE (Email) |
| PROVJERITI | Provjerava raspon podataka | CHECK (Age >= 18) |
| DEFAULT | Pruža zadane vrijednosti | DEFAULT GETDATE() |
Ograničenja osiguravaju točnost i pouzdanost, smanjujući potrebu za opsežnom validacijom na razini aplikacije.
20) Kako upravljate dozvolama i sigurnošću u T-SQL-u?
T-SQL upravlja sigurnošću baze podataka putem prijave, korisnici, uloge i dopuštenja.
Dozvole se mogu dodijeliti ili opozvati na razini objekta ili sheme.
Primjer:
CREATE LOGIN John WITH PASSWORD = 'Strong@123'; CREATE USER John FOR LOGIN John; GRANT SELECT, INSERT ON Employees TO John;
Najbolje prakse:
- Koristiti uloge umjesto izravnih korisničkih dozvola.
- Izbjegavajte upotrebu
saili sistemske račune za aplikacije. - Redovito provjeravajte dopuštenja s
sys.database_permissions.
Pravilno upravljanje dozvolama osigurava načelo najmanjih privilegija i usklađenost sa sigurnosnim politikama.
21) Koje su različite razine izolacije transakcija u T-SQL-u?
Razine izolacije transakcija određuju kako je jedna transakcija izolirana od drugih – balansiranje dosljednost sa konkurentnostSQL Server podržava sljedeće:
| Razina izolacije | Description | Prljavo štivo | Neponovljivo čitanje | Fantomsko čitanje |
|---|---|---|---|---|
| ČITAJ NEOBVEZENO | Čita nepotvrđene podatke | Da | Da | Da |
| PROČITANO POTVRĐENO | Zadano; brave sprječavaju prljavo čitanje | Ne | Da | Da |
| PONOVLJIVO ČITANJE | Sprječava promjenu podataka do potvrde (commit) | Ne | Ne | Da |
| SERIJALIZABILNO | Potpuna izolacija; najviša razina zaključavanja | Ne | Ne | Ne |
| SNIMAK | Koristi verzioniranje, ne zaključavanje | Ne | Ne | Ne |
Primjer:
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE; BEGIN TRANSACTION; -- your code COMMIT;
Koristiti SNIMAK za sustave s visokom konkurentnošću kako bi se minimiziralo blokiranje bez žrtvovanja konzistentnosti.
22) Što je zastoj u SQL Serveru i kako ga spriječiti?
A zastoj događa se kada dvije transakcije drže brave koje jedna drugoj trebaju, što rezultira zastojem. SQL Server automatski otkriva i prekida jednu transakciju kao žrtvu zastoja.
Primjer scenarija:
- Transakcija A zaključava Tablicu1, a zatim čeka Tablicu2.
- Transakcija B zaključava Tablicu2, a zatim čeka Tablicu1.
Tehnike prevencije:
- Pristupite resursima istim redoslijedom.
- Neka transakcije budu kratke.
- Koristite odgovarajuće razine izolacije.
- Izbjegavajte interakciju korisnika unutar transakcija.
Koristite SQL Profiler ili Extended Events za praćenje zastoja u stvarnom vremenu.
23) Objasnite razliku između pesimistične i optimistične kontrole konkurentnosti.
| Tip | Description | Mehanizam za zaključavanje | Koristite slučaj |
|---|---|---|---|
| Pesimističan | Zaključava podatke tijekom transakcije | Teško zaključavanje | Okruženja s visokim stupnjem konflikta |
| Optimistički | Koristi verzioniranje redaka, provjerava prije potvrde | Minimalno zaključavanje | Radna opterećenja s puno čitanja i malom količinom sukoba |
Primjer:
- Pesimistično: Zadano
READ COMMITTEDzaključavanje. - Optimističan:
SNAPSHOTizolacija s verzijama redaka.
Optimistična konkurentnost poboljšava performanse sustava s velikim brojem operacija čitanja i rijetkim ažuriranjima.
24) Kako možete analizirati i optimizirati sporo izvršavajući T-SQL upit?
- Provjerite plan izvršenja: Identificirajte skeniranja, nedostajuće indekse i skupe operacije.
- Koristite SET STATISTICS IO/TIME: Analizirajte korištenje I/O i CPU-a.
- Izbjegavajte kursore i petlje: Zamijenite operacijama temeljenim na skupovima.
- Optimizacija indeksa: Dodajte ili reorganizirajte fragmentirane indekse.
- Njuškanje parametara: Koristiti
OPTION (RECOMPILE)za stvaranje novih planova.
Primjer:
SET STATISTICS TIME ON; SELECT * FROM Orders WHERE CustomerID = 123;
Redovito praćenje sporih upita pomoću Dinamički upravljački prikazi (DMV) poput sys.dm_exec_query_stats je najbolja praksa.
25) Što je dinamički SQL i koje su njegove prednosti i rizici?
Dinamički SQL vam omogućuje dinamičko konstruiranje SQL naredbi tijekom izvođenja pomoću varijabli.
Primjer:
DECLARE @sql NVARCHAR(MAX); SET @sql = 'SELECT * FROM Employees WHERE Dept = ''' + @Dept + ''''; EXEC(@sql);
Prednosti:
- Fleksibilnost za nazive varijabilnih tablica ili filtere.
- Ponovno upotrebljivo za više shema.
Nedostaci:
- Osjetljiv na SQL Injection ako nije parametrizirano.
- Teže je otklanjati greške i održavati.
Uvijek koristite sp_executesql s parametrima za sigurnost.
26) Što su privremeni objekti u T-SQL-u i po čemu se razlikuju?
Privremeni objekti se pohranjuju u TempDB i pomoći u upravljanju međupodacima.
| Vrsta objekta | Djelokrug | Primjer |
|---|---|---|
| Lokalna privremena tablica | Specifično za sesiju | CREATE TABLE #TempTable |
| Globalna tablica temperatura | Vidljivo svim sesijama | CREATE TABLE ##TempGlobal |
| Varijabla tablice | Specifično za seriju | DECLARE @Temp TABLE (...) |
Najbolje prakse:
- Za manje skupove podataka preferirajte varijable tablice.
- Za veće podatke s potrebama indeksiranja koristite lokalne privremene tablice.
- Izričito uklonite privremene tablice kako biste brže oslobodili resurse.
27) Kako se koriste funkcije particioniranja prozora u T-SQL-u?
Particioniranje omogućuje primjenu prozorskih funkcija na specifične podskupove podataka.
Primjer:
SELECT
Department,
EmpName,
Salary,
RANK() OVER (PARTITION BY Department ORDER BY Salary DESC) AS RankInDept
FROM Employees;
Prednosti:
- Učinkovito izračunava rangiranje, ukupne rezultate i prosjeke po grupi.
- Uklanja potrebu za samospajanjima ili podupitima.
Upotrijebite slučajeve: Platni razredi, rangiranje prodaje i analiza trendova.
28) Koja je razlika između UNION i UNION ALL u T-SQL-u?
| Klauzula | Duplikati | Izvođenje | Koristite slučaj |
|---|---|---|---|
| UNIJA | Uklanja duplikate | Sporije (koristi sortiranje/razlikovanje) | Čisto kombiniranje skupova rezultata |
| SAVEZ SVE | Čuva duplikate | Brže | Agregacija ili migracija podataka |
Primjer:
SELECT City FROM Customers UNION SELECT City FROM Suppliers;
preferiraju UNION ALL kada su duplikati prihvatljivi i kada je izvedba važna.
29) Kako se radi s JSON podacima u T-SQL-u?
SQL Server podržava izvorne JSON funkcije za parsiranje i generiranje JSON podataka.
Primjer:
DECLARE @json NVARCHAR(MAX) = '{"Name":"John","Age":30}';
SELECT JSON_VALUE(@json, '$.Name') AS Name;
Ključne funkcije:
JSON_VALUE()→ Izdvaja skalarne vrijednosti.JSON_QUERY()→ Izdvaja objekte/nizove.OPENJSON()→ Raščlanjuje JSON u retke.FOR JSON→ Pretvara rezultate upita u JSON format.
Korisno za API-je, hibridne sustave i NoSQL integracije.
30) Kako možete upravljati i optimizirati TempDB u SQL Serveru?
TempDB je sistemska baza podataka ključna za privremenu pohranu i verzioniranje. Loše upravljanje može uzrokovati ozbiljne probleme s performansama.
Tehnike optimizacije:
- Postavite TempDB na brzu pohranu (SSD).
- Prethodno odredi veličinu podataka i datoteka zapisnika.
- Koristite više podatkovnih datoteka (1 po jezgri procesora, do 8).
- Monitor s
sys.dm_db_file_space_usage. - Redovito čistite privremene predmete.
Primjer upita:
SELECT * FROM sys.dm_db_file_space_usage;
Proaktivno upravljanje TempDB-om izbjegava sukob na stranicama za alokaciju i poboljšava ukupnu propusnost baze podataka.
31) Što su nagovještaji upita u T-SQL-u i kada ih treba koristiti?
Savjeti za upite upućuju optimizator SQL Servera da promijeni svoj uobičajeni plan izvršavanja.
Treba ih koristiti štedljivo - samo kada u potpunosti razumijete kontekst distribucije i izvršavanja podataka.
Primjer:
SELECT * FROM Orders WITH (NOLOCK) WHERE CustomerID = 102;
Uobičajeni savjeti:
NOLOCK:Čita bez zaključavanja (može čitati nepotvrđene podatke).FORCESEEK:Prisiljava indeksno traženje umjesto skeniranja.OPTIMIZE FOR:Vodi vrijednosti parametara za generiranje plana.RECOMPILE:Prisiljava ponovnu kompilaciju za svako izvršavanje.
Oprez: Prekomjerna upotreba savjeta može smanjiti performanse kako podaci rastu ili se obrasci mijenjaju. Koristite ih samo kada je plan optimizatora dokazivo neučinkovit.
32) Objasnite koncept keširanja plana izvršenja u SQL Serveru.
SQL Server pohranjuje planove izvršavanja u predmemoriju kako bi se izbjeglo ponovno kompiliranje za ponavljajuće upite.
Kada se isti upit ponovno izvrši s identičnom strukturom, ponovno koristi predmemorirani plan, poboljšavajući performanse.
Primjer:
EXEC GetCustomerOrders @CustomerID = 101;
Prednosti:
- Smanjuje opterećenje CPU-a.
- Poboljšava dosljednost u vremenu odziva.
Problemi:
- Njuškanje parametara može uzrokovati neučinkovite planove.
- Preopterećenje predmemorije plana može trošiti memoriju.
Smanjenje: Koristiti OPTION (RECOMPILE) or OPTIMIZE FOR UNKNOWN gdje parametri znatno variraju.
33) Što je njuškanje parametara i kako može utjecati na performanse?
Njuškanje parametara događa se kada SQL Server koristi vrijednosti parametara iz prvog izvršavanja upita za generiranje plana koji se zatim ponovno koristi - čak i ako je neoptimalan za kasnija izvršavanja.
Primjer scenarija:
- Prvo izvršenje: mali skup podataka → plan pretraživanja indeksa.
- Sljedeće izvršenje: veliki skup podataka → isti plan ponovno korišten, ali sporo.
Rješenja:
- Koristiti
OPTION (RECOMPILE)za stvaranje novih planova. - Koristite lokalne varijable za maskiranje vrijednosti parametara.
- Koristiti
OPTIMIZE FORorOPTIMIZE FOR UNKNOWN.
Njuškanje parametara jedan je od glavnih krivaca za nepredvidive performanse u T-SQL-u.
34) Kako pratite i analizirate performanse upita u SQL Serveru?
Za profiliranje i podešavanje performansi možete koristiti nekoliko alata i DMV-ova:
- Izvršni planovi:
Ctrl + Mu SSMS-u ilisys.dm_exec_query_plan. - DMV-ovi:
sys.dm_exec_query_stats– CPU i trajanje.sys.dm_exec_sql_text– SQL tekst.sys.dm_exec_requests– Aktivni upiti.
- Monitor performansi i prošireni događaji za dugoročno praćenje.
Primjer:
SELECT TOP 5
total_worker_time / execution_count AS AvgCPU,
total_elapsed_time / execution_count AS AvgTime,
SUBSTRING(qt.text, 1, 100) AS QueryText
FROM sys.dm_exec_query_stats qs
CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) qt
ORDER BY AvgTime DESC;
35) Objasnite ulogu statistike u optimizaciji upita.
Statistika opisuje distribuciju podataka (npr. različite vrijednosti, gustoću, histogram) koju optimizator koristi za procjenu kardinalnosti.
Ako su statistike zastarjele, SQL Server može odabrati loše planove.
Ključne naredbe:
UPDATE STATISTICS Employees;sp_updatestats;- Postavka automatskog ažuriranja: omogućeno prema zadanim postavkama.
Najbolje prakse:
- Zadržati
AUTO_UPDATE_STATISTICSomogućen. - Za velike tablice zakažite ručna ažuriranja.
- Koristiti
FULLSCANza kritične indekse.
Zastarjela statistika je tihi ubojica performansi.
36) Koja je razlika između pretraživanja indeksa i skeniranja indeksa?
| OperaANJE | Description | Izvođenje | Koristite slučaj |
|---|---|---|---|
| Traženje indeksa | Izravno navigira do odgovarajućih redaka | pompeznost | Visoko selektivni upiti |
| Indeksno skeniranje | Sekvencijalno čita sve unose indeksa | sporiji | Upiti niske selektivnosti |
Primjer:
SELECT * FROM Orders WHERE OrderID = 123; -- Seek SELECT * FROM Orders WHERE Status = 'Active'; -- May Scan
Savjet za optimizaciju: Stvorite filtrirane ili pokrivajuće indekse kako biste skeniranja pretvorili u pretraživanja.
37) Objasnite particionirane tablice i njihove prednosti.
Particioniranje dijeli veliku tablicu na manje, upravljive dijelove (particije), često na temelju raspona stupca (poput datuma).
Prednosti:
- Brže upravljanje podacima (učitavanje/istovar po particiji).
- Poboljšane performanse upita na velikim skupovima podataka.
- Paralelna obrada za particionirane skaniranja.
Primjer:
CREATE PARTITION FUNCTION pfRange (DATETIME)
AS RANGE LEFT FOR VALUES ('2022-12-31', '2023-12-31');
Slučaj upotrebe: Skladišta podataka koja obrađuju milijarde redaka gdje se stare particije mogu učinkovito arhivirati.
38) Što su rekurzivne CTE i koja ograničenja imaju?
A rekurzivni izraz zajedničke tablice (CTE) referencira samog sebe, obično za hijerarhijske podatke poput organizacijskih dijagrama ili struktura stabala.
Primjer:
WITH EmployeeCTE AS (
SELECT EmpID, ManagerID, EmpName FROM Employees WHERE ManagerID IS NULL
UNION ALL
SELECT e.EmpID, e.ManagerID, e.EmpName
FROM Employees e
INNER JOIN EmployeeCTE c ON e.ManagerID = c.EmpID
)
SELECT * FROM EmployeeCTE;
Ograničenja:
- Zadano ograničenje rekurzije = 100 razine.
- Može uzrokovati probleme s performansama ako je dubina rekurzije velika.
- Koristiti
OPTION (MAXRECURSION n)za podešavanje ograničenja.
39) Kako SQL Server interno obrađuje pogreške u transakcijama?
Kada se unutar transakcije dogodi greška:
- Ako jest teška (razina > 20), veza se odmah prekida.
- If neozbiljan, može se uhvatiti s
TRY...CATCH.
Primjer:
BEGIN TRY
BEGIN TRANSACTION;
UPDATE Accounts SET Balance -= 500 WHERE ID = 1;
INSERT INTO AuditLog VALUES ('Debit');
COMMIT TRANSACTION;
END TRY
BEGIN CATCH
ROLLBACK TRANSACTION;
PRINT ERROR_MESSAGE();
END CATCH;
Najbolja vježba: Uvijek omotajte DML u TRY…CATCH radi otpornosti na pogreške.
40) Koje su neke napredne tehnike podešavanja performansi T-SQL-a?
- Izbjegavajte skalarne UDF-ove u SELECT-u — inline funkcije su brže.
- Koristite filtrirane indekse kako bi se smanjila veličina indeksa.
- Iskoristite OLTP u memoriji (Hekaton) za sustave s visokom konkurentnošću.
- Izvršavanje u paketnom načinu rada na indeksima columnstorea za analitiku.
- Uklonite implicitne konverzije usklađivanjem tipova podataka.
- Koristi pohranu upita usporediti povijesne planove.
Primjer za otkrivanje implicitnih konverzija:
SELECT * FROM sys.dm_exec_query_stats CROSS APPLY sys.dm_exec_query_plan(plan_handle) WHERE CAST(query_plan AS NVARCHAR(MAX)) LIKE '%CONVERT_IMPLICIT%';
Podešavanje performansi je kontinuirani proces - ne jednokratni događaj.
41) Kako biste identificirali upite koji u SQL Serveru koriste najviše resursa?
Skupe upite možete prepoznati pomoću dinamičkih upravljačkih prikaza (DMV) koji bilježe povijesne statistike izvršavanja.
Primjer:
SELECT TOP 10
total_logical_reads / execution_count AS AvgReads,
total_worker_time / execution_count AS AvgCPU,
total_elapsed_time / execution_count AS AvgDuration,
SUBSTRING(qt.text, 1, 200) AS QueryText
FROM sys.dm_exec_query_stats qs
CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) qt
ORDER BY AvgCPU DESC;
Ključni pokazatelji:
AvgCPUProsječno vrijeme procesora po izvršavanju.AvgReadsIntenzitet ulazno/izlaznih operacija.AvgDurationLatencija izvršenja.
Ovaj pristup pomaže administratorima baza podataka da izoliraju teške upite prije nego što korisnici uopće primijete smanjenje performansi.
42) Kako možete otkriti i ispraviti nedostajuće indekse u SQL Serveru?
SQL Server automatski prati nedostajuće preporuke indeksa putem DMV-ova.
Primjer:
SELECT
migs.user_seeks AS Seeks,
mid.statement AS TableName,
mid.equality_columns,
mid.inequality_columns,
mid.included_columns
FROM sys.dm_db_missing_index_details mid
JOIN sys.dm_db_missing_index_groups mig ON mid.index_handle = mig.index_handle
JOIN sys.dm_db_missing_index_group_stats migs ON mig.index_group_handle = migs.group_handle
ORDER BY migs.user_seeks DESC;
Najbolje prakse:
- Prvo dajte prioritet indeksima s visokim pretraživanjem.
- Provjerite putem planova izvršenja prije izrade.
- Izbjegavajte prekomjerno indeksiranje - ono usporava pisanje.
43) Koja je razlika između zrcaljenja baze podataka, replikacije i slanja logova?
| svojstvo | Svrha | U stvarnom vremenu | Failover | Složenost |
|---|---|---|---|---|
| Zrcaljenje | Kopija baze podataka visoke dostupnosti | Da | Automatski | Srednji |
| odgovor | Distribucija podataka među bazama podataka | Djelomična | Priručnik | visok |
| Dostava trupaca | Strategija DR temeljena na sigurnosnim kopijama | Ne | Priručnik | Nizak |
Upute za korištenje:
- Zrcaljenje → OLTP sustavi visoke dostupnosti.
- Replikacija → Distribuirano izvještavanje.
- Dostava logova → Postavke oporavka od katastrofe.
44) Kako rješavate probleme s blokiranjem u SQL Serveru?
Do blokiranja dolazi kada jedan proces drži brave koje su potrebne drugom procesu.
Za identifikaciju blokatora:
SELECT
blocking_session_id AS Blocker,
session_id AS Blocked,
wait_type,
wait_time,
wait_resource
FROM sys.dm_exec_requests
WHERE blocking_session_id <> 0;
Rješenja:
- Smanjite duljinu transakcije.
- Koristite izolaciju snimke stanja.
- Podesite upite kako biste smanjili zaključavanje.
- Identificirajte dugotrajne otvorene transakcije pomoću
DBCC OPENTRAN.
45) Kako SQL Serverov Query Store pomaže u optimizaciji performansi?
Query Store bilježi tekst upita, planove i statistiku izvođenja — što omogućuje analiza regresije plana.
Pomaže u prepoznavanju kada upit iznenada postane spor zbog promjena plana.
Primjer:
SELECT q.query_id, p.plan_id, rs.avg_duration FROM sys.query_store_query q JOIN sys.query_store_plan p ON q.query_id = p.query_id JOIN sys.query_store_runtime_stats rs ON p.plan_id = rs.plan_id ORDER BY rs.avg_duration DESC;
Prednosti:
- Usporedite povijesne planove.
- Forsirajte dobre planove.
- Pratite trendove performansi tijekom vremena.
46) Kako možete spriječiti SQL injekciju u T-SQL aplikacijama?
Primarne obrane:
- Koristiti parametrizirani upiti preko
sp_executesql. - Validirajte i dezinficirajte sve korisničke unose.
- Izbjegavajte dinamičko SQL spajanje kodova.
- Zaposliti načelo najmanjih privilegija za račune baze podataka.
Siguran primjer:
DECLARE @sql NVARCHAR(MAX); SET @sql = N'SELECT * FROM Employees WHERE Dept = @Dept'; EXEC sp_executesql @sql, N'@Dept NVARCHAR(50)', @Dept = 'HR';
Iako je SQL injekcija na razini aplikacije, DBA-ovi moraju revidirati pohranjene procedure i logove za neparametrizirano izvršavanje.
47) Kako koristite proširene događaje za dubinsko praćenje performansi?
Prošireni događaji (XEvents) su lagani okvir za praćenje performansi - moderna alternativa SQL Traceu.
Primjer:
CREATE EVENT SESSION TrackQueries ON SERVER ADD EVENT sqlserver.sql_statement_completed (WHERE duration > 1000) ADD TARGET package0.event_file (SET filename = 'C:\Temp\QueryMonitor.xel'); ALTER EVENT SESSION TrackQueries ON SERVER STATE = START;
Upotrijebite slučajeve:
- Pratite upite s visokim opterećenjem procesora.
- Zabilježite zastoje ili nedostajuće indekse.
- Profilirajte dugotrajne naredbe u produkciji s minimalnim režijskim troškovima.
48) Što su filtrirani indeksi i kada ih treba koristiti?
Filtrirani indeks indeksira samo podskup redaka koji zadovoljavaju uvjet filtra - poboljšavajući performanse i smanjujući prostor za pohranu.
Primjer:
CREATE INDEX IX_ActiveEmployees ON Employees (Department) WHERE Status = 'Active';
Prednosti:
- Manja veličina indeksa.
- Brže održavanje.
- Optimizirano za selektivne upite.
Najbolje za: Stupci s iskrivljenom distribucijom podataka (npr. aktivni vs. neaktivni zapisi).
49) Kako sigurno migrirati podatke između SQL Server okruženja?
Sigurna migracija podataka uključuje planiranje za dosljednost, vrijeme zastoja i vraćanje na prethodno stanje.
Najbolje prakse:
- Koristiti transakcijska replikacija or prikupljanje podataka o promjenama (CDC) za sinkronizaciju uživo.
- Privremeno onemogućite ograničenja i okidače.
- Koristiti BCP or SSIS za prijenos velikih količina podataka.
- Provjerite broj redaka i kontrolne zbrojeve.
- Uvijek pokreni provjere integriteta nakon migracije (
DBCC CHECKDB).
Primjer:
bcp Database.dbo.Table out TableData.dat -n -S Server -T
Testiranje migracijskih skripti u fazi testiranja nije predmet pregovora.
50) Kako identificirate i ispravljate probleme s upitima osjetljivim na parametre (PSQ)?
Upiti osjetljivi na parametre izvode se nedosljedno na temelju vrijednosti parametara - što je čest izazov u stvarnom svijetu.
Otkrivanje: Koristiti Trgovina upita or sys.dm_exec_query_stats identificirati više planova za jedan upit.
Strategije ispravljanja:
- Koristiti OPCIJA (REKOMPAJLIRAJ) za svako izvršenje.
- Koristiti OPTIMIZIRAJ ZA NEPOZNATO za izradu generičkog plana.
- stvoriti vodiči za planove kako bi se osigurali optimalni putevi izvršenja.
- Koristiti savjeti za upite samo ako je potrebno.
Problemi osjetljivi na parametre zahtijevaju ravnotežu između stabilnosti plana i predvidljivosti performansi.
🔍 Najčešća pitanja za T-SQL intervju sa stvarnim scenarijima i strateškim odgovorima
1) Koja je razlika između INNER JOIN-a i LEFT JOIN-a u T-SQL-u?
Očekivano od kandidata: Anketar želi procijeniti vaše razumijevanje operacija spajanja i načina upravljanja odnosima podataka u SQL upitima.
Primjer odgovora: An INNER JOIN vraća samo retke koji imaju odgovarajuće vrijednosti u obje tablice, dok a LEFT JOIN vraća sve retke iz lijeve tablice, zajedno s odgovarajućim retcima iz desne tablice. Ako nema podudaranja, vraćaju se NULL vrijednosti za stupce iz desne tablice. Ova razlika je ključna pri radu s djelomičnim ili opcionalnim odnosima u bazama podataka.
2) Kako biste identificirali i uklonili duplicirane zapise iz tablice u T-SQL-u?
Očekivano od kandidata: Anketar želi vidjeti vašu sposobnost korištenja prozorskih funkcija i CTE-ova za rješavanje problema s kvalitetom podataka.
Primjer odgovora: Koristio bih Zajednički tablični izraz (CTE) u kombinaciji s ROW_NUMBER() funkcija za prepoznavanje duplikata. Na primjer:
WITH CTE AS ( SELECT *, ROW_NUMBER() OVER (PARTITION BY column1, column2 ORDER BY id) AS rn FROM MyTable ) DELETE FROM CTE WHERE rn > 1;
Ovaj pristup pomaže u uklanjanju duplikata uz zadržavanje jednog jedinstvenog zapisa za svaku grupu.
3) Možete li objasniti što je CTE (Common Table Expression) i kada biste ga koristili?
Očekivano od kandidata: Anketar provjerava vaše znanje o strukturiranju upita i privremenim skupovima rezultata.
Primjer odgovora: CTE je privremeni skup rezultata definiran unutar opsega izvršavanja jednog upita. Koristan je za pojednostavljenje složenih spajanja i podupita, poboljšanje čitljivosti i omogućavanje rekurzivnih upita. U svojoj prethodnoj ulozi često sam koristio CTE-ove za raščlanjivanje logike višekoračne agregacije na komponente koje se lakše održavaju.
4) Kako se rješava podešavanje performansi u T-SQL upitima?
Očekivano od kandidata: Anketar želi procijeniti vaše iskustvo s optimizacijom upita i rješavanjem problema s performansama.
Primjer odgovora: Počinjem ispitivanjem plana izvršenja kako bih identificirao spore operacije poput skeniranja tablica ili skupih spajanja. Zatim provjeravam nedostajuće indekse, redundantne podupite ili neučinkovita spajanja. Također analiziram statistiku i koristim strategije indeksiranja, poput pokrivanja indeksa ili filtriranih indeksa, za poboljšanje performansi. Na kraju, pregledavam logiku upita kako bih osigurao da koristi operacije temeljene na skupovima, a ne obradu redak po redak.
5) Opišite situaciju kada ste morali otkloniti greške u sporo izvršavajućem upitu u produkciji. Koje ste korake poduzeli?
Očekivano od kandidata: Ovo bihevioralno pitanje procjenjuje vaše vještine rješavanja problema i komunikacije u stvarnom svijetu.
Primjer odgovora: Na prethodnoj poziciji, izvršavanje upita izvješća trajalo je više od 20 minuta. Analizirao sam plan izvršavanja i otkrio da jednom od spajanja nedostaje indeks na stupcu stranog ključa. Nakon stvaranja indeksa i ažuriranja statistike, vrijeme izvođenja upita palo je na manje od 30 sekundi. Također sam dokumentirao ispravak i podijelio ga s timom kako bih spriječio slične probleme u budućnosti.
6) Što su privremene tablice i tablične varijable i po čemu se razlikuju?
Očekivano od kandidata: Anketar provjerava vaše razumijevanje opcija privremene pohrane podataka u T-SQL-u.
Primjer odgovora: Privremene tablice (#TempTable) se stvaraju u tempdb bazi podataka i podržavaju indekse, ograničenja i statistiku. Varijable tablice (@TableVar) pohranjuju se u memoriji i imaju ograničenu statističku podršku, što ih čini prikladnima za manje skupove podataka. Privremene tablice su bolje za velike ili složene skupove podataka, dok su tablične varijable učinkovitije za male, kratkotrajne podatke.
7) Kako biste riješili rukovanje greškama i transakcijama u T-SQL-u?
Očekivano od kandidata: Anketar provjerava vaše razumijevanje integriteta transakcija i rukovanja iznimkama.
Primjer odgovora: koristim BEGIN TRANSACTION, COMMITi ROLLBACK izjave kako bi se osigurala konzistentnost podataka. Također uključujem TRY...CATCH blokovi za elegantno rješavanje pogrešaka. Na primjer:
BEGIN TRY
BEGIN TRANSACTION
-- SQL operations here
COMMIT TRANSACTION
END TRY
BEGIN CATCH
ROLLBACK TRANSACTION
PRINT ERROR_MESSAGE()
END CATCH
Ovaj pristup sprječava djelomična ažuriranja podataka kada se pojave pogreške.
8) Kako koristite prozorske funkcije u T-SQL-u i možete li dati primjer?
Očekivano od kandidata: Anketar želi procijeniti vašu vještinu s naprednim analitičkim upitima.
Primjer odgovora: Funkcije prozora omogućuju izračune u skupovima redaka povezanih s trenutnim retkom bez sažimanja podataka. Na primjer:
SELECT EmployeeID, Salary, RANK() OVER (ORDER BY Salary DESC) AS SalaryRank FROM Employees;
Ovo dodjeljuje rang brojeve zaposlenicima na temelju plaće, što olakšava analizu trendova učinka.
9) Recite mi nešto o složenom T-SQL projektu na kojem ste radili i kako ste pristupili njegovim izazovima.
Očekivano od kandidata: Anketar traži dubinsko iskustvo, sposobnost rješavanja problema i timski rad.
Primjer odgovora: U svojoj posljednjoj ulozi, izgradio sam ETL cjevovod skladišta podataka koristeći T-SQL pohranjene procedure. Izazov je bio učinkovito rukovanje velikim količinama podataka. Optimizirao sam upite s particioniranim tablicama, inkrementalnim učitavanjima i skupnom obradom. Također sam koordinirao s BI timom kako bih osigurao dosljedan dizajn shema i poboljšao brzinu izvještavanja za više od 40%.
10) Kako biste riješili situaciju u kojoj bi pohranjena procedura koju ste napisali uzrokovala zastoj u produkciji?
Očekivano od kandidata: Anketar provjerava vaše vještine upravljanja krizama i tehničku osviještenost.
Primjer odgovora: Prvo bih identificirao zastoj koristeći SQL Server sys.dm_tran_locks i grafove zastoja. Zatim bih analizirao redoslijed pristupa resursima i refaktorirao postupak kako bih brave dobivao u dosljednom slijedu. U prethodnom sam poslu također implementirao logiku ponovnog pokušaja za pogođene transakcije i zakazao redovito praćenje kako bih rano otkrio slične obrasce.
