こんにちは友人!この記事では、我々は面接で最も一般的な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問をまとめましたので、ご覧ください。 あなたはこれらの問題を解くと、それぞれの答えに移動するリンクをクリックして試すことができます。
- あるテーブルに存在するが、別のテーブルにはないレコードをフェッチするSQLクエリ
- どのプロジェクトで働いていないすべての従業員を取得するSQLクエリ。
- EmployeeSalaryに給与記録を持つEmployeeDetailsからすべての従業員を取得します。
- 従業員のプロジェクト単位の数を取得するSQLクエリを記述します。
- 従業員の給与値が存在しない場合でも、従業員の名前と給与を取得します。
- EmployeeDetailsから重複するレコードを取得するSQLクエリを記述します。
- テーブルから奇数の行のみを取得するSQLクエリを記述します。
- トップまたは制限キーワードなしでテーブルから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;
いくつかのクエリと一緒に自己結合について詳しく学ぶには、以下のビデオで自己結合コンセプトを非常に簡単に説明することができます。