Facebook Twitter WhatsApp LinkedIn Pinterest

こんにちは友人!この記事では、我々は面接で最も一般的なSQLクエリをいくつか見てみましょう。 これらのSQLクエリのインタビューの質問と回答は、新入生と経験者の両方のために設計されています。
In fact, I have been most of these questions during interviews in the different phases of my career.

If you want to skip the basic questions and start with some tricky SQL queries then you can directly move to our SQL queries interview questions for the experienced section.基本的な質問をスキップして、トリッキーなSQLクエリから始めたい場合は、経験者のセクションのSQLクエリのインタビューの質問に移動することができます。

ここで尋ねられた質問に対するクエリを作成しようとしている間、参考のために以下の2つのテーブルを考えてみてください。

Table – EmployeeDetails

EmpId FullName ManagerId DateOfJoining City
121 John Snow 321 2014/01/31 トロント
321 Walter White 986 01/30/2015 カリフォルニア
421 Kuldeep Rana 876 27/11/2016 New Delhi

Table – EmployeeSalary

EmpId Project Salary Variable
121 P1 8000 500
321 P2 10000 1000
421 P1 12000 0

便宜上、ご紹介します。 上位10問をまとめましたので、ご覧ください。 あなたはこれらの問題を解くと、それぞれの答えに移動するリンクをクリックして試すことができます。

  1. あるテーブルに存在するが、別のテーブルにはないレコードをフェッチするSQLクエリ
  2. どのプロジェクトで働いていないすべての従業員を取得するSQLクエリ。
  3. EmployeeSalaryに給与記録を持つEmployeeDetailsからすべての従業員を取得します。
  4. 従業員のプロジェクト単位の数を取得するSQLクエリを記述します。
  5. 従業員の給与値が存在しない場合でも、従業員の名前と給与を取得します。
  6. EmployeeDetailsから重複するレコードを取得するSQLクエリを記述します。
  7. テーブルから奇数の行のみを取得するSQLクエリを記述します。
  8. トップまたは制限キーワードなしでテーブルから3番目に高い給与を検索するクエリを記述します。

また、新人と経験豊富なプロのためのインタビューの質問に関する私たちの以下の2つのセクションにジャンプすることができます。

内容

新人のためのSQLクエリのインタビューの質問

ここでは、新人の候補者が面接で役立つトップSQLクエリのインタビューの質問と回答のリストが表示されます。 これらのクエリでは、我々は唯一の基本的なSQLコマンドに焦点を当てます。

Ques.1. ID – ‘986’.
Ans とマネージャの下で働いているすべての従業員の EmpId と FullName をフェッチする SQL クエリを記述します。 我々は、マネージャの where 節で従業員の詳細をフェッチする EmployeeDetails テーブルを使用できます –

SELECT EmpId, FullNameFROM EmployeeDetailsWHERE ManagerId = 986;

Ques.2.EmployeeSalaryテーブルから利用可能なさまざまなプロジェクトをフェッチするSQLクエリを記述します。
回答。 EmployeeSalaryテーブルを参照しながら、我々はこのテーブルが各従業員に対応するプロジェクト値が含まれていることがわかります、または我々はこのテーブルからプロジェクト値を選択すると、重複したプロジェクト値を持っていると言うことができる。
そこで、我々はプロジェクトの一意の値を取得するためにdistinct句を使用します。

SELECT DISTINCT(Project)FROM EmployeeSalary;

Ques.3 プロジェクト ‘P1’ で働く従業員の数を取得するSQLクエリを記述します。
Ans.Here, we would be using aggregate function count() with the SQL where clause-

SELECT COUNT(*) FROM EmployeeSalary WHERE Project = 'P1';

Ques.4従業員の給与の最大値、最小値、平均値を求めるSQLクエリを作成します。
Ans. SQLの集約関数を使用して、最大値、最小値、平均値を取得することができます。給与が9000と15000.
Ansの範囲にある従業員IDを見つけるためにSQLクエリを記述します。 ここでは、Where句で’Between’演算子を使用することができます。

SELECT EmpId, SalaryFROM EmployeeSalaryWHERE Salary BETWEEN 9000 AND 15000;

