yoklateknik mülakat

Veritabanı Pg Types Constraints Mülakat Soruları

75 doğrulanmış Veritabanı Pg Types Constraints mülakat sorusu — cevaplarıyla çöz, açıklamalarıyla öğren, gerçek simülasyonda kendini test et.

Gerçek simülasyonu dene →

Örnek sorular

Pg Types ConstraintsZorluk 2
CREATE TABLE t (c1 char(10), c2 varchar(10));
INSERT INTO t VALUES ('abc', 'abc');
SELECT length(c1), length(c2) FROM t;

Bu sorgu ne döner?
  • a3 ve 3 — length() char(n)'in sondaki dolgu boşluklarını yok sayar
  • b10 ve 3 — char(n) her zaman tanımlı genişliğini raporlar
  • c10 ve 10 — iki sütun da tanımlı genişliğini raporlar
  • d3 ve 10 — varchar(n) tanımlı genişliğini raporlar, char(n) raporlamaz
Açıklama:char(n), depolanan değeri n uzunluğuna kadar sondan boşlukla doldurur; ama length() (çoğu string fonksiyonu gibi) sondaki dolgu boşluklarını anlamsız sayıp saymadan önce siler. Bu yüzden c1 fiziksel olarak 10 byte'a doldurulmuş olsa da length() her ikisi için de 3 döner.
Pg Types ConstraintsZorluk 3
CREATE TABLE t (c1 char(10), c3 text);
INSERT INTO t VALUES ('abc', 'abc');
SELECT octet_length(c1), octet_length(c3) FROM t;

Bu sorgu ne döner?
  • a3 ve 3 — octet_length de char(n) dolgusunu siler
  • b10 ve 3 — octet_length char(n)'in gerçek dolgulu depolamasını gösterir
  • c10 ve 10 — ikisi de aynı fiziksel boyuta doldurulmuştur
  • d3 ve 10 — text doldurulur, char(n) doldurulmaz
Açıklama:length()'in aksine octet_length(), sondaki dolgu boşluklarını silmeden depolanan gerçek byte boyutunu raporlar. Bu yüzden c1 (char(10) içinde 'abc') 10 byte fiziksel depolama gösterirken c3 (text içinde 'abc') 3 gösterir — char(n)'in dolgusunun gerçek olduğunu, length()'in bunu gizlediğini doğrular.
Pg Types ConstraintsZorluk 1
CREATE TABLE t (id int, email text);
INSERT INTO t VALUES (1, NULL), (2, NULL), (3, '[email protected]');
SELECT DISTINCT email FROM t;

Bu sorgu kaç satır döner?
  • a3 satır — NULL hiçbir zaman NULL'a eşit sayılmadığı için DISTINCT NULL satırlarını hiç elemez
  • b1 satır — DISTINCT NULL olmayan değer dahil her şeyi tek satıra indirger
  • c2 satır — DISTINCT tüm NULL'ları tek bir grup sayar, artı '[email protected]' için bir satır
  • dHata — DISTINCT, NULL olabilen bir sütuna uygulanamaz
Açıklama:Normal karşılaştırma semantiğinde NULL = NULL NULL döner olsa da, DISTINCT (GROUP BY ve UNIQUE gibi) tüm NULL'ları tek bir grup sayan özel bir "birbirinden ayırt edilemez" gruplama kuralı kullanır. Bu yüzden iki NULL email tek bir çıktı satırına iner, '[email protected]' için olan satırla birlikte — toplam 2 satır.
Pg Types ConstraintsZorluk 1
CREATE TABLE t (id int, score int);
INSERT INTO t VALUES (1,30),(2,NULL),(3,10),(4,NULL);
SELECT id, score FROM t ORDER BY score ASC;

NULLS FIRST/LAST belirtilmemişken NULL satırlar çıktıda nerede görünür?
  • aHerhangi bir NULL olmayan değerden önce, çünkü PostgreSQL NULL'ı her zaman mümkün olan en küçük değer olarak sıralar
  • bTüm NULL olmayan değerlerden sonra, çünkü PostgreSQL'in artan sıralama için varsayılanı NULLS LAST'tir
  • cOrijinal ekleme sırasında, NULL olmayan satırlarla iç içe
  • dSorgu başarısız olur, çünkü ORDER BY NULL içeren bir sütunu sıralayamaz
Açıklama:PostgreSQL'in varsayılan NULL sıralaması sıralama yönüne bağlıdır: artan sıralama varsayılan olarak NULLS LAST, azalan sıralama ise varsayılan olarak NULLS FIRST kullanır. Bu yüzden ORDER BY score ASC önce 10, 30'u, sonra iki NULL'ı döner — bu birçok mühendisin varsaydığının (NULL'ın her zaman en düşük değer gibi sıralandığının) tam tersidir.
Pg Types ConstraintsZorluk 1
CREATE TABLE t (id int, score int);
INSERT INTO t VALUES (1,30),(2,NULL),(3,10),(4,NULL);
SELECT count(*) AS cnt_star, count(score) AS cnt_col FROM t;

Bu sorgu ne döner?
  • acnt_star = 2, cnt_col = 2 — ikisi de yalnızca score'un NULL olmadığı satırları sayar
  • bcnt_star = 4, cnt_col = 4 — ikisi de NULL'lardan bağımsız her satırı sayar
  • ccnt_star = 4, cnt_col = 2 — count(*) satırları sayar, count(sütun) NULL'ları atlar
  • dcnt_star = 2, cnt_col = 4 — count(*) yalnızca hiç NULL sütunu olmayan satırları sayar
Açıklama:count(*), herhangi bir sütunun içeriğinden bağımsız olarak satırların kendisini sayar, bu yüzden bu tablo için 4 döner. count(score) ise, belirli bir sütuna uygulanan diğer her aggregate gibi, o sütundaki NULL değerleri yok sayar — yalnızca score'u NULL olmayan 2 satır sayılır.
Pg Types ConstraintsZorluk 2
CREATE TABLE t (id int, email text UNIQUE);
INSERT INTO t VALUES (1, NULL);
INSERT INTO t VALUES (2, NULL);

İkinci INSERT'te ne olur?
  • aemail zaten NULL bir satıra sahip olduğu için unique constraint ihlaliyle başarısız olur
  • bPostgreSQL'de UNIQUE, NOT NULL'ı da kapsadığı için başarısız olur
  • cBaşarılı olur, ama PostgreSQL ikinci NULL'ı sessizce boş string'e çevirir
  • dBaşarılı olur, çünkü UNIQUE constraint her NULL'ı diğer NULL'lardan ayrı sayar
Açıklama:PostgreSQL'in UNIQUE constraint'i benzersizlik açısından NULL'ı karşılaştırılabilir bir değer saymaz — her NULL diğer tüm NULL'lardan ayrı kabul edilir, bu yüzden UNIQUE bir sütun çakışma olmadan istediği kadar NULL satır barındırabilir.

2475 soruluk Veritabanı bankasında kendini sına.

Mülakata başla