Job Interview Questions SQL 2



1. **What is Normalization in a Database?**  
   Normalization is the process of organizing a database to minimize redundancy and improve data integrity by dividing data into related tables and establishing relationships between them.  
   **正規化とは、冗長性を最小限に抑え、データの整合性を向上させるために、データを関連するテーブルに分割し、テーブル間の関係を確立するプロセスです。**  
   **例:** 
   - In a database for a school, instead of having all student information in one table (including courses), you could normalize it by creating separate tables: one for students, one for courses, and one for enrollments.
   - 学校のデータベースでは、すべての学生情報とコース情報を1つのテーブルに保存する代わりに、学生用のテーブル、コース用のテーブル、および履修用のテーブルを作成します。
   ```sql
   CREATE TABLE Students (
       StudentID INT PRIMARY KEY,
       Name VARCHAR(100)
   );

   CREATE TABLE Courses (
       CourseID INT PRIMARY KEY,
       CourseName VARCHAR(100)
   );

   CREATE TABLE Enrollments (
       EnrollmentID INT PRIMARY KEY,
       StudentID INT,
       CourseID INT,
       FOREIGN KEY (StudentID) REFERENCES Students(StudentID),
       FOREIGN KEY (CourseID) REFERENCES Courses(CourseID)
   );
   ```

2. **What is the primary use of Normalization?**  
   The primary use of normalization is to eliminate data redundancy and ensure that data dependencies are properly enforced, which helps maintain the integrity and accuracy of the data.  
   **正規化の主な用途は、データの冗長性を排除し、データ依存関係が適切に維持されることを保証することで、データの整合性と正確性を保つことです。**  
   **例:** 
   - In the earlier school database, normalization helps avoid storing a student’s name multiple times in different records for each course they enroll in, ensuring data consistency.
   - 前述の学校のデータベースの例では、正規化により、学生の名前が複数の履修記録に重複して保存されることがなくなり、データの整合性が保たれます。

3. **What are the disadvantages of not performing database Normalization?**  
   Not performing normalization can lead to data redundancy, inconsistent data, increased storage costs, and difficulties in maintaining and updating the database.  
   **正規化を行わない場合、データの冗長性、不整合なデータ、ストレージコストの増加、データベースの保守や更新の難しさが生じる可能性があります。**  
   **例:** 
   - If you store all information in one table, like in a single `StudentCourses` table, and a student's information changes, you would have to update multiple rows, increasing the chances of inconsistencies.
   - すべての情報を1つのテーブルに保存すると、例えば `StudentCourses` テーブルに、学生の情報が変更された場合に複数の行を更新する必要があり、データの不整合が発生しやすくなります。
   ```sql
   CREATE TABLE StudentCourses (
       StudentID INT,
       StudentName VARCHAR(100),
       CourseID INT,
       CourseName VARCHAR(100)
   );
   ```

4. **What is a view in SQL?**  
   A view is a virtual table created by a query on one or more tables, which can simplify complex queries and provide a level of security by restricting access to certain data.  
   **ビューとは、1つ以上のテーブルに対するクエリによって作成された仮想テーブルであり、複雑なクエリを簡素化し、特定のデータへのアクセスを制限することでセキュリティを提供します。**  
   **例:** 
   - You can create a view to show only student names and course names.
   - 学生の名前とコース名のみを表示するビューを作成することで、複雑なクエリを簡単にし、特定のデータへのアクセスを制限できます。
   ```sql
   CREATE VIEW StudentCoursesView AS
   SELECT Students.Name, Courses.CourseName
   FROM Students
   JOIN Enrollments ON Students.StudentID = Enrollments.StudentID
   JOIN Courses ON Enrollments.CourseID = Courses.CourseID;
   ```

5. **What is an Index in SQL?**  
   An index is a database object that improves the speed of data retrieval operations on a table by creating a data structure that allows for quicker access to rows.  
   **インデックスは、テーブル上のデータ取得操作の速度を向上させるためのデータベースオブジェクトであり、行への迅速なアクセスを可能にするデータ構造を作成します。**  
   **例:** 
   - You can create an index on the `StudentID` column to speed up queries that search for students by their ID.
   - `StudentID` 列にインデックスを作成することで、IDで学生を検索するクエリの速度を向上させることができます。
   ```sql
   CREATE INDEX idx_student_id ON Students(StudentID);
   ```