Ques.6 トロントに住んでいるとマネージャID – 321のマネージャーの下で働いてそれらの社員を取得するには、SQLクエリを記述します。我々は両方の条件 – トロントに住んでいるとプロジェクト ‘P2’ で働く社員、を満たす必要があるので、。 だから、我々はここでAND演算子を使用します-

SELECT EmpId, City, ManagerIdFROM EmployeeDetailsWHERE City='Toronto' AND ManagerId='321';

Ques.7. SQLクエリを書いて、いずれかのカリフォルニアに住んでいるか、マネージャID – 321を持つマネージャーの下で働くすべての従業員を取得します。 このインタビューの質問は私たちが条件のいずれかを満たすために必要 – カリフォルニアに住んでいるとマネージャID “321 “を持つマネージャーの下で働いて従業員。 だから、我々はここでOR演算子を使用します-

SELECT EmpId, City, ManagerIdFROM EmployeeDetailsWHERE City='California' OR ManagerId='321';

Ques.8P1.
Ans 以外のプロジェクトで働くすべての従業員を取得する SQL クエリを記述します。 ここでは、指定された条件を満たしていない行を取得するために NOT 演算子を使用できます。

SELECT EmpIdFROM EmployeeSalaryWHERE NOT Project='P1';

または not equal to 演算子を使用する-

SELECT EmpIdFROM EmployeeSalaryWHERE Project <> 'P1';

NOT 演算子と <> SQL演算子の違いについては、このリンク – NOT演算子と!=演算子の違い

Ques.9 を参照してください。各従業員の給与に変数値
Ansを加算した給与総額を表示するSQLクエリを作成します。 ここでは、SQLの「+」演算子を使用するだけです。名前が任意の2つの文字で始まり、テキスト “hn “が続き、任意の文字のシーケンスで終わる従業員をフェッチするSQLクエリを記述します。
Ans. この質問については、我々は、’_’と ‘%’ワイルドカード文字を持つ演算子のように使用してSQLクエリが作成できます、ここで ‘_’は1文字と ‘%’ マッチは ‘0 または複数の文字’ です。従業員詳細」と「従業員給与」テーブルのいずれかに存在するすべてのEmpIdsをフェッチするSQLクエリを記述します。
Ans. 両方のテーブルから一意の従業員IDを取得するために、我々は2つのSQLクエリの結果を結合し、一意の行を返すことができますユニオン句を使用することができます。SQL Server – INTERSECT演算子を使用する-

SELECT * FROM EmployeeSalaryINTERSECTSELECT * FROM ManagerSalary;

MySQL – MySQLはINTERSECT演算子を持っていないので、我々はサブクエリ-

SELECT *FROM EmployeeSalaryWHERE EmpId IN (SELECT EmpId from ManagerSalary);

Ques.13を使用することができます。SQL Server – MINUS-演算子を使用する-

SELECT * FROM EmployeeSalaryMINUSSELECT * FROM ManagerSalary;

MySQL – MySQLはMINUS演算子を持っていないので、LEFT結合を使用できます-

SELECT EmployeeSalary.*FROM EmployeeSalaryLEFT JOINManagerSalary USING (EmpId)WHERE ManagerSalary.EmpId IS NULL;

Ques.14EmployeeDetails’ と ‘EmployeeSalary.
Ans’ の両方のテーブルに存在する EmpIds をフェッチする SQL クエリを記述します。 サブクエリ-

SELECT EmpId FROM EmployeeDetails where EmpId IN (SELECT EmpId FROM EmployeeSalary);

Ques.15 に存在するが EmployeeSalary.
Ans’ にない EmpId をフェッチする SQL クエリを記述します。 サブルーチャ-

SELECT EmpId FROM EmployeeDetails where EmpId Not IN (SELECT EmpId FROM EmployeeSalary);

Ques.16 に存在する EmpId をフェッチする SQL を記述します。従業員のフルネームを取得し、スペースを’-‘に置き換えるSQLクエリを記述します。 Replace’関数を使用して-

SELECT REPLACE(FullName, ' ', '-') FROM EmployeeDetails;

Ques.17. フィールド内の与えられた文字の位置を取得するSQLクエリを記述する
Ans.Instr’関数を使用して-

SELECT INSTR(FullName, 'Snow')FROM EmployeeDetails;

Ques.18EmpIdとManagerIdの両方を一緒に表示するSQLクエリを記述します。ここでは、CONCATコマンドを使用します。

SELECT CONCAT(EmpId, ManagerId) as NewIdFROM EmployeeDetails;

Ques.19. EmployeeDetailsテーブルのFullName列から最初の名前(スペース前の文字列)だけを取得するクエリを記述します。
Ans この問題では、まずFullNameフィールド内のスペース文字がどこにあるかを取得し、FullNameフィールドから最初の名前の抽出が要求されます。
MySQL では LOCATE メソッドを、SQL SERVER では CHARINDEX を使用し、スペースの前の文字列を取得するために SUBSTRING OR MID メソッドを使用します。
MySQL – MID

SELECT MID(FullName, 1, LOCATE(' ',FullName)) FROM EmployeeDetails;

SQL Server – SUBSTRING

SELECT SUBSTRING(FullName, 1, CHARINDEX(' ',FullName)) FROM EmployeeDetails;

Ques.20.従業員の名前を大文字に、都市値を小文字にするSQLクエリを記述します。
Ans.我々は意図した結果を達成するためにSQL UpperとLower関数を使用することができます。

SELECT UPPER(FullName), LOWER(City) FROM EmployeeDetails;

Ques.21. FullNameフィールドにある特定の文字-‘n’の総発生回数を求めるSQLクエリを作成する
Ans. ここでは、「Length」関数を使用することができます。 我々は、文字 – ‘n’を交換した後のFullNameフィールドの長さの合計を減算することができます。

SELECT FullName, LENGTH(FullName) - LENGTH(REPLACE(FullName, 'n', ''))FROM EmployeeDetails;

Ques.22. 従業員名の先頭と末尾のスペースを削除して更新するSQLクエリを作成します。 LTRIM」と「RTRIM」関数で「更新」コマンドを使用します。

UPDATE EmployeeDetails SET FullName = LTRIM(RTRIM(FullName));

Ques.23。 どのプロジェクトでも働いていないすべての従業員を取得します。
Ans. これは、面接官は、人が一般的に使用されているかどうかを確認したい非常に基本的な面接の質問の一つです-はNULL演算子です。ここで、我々は必要な条件を満たす給与を持つ従業員のEmpIdを返すために’where’句でBETWEENを使用し、その後EmployeeDetailsテーブルから従業員のフルネームを検索するサブクエリとしてそれを使用します.

SELECT FullName FROM EmployeeDetails WHERE EmpId IN (SELECT EmpId FROM EmployeeSalary WHERE Salary BETWEEN 5000 AND 10000);

Ques.25. 現在の日付時刻を見つけるためにSQLクエリを記述します。 MySQL-

SELECT NOW();

SQL Server-

SELECT getdate();

Oracle-

SELECT SYSDATE FROM DUAL;

Ques.26。2020.
Ansに参加したEmployeeDetailsテーブルからすべての従業員の詳細をフェッチするためにSQLクエリを記述します。 日付範囲 ’01-01-2020′ AND ’31-12-2020′-

SELECT * FROM EmployeeDetailsWHERE DateOfJoining BETWEEN '2020/01/01'AND '2020/12/31';

また、我々は(mySQLのYEARを使用して)入社日から年部分を抽出することができます-

SELECT * FROM EmployeeDetails WHERE YEAR(DateOfJoining) = '2020';

Ques.27.EmployeeSalaryテーブルの給与レコードを持っているEmployeeDetailsテーブルからすべての従業員レコードをフェッチするSQLクエリを記述します。 Exists’を使用して-

SELECT * FROM EmployeeDetails EWHERE EXISTS(SELECT * FROM EmployeeSalary S WHERE E.EmpId = S.EmpId);