6. **What are the different types of indexes in SQL?**  
   The different types of indexes in SQL include:
   - **Unique Index:** Ensures all values in the indexed column are distinct.
   - **Clustered Index:** Sorts and stores the data rows in the table based on the index key.
   - **Non-Clustered Index:** Creates a separate structure to store the index, which points to the data rows.
   - **Full-Text Index:** Used for searching text data within large columns.  
   **SQLのインデックスの主な種類は以下の通りです：**
   - **ユニークインデックス:** インデックス列内のすべての値が一意であることを保証します。
   - **クラスターインデックス:** インデックスキーに基づいてテーブル内のデータ行をソートおよび保存します。
   - **ノンクラスターインデックス:** データ行へのポインタを持つインデックスを別の構造として作成します。
   - **フルテキストインデックス:** 大きな列内のテキストデータを検索するために使用されます。  
   **例:** 
   ```sql
   -- Unique Index
   CREATE UNIQUE INDEX idx_unique_student ON Students(Name);
   
   -- Clustered Index (default on primary key)
   CREATE TABLE Courses (
       CourseID INT PRIMARY KEY, -- クラスターインデックス
       CourseName VARCHAR(100)
   );
   
   -- Non-Clustered Index
   CREATE NONCLUSTERED INDEX idx_course_name ON Courses(CourseName);
   
   -- Full-Text Index (specific to certain SQL databases)
   CREATE FULLTEXT INDEX ON Courses(CourseName);
   ```

7. **What is the unique index?**  
   A unique index ensures that all values in the indexed column are unique, preventing duplicate entries in that column.  
   **ユニークインデックスは、インデックス列内のすべての値が一意であることを保証し、その列に重複したエントリを防ぎます。**  
   **例:** 
   ```sql
   CREATE UNIQUE INDEX idx_unique_email ON Students(Email);
   ```

8. **What is clustered index in SQL?**  
   A clustered index determines the physical order of data in a table. Each table can have only one clustered index, which directly affects how data is stored and retrieved.  
   **クラスターインデックスは、テーブル内のデータの物理的な順序を決定します。各テーブルには1つのクラスターインデックスしか持つことができず、データの保存と取得に直接影響します。**  
   **例:** 
   - When you create a primary key on the `StudentID`, it automatically creates a clustered index.
   - `StudentID` 列にプライマリキーを作成すると、自動的にクラスターインデックスが作成され、データの物理的な順序が決まります。
   ```sql
   CREATE TABLE Students (
       StudentID INT PRIMARY KEY, -- クラスターインデックス
       Name VARCHAR(100)
   );
   ```

9. **Is it possible to sort a column using a column alias?**  
   Yes, you can sort a column using its alias in the ORDER BY clause of a query.  
   **はい、クエリのORDER BY句で列のエイリアスを使用してソートすることができます。**  
   **例:** 
   ```sql
   SELECT Name AS StudentName
   FROM Students
   ORDER BY StudentName;
   ```

10. **What is the SQL query to display the current date?**  
    The SQL query to display the current date varies by database, but a common example is:

  
    **現在の日付を表示するためのSQLクエリはデータベースによって異なりますが、一般的な例は以下の通りです：**  
    ```sql
    SELECT CURRENT_DATE;  -- MySQL, PostgreSQL
    SELECT GETDATE();     -- SQL Server
    SELECT SYSDATE FROM dual; -- Oracle
    ```  
    - In MySQL or PostgreSQL, you would use `CURRENT_DATE`, while in SQL Server, you can use `GETDATE()`. Oracle uses `SYSDATE`.  
    - MySQLやPostgreSQLでは `CURRENT_DATE` を使用し、SQL Serverでは `GETDATE()` を使用します。Oracleでは `SYSDATE` を使用します。


## 参考

https://www.javatpoint.com/sql-interview-questions