Ques.28. プロジェクトの数で降順に並べられた従業員のプロジェクト単位の数を取得するSQLクエリを記述します。 クエリには、まずプロジェクト単位の数を取得し、次にその数で結果を並べ替えるという2つの要件があります。
プロジェクト単位のカウントにはGROUP BY句を使用し、ソートにはproject-countの別名にORDER BY句を使用します。

SELECT Project, count(EmpId) EmpProjectCountFROM EmployeeSalaryGROUP BY ProjectORDER BY EmpProjectCount DESC;

Ques.29. 従業員の名前と給与のレコードを取得するクエリを記述します。 給与レコードが従業員のために存在しない場合でも、従業員の詳細を表示します。
Ans. これは再び面接官がちょうどSQL JOINSの基本的な知識を確認したい非常に一般的なインタビューの質問の1つです。
ここで、我々はEmployeeSalaryテーブルの左側にEmployeeDetailテーブルと左結合を使用することができます。

SELECT E.FullName, S.Salary FROM EmployeeDetails E LEFT JOIN EmployeeSalary SON E.EmpId = S.EmpId;

Ques.30. 3つのテーブルを結合するSQLクエリを書いてください。
Ans. 3つのテーブルTableA、TableB、TableCを考えると、以下のように2つの結合句を使用できます-

SELECT column1, column2FROM TableAJOIN TableB ON TableA.Column3 = TableB.Column3JOIN TableC ON TableA.Column4 = TableC.Column4;

SQL結合に関する他の質問については、当社のトップSQL結合インタビューの質問も参照してくださいすることができます。

SQL Query Interview Questions for Experienced

ここに、経験者向けのSQLクエリのインタビュー質問の中で最も頻繁に尋ねられるもののリストがあります。 これらの質問は、高度なSQL JOINの概念に関するSQLクエリ、重複行のフェッチ、奇数と偶数行、n番目の最高給与などをカバーします。

Ques. 31. EmployeeDetailsテーブルからマネージャでもあるすべての従業員を取得するSQLクエリを記述します。
Ans. ここでは、要件がEmployeeDetailsテーブルを2つのテーブルとして分析することを望んでいるので、セルフジョインを使用する必要があります。 同じEmployeeDetailsテーブルに対して異なるエイリアス「E」と「M」を使用します。

SELECT DISTINCT E.FullNameFROM EmployeeDetails EINNER JOIN EmployeeDetails MON E.EmpID = M.ManagerID;

いくつかのクエリと一緒に自己結合について詳しく学ぶには、以下のビデオで自己結合コンセプトを非常に簡単に説明することができます。

Self Joinとそのデモ

Ques.32をご覧ください。. EmployeeDetailsから重複レコードを取得するSQLクエリを記述します(主キー – EmpIdを考慮しない)。
Ans. テーブルから重複レコードを見つけるために、すべてのフィールドでGROUP BYを使用し、HAVING句を使ってカウントが1より大きいフィールド、つまり重複レコードを持つ行のみを返すことができます。 一時テーブルを使用せずにテーブルから重複を削除するSQLクエリを記述します。
Ans. ここでは、エイリアスおよび内部結合で削除を使用することができます。 我々は、すべての一致するレコードの等価性をチェックし、それらは高いEmpId.

DELETE E1 FROM EmployeeDetails E1INNER JOIN EmployeeDetails E2 WHERE E1.EmpId > E2.EmpId AND E1.FullName = E2.FullName AND E1.ManagerId = E2.ManagerIdAND E1.DateOfJoining = E2.DateOfJoiningAND E1.City = E2.City;

Ques.34 を持つ行を削除します。 テーブルから奇数行のみを取得するSQLクエリを記述します。

SELECT * FROM EmployeeDetails WHERE MOD (EmpId, 2) <> 0;

そのようなフィールドを持っていない場合、我々は以下のクエリを使用することができます。
SQL serverのRow_numberを使用し、2で割った余りが1-

SELECT E.EmpId, E.Project, E.SalaryFROM ( SELECT *, Row_Number() OVER(ORDER BY EmpId) AS RowNumber FROM EmployeeSalary) EWHERE E.RowNumber % 2 = 1;

MySQLでユーザー定義変数を使用する-

SELECT *FROM ( SELECT *, @rowNumber := @rowNumber+ 1 rn FROM EmployeeSalary JOIN (SELECT @rowNumber:= 0) r ) t WHERE rn % 2 = 1;

Ques.35. テーブルから偶数行のみをフェッチするSQLクエリを記述します。 自動インクリメントのフィールド(EmpIdなど)がある場合は、単に以下のクエリを使用することができます-

SELECT * FROM EmployeeDetails WHERE MOD (EmpId, 2) = 0;

そのようなフィールドがない場合は、以下のクエリを使用できます。
SQL serverのRow_numberを使用し、2で割った余りが1-

SELECT E.EmpId, E.Project, E.SalaryFROM ( SELECT *, Row_Number() OVER(ORDER BY EmpId) AS RowNumber FROM EmployeeSalary) EWHERE E.RowNumber % 2 = 0;

MySQLのユーザー定義変数を使用する-

SELECT *FROM ( SELECT *, @rowNumber := @rowNumber+ 1 rn FROM EmployeeSalary JOIN (SELECT @rowNumber:= 0) r ) t WHERE rn % 2 = 0;

Ques.36. 別のテーブルからコピーしたデータと構造で新しいテーブルを作成する SQL クエリを作成します。
Ans.15>

CREATE TABLE NewTable SELECT * FROM EmployeeSalary;

Ques.37. いくつかの他のテーブルと同じ構造を持つ空のテーブルを作成するSQLクエリを記述します。
Ans. ここでは、上記と同じクエリに偽の「WHERE」条件-

CREATE TABLE NewTable SELECT * FROM EmployeeSalary where 1=0;

Ques.38. SQLクエリを書いて、上位nレコードをフェッチしますか?
Ans. MySQLでLIMITを使用して-

SELECT *FROM EmployeeSalaryORDER BY Salary DESC LIMIT N;

SQL serverでTOPコマンドを使用して-

SELECT TOP N *FROM EmployeeSalaryORDER BY Salary DESC;

Ques.39. テーブルからn番目に高い給与を見つけるためにSQLクエリを記述します。
Ans、Topキーワードを使用する(SQL Server)-

SELECT TOP 1 SalaryFROM ( SELECT DISTINCT TOP N Salary FROM Employee ORDER BY Salary DESC )ORDER BY Salary ASC;

Using limit clause(MySQL)-

SELECT SalaryFROM EmployeeORDER BY Salary DESC LIMIT N-1,1;

Quest.40. TOP/limitキーワードを使用せずに、テーブルから3番目に高い給与を見つけるSQLクエリを書いてください。
回答 これは最もよく聞かれる面接質問の1つです。 これには、相関サブクエリを使用します。
3番目に高い給与を見つけるために、内側のクエリが他の個別の給与よりも大きい給与を持つ2行のカウントを返すまで、給与値を見つけます。

SELECT SalaryFROM EmployeeSalary Emp1WHERE 2 = ( SELECT COUNT( DISTINCT ( Emp2.Salary ) ) FROM EmployeeSalary Emp2 WHERE Emp2.Salary > Emp1.Salary )

For nth highest salary-

SELECT SalaryFROM EmployeeSalary Emp1WHERE N-1 = ( SELECT COUNT( DISTINCT ( Emp2.Salary ) ) FROM EmployeeSalary Emp2 WHERE Emp2.Salary > Emp1.Salary )

以上でSQLクエリの面接で頻繁に尋ねられる質問と答えに関する投稿を終了します。 これらの質問があなたのデータベース面接に役立つことを願っています。

DBMS と SQL の概念に基づく理論的なインタビューの質問に焦点を当てた – データベースインタビューの質問に関する私たちの記事をチェックしてみてください。 彼は、テスト自動化、パフォーマンステスト、ビッグデータ、およびCI-CDに熟練しています。 彼は 10 年間の経験を現在の職務に生かし、QA プロフェッショナルの教育に専念しています。 あなたはLinkedIn.

Facebook Twitter WhatsApp LinkedIn Pinterest

で彼と接続することができます。

コメントを残す

メールアドレスが公開されることはありません。