Interview Questions and Answers

What is SQL?

  • SQL (Structured Query Language) is a standard programming language used for managing and manipulating relational databases. It is a powerful language for working with data stored in tables, and it is widely used in a variety of applications and industries. Some common tasks that are performed using SQL include querying data from a database, inserting new records into a database, updating existing records, and deleting records from a database. SQL is a declarative language, which means that you specify what you want to achieve, and the database system figures out how to execute your request efficiently.

When SQL appeared?

  • SQL was first developed at IBM in the 1970s. It was initially called SEQUEL, which stood for Structured English Query Language. However, the name was later changed to SQL because SEQUEL was already trademarked by another company. The first version of SQL was called SEQUEL/1, and it was released in 1974. Since then, SQL has undergone several revisions and has become an industry-standard language for working with databases. The latest version of the SQL standard is SQL:2022, which was published in 2022.

What are the usages of SQL?

  • SQL is used in a wide variety of applications, including web development, data analysis, and business software. Some common ways in which SQL is used include:
  • Querying data from databases: SQL is often used to retrieve data from databases and display it in a useful format. For example, you might use SQL to generate reports, create views of data, or extract data for use in other applications.
  • Inserting, updating, and deleting records: SQL is also used to manipulate data stored in databases. You can use SQL to add new records to a database, update existing records, or delete records that are no longer needed.
  • Creating and modifying database structures: SQL is used to create and modify the structures of databases, including tables, indices, and views.
  • Setting permissions and controls: SQL is used to set permissions and controls on who can access and modify data in a database.
  • Integrating with programming languages: SQL can be used within a larger program written in another language, such as Python or Java. This allows developers to use SQL to build powerful and data-driven applications.

What are the subsets of SQL?

There are several subsets of SQL, each of which is geared towards a specific task or type of database. Some common subsets of SQL include:

  • DDL (Data Definition Language): DDL is a subset of SQL that is used to define the structure of a database, including the creation and modification of tables, indices, and views.
  • DQL (Data Query Language): DQL is a subset of SQL that is used to retrieve data from a database. It includes commands such as SELECT, FROM, and WHERE, which are used to specify the data you want to retrieve and the conditions under which it should be retrieved.
  • DML (Data Modification Language): DML is a subset of SQL that is used to modify data stored in a database. It includes commands such as INSERT, UPDATE, and DELETE, which are used to add, modify, and remove records from a database.
  • DCL (Data Control Language): DCL is a subset of SQL that is used to control access to data in a database. It includes commands such as GRANT and REVOKE, which are used to set permissions on who can access and modify data in a database.
  • TCL (Transaction Control Language): TCL is a subset of SQL that is used to manage transactions in a database. It includes commands such as COMMIT and ROLLBACK, which are used to save or discard the changes made to a database during a transaction.

What is the purpose of DDL Language?

DDL (Data Definition Language) is a subset of SQL that is used to define the structure of a database, including the creation and modification of tables, indices, and views. The purpose of DDL is to allow database administrators and developers to create and modify the structures of a database in a standard, declarative way. Some common DDL statements include:

  • CREATE: used to create a new table or view in the database.
  • ALTER: used to modify the structure of an existing table or view in the database.
  • DROP: used to delete an existing table or view from the database.
  • TRUNCATE: used to delete all data from a table, but leave the structure of the table intact.
  • COMMENT: used to add a comment to a table or column in the database.
  • Using DDL statements, you can define the structure of a database and specify the data types, constraints, and relationships between different tables and columns. This helps to ensure that the database is well-organized and consistent, and it makes it easier to work with the data stored in the database.

What is the purpose of DML Language?

DML (Data Modification Language) is a subset of SQL that is used to modify data stored in a database. It includes commands such as INSERT, UPDATE, and DELETE, which are used to add, modify, and remove records from a database. The purpose of DML is to allow you to manipulate data stored in a database in a standard, declarative way. Using DML statements, you can insert new records into a database, update existing records, or delete records that are no longer needed. This allows you to maintain the accuracy and integrity of the data stored in the database. Some common uses of DML include:

  • Inserting new records into a database: You can use the INSERT statement to add new records to a database table.
  • Updating existing records: You can use the UPDATE statement to modify the values of existing records in a database table.
  • Deleting records: You can use the DELETE statement to remove records from a database table that are no longer needed.
  • Using DML statements, you can efficiently manipulate large amounts of data stored in a database and ensure that the data remains accurate and up-to-date.

What is the purpose of DCL Language?

DCL (Data Control Language) is a subset of SQL that is used to control access to data in a database. It includes commands such as GRANT and REVOKE, which are used to set permissions on who can access and modify data in a database. The purpose of DCL is to provide a way to control access to data in a database and ensure that only authorized users can access and modify the data. This helps to protect the integrity and security of the data and prevent unauthorized users from making changes to the database. Some common uses of DCL include:

  • Granting access to users: You can use the GRANT statement to allow users to access and modify data in a database.
  • Revoking access from users: You can use the REVOKE statement to revoke access to data from users who no longer need it or who should not have access to it.
  • Using DCL statements, you can set fine-grained permissions on who can access and modify data in a database, and you can easily revoke or change these permissions as needed. This helps to ensure that the data in the database is only accessible to authorized users.

What are tables and fields in the database?

    In a database, data is organized into tables. A table is a collection of related data that is stored in a structured format. Each table has a name, and it is made up of columns (also called fields) and rows.
  • A column (or field) is a piece of data that is stored in a table. It has a name, a data type (such as integer, date, or string), and a set of constraints that define how the data can be used. For example, a column might be named "ID" and have a data type of "integer," and it might have a constraint that specifies that the values in the column must be unique.
  • A row (or record) is a single unit of data that is stored in a table. It is made up of a set of values, one for each column in the table. For example, if a table has columns for "ID," "Name," and "Age," a row in the table might contain the values 1, "John," and 25.
  • Tables and fields are used to store and organize data in a database. They allow you to structure the data in a way that makes it easy to work with and query, and they help to ensure the integrity and consistency of the data.

What is a primary key?

A primary key is a field in a table that uniquely identifies each row in the table. It is used to ensure the integrity and uniqueness of the data in the table, and it is typically used to establish relationships between tables in a database. A primary key must meet the following criteria:

  • It must contain unique values: Each value in the primary key field must be unique, meaning that no two rows in the table can have the same value in the primary key field.
  • It cannot be null: The primary key field cannot contain null values, which are used to represent missing or unknown data.
  • It cannot be changed: The values in the primary key field should not be changed, as this can cause problems with relationships between tables.
  • A table can have only one primary key, but it is possible to use multiple fields as a primary key (called a composite primary key). This is often done when no single field can uniquely identify a row in the table.
  • Primary keys are an important element of database design, as they help to ensure the integrity and accuracy of the data in a database. They are often used as the basis for establishing relationships between tables in a database.

What is a foreign key?

  • A foreign key is a field in a table that is used to establish a relationship with another table in the database. It is used to link data in one table to data in another table, and it is typically used to ensure the integrity of the data in the database.
  • A foreign key is a field that contains the primary key of another table. For example, if you have a "Customers" table and an "Orders" table, the "Orders" table might contain a foreign key field called "CustomerID" that is used to link each order to a specific customer. The "CustomerID" field would contain the primary key of the "Customers" table, which is used to uniquely identify each customer.
  • A foreign key has the following characteristics:
  • It must reference a primary key in another table: The values in a foreign key field must match the values in the primary key field of the other table.
  • It can be null: A foreign key field can contain null values, which means that it is possible to have a row in the table that is not linked to any other rows in the other table.
  • It can be changed: The values in a foreign key field can be changed, which can affect the relationships between tables in the database.
  • Foreign keys are an important element of database design, as they allow you to link data in different tables and enforce relationships between the data. They help to ensure the integrity and accuracy of the data in a database by preventing data inconsistencies and ensuring that related data is kept in sync.

What is a unique key?

  • A unique key is a field in a table that is used to ensure the uniqueness of the data in the table. It is similar to a primary key, in that it must contain unique values and cannot contain null values. However, a table can have multiple unique keys, whereas it can have only one primary key.
  • A unique key is used to enforce the uniqueness of the data in a table and prevent duplicate values from being entered into the table. For example, if you have a "Users" table with a "Username" field, you might want to ensure that no two users have the same username. In this case, you could create a unique key on the "Username" field to ensure that each username is unique.
  • Unique keys are an important element of database design, as they help to ensure the integrity and accuracy of the data in a database. They are often used to enforce business rules or constraints on the data, and they can be used to establish relationships between tables in a database.

What is the difference between a primary key and a unique key?

    A primary key and a unique key are both used to ensure the uniqueness of the data in a table and prevent duplicate values from being entered into the table. However, there are some key differences between the two:
  • A primary key must contain unique values and cannot contain null values. It is used to uniquely identify each row in a table, and a table can have only one primary key.
  • A unique key also must contain unique values and cannot contain null values. However, a table can have multiple unique keys, and a unique key does not have to be used to identify rows in a table.
  • A primary key is used to establish relationships between tables in a database. It is used to link data in one table to data in another table, and it is typically used as the basis for foreign keys in other tables.
  • A unique key does not have to be used to establish relationships between tables. It is used solely to enforce the uniqueness of the data in a table and prevent duplicate values from being entered into the table.
  • In summary, a primary key is used to uniquely identify each row in a table and establish relationships between tables, while a unique key is used solely to enforce the uniqueness of the data in a table.

What is a Database?

    A database is a structured collection of data that is stored electronically and can be accessed and manipulated by a computer. It is used to store and organize data in a way that makes it easy to retrieve and manage.
  • There are many different types of databases, ranging from simple flat-file databases to complex, distributed databases. Some common examples of databases include:
  • Relational databases: These are the most common type of databases, and they are organized into tables of data that are related to one another. Each table has a set of columns (also called fields) and rows, and the relationships between the tables are established using primary and foreign keys.
  • NoSQL databases: These are non-relational databases that are designed to handle large amounts of unstructured data. They do not use the same table-based structure as relational databases, and they are often used for handling data that does not fit well into a traditional table structure.
  • Object-oriented databases: These databases store data in the form of objects, which are self-contained units that contain both data and the methods for manipulating the data. They are often used in applications that require the manipulation of complex data structures.
  • Graph databases: These databases store data in the form of nodes and edges, and they are designed to handle complex relationships between data. They are often used in applications that require the analysis of large, interconnected datasets.
  • Databases are an essential part of modern computing and are used in a wide variety of applications and industries. They are used to store and manage data that is too large or complex to be handled by traditional file-based storage systems.

What are the different types of database management systems?

There are several types of database management systems (DBMS) that are used to store, organize, and manage data in a database. Some common types of DBMS include:

  • Relational database management systems (RDBMS): These are the most common type of DBMS, and they are used to store data in a structured format using tables, rows, and columns. RDBMS are based on the relational model of data, which organizes data into tables and specifies the relationships between the data using primary and foreign keys.
  • Object-oriented database management systems (OODBMS): These DBMS store data in the form of objects, which are self-contained units that contain both data and the methods for manipulating the data. OODBMS are used in applications that require the manipulation of complex data structures.
  • NoSQL database management systems (NDBMS): These are non-relational DBMS that are designed to handle large amounts of unstructured data. They do not use the same table-based structure as RDBMS, and they are often used for handling data that does not fit well into a traditional table structure.
  • Graph database management systems (GDBMS): These DBMS store data in the form of nodes and edges, and they are designed to handle complex relationships between data. They are often used in applications that require the analysis of large, interconnected datasets.
  • There are many other types of DBMS, and each one is designed to meet the specific needs of a particular application or use case. When choosing a DBMS, it is important to consider the type of data you need to store, the size of your dataset, the complexity of your data structures, and the performance and scalability requirements of your application.

What is RDBMS?

RDBMS (Relational Database Management System) is a type of database management system that is based on the relational model of data. It is used to store and manage data in a structured format using tables, rows, and columns.

  • In an RDBMS, data is organized into tables, which are collections of related data that is stored in a structured format. Each table has a name, and it is made up of columns (also called fields) and rows. A column is a piece of data that is stored in a table, and it has a name, a data type (such as integer, date, or string), and a set of constraints that define how the data can be used. A row (or record) is a single unit of data that is stored in a table, and it is made up of a set of values, one for each column in the table.
  • RDBMS are designed to handle large amounts of structured data and to support a wide range of data manipulation and query operations. They are widely used in a variety of applications and industries, and they are known for their reliability, efficiency, and scalability. Some examples of RDBMS include MySQL, Oracle, and Microsoft SQL Server.

What is Normalization in a Database?

Normalization is the process of organizing a database in a way that reduces redundancy and dependency, and ensures that data is stored in a way that is easy to maintain and manipulate. It is a key element of database design, and it is used to improve the efficiency, performance, and scalability of a database. There are several rules and guidelines for normalizing a database, and these are known as normal forms. The most commonly used normal forms are the first, second, and third normal forms.

  • First normal form (1NF): In 1NF, a database is considered to be in first normal form if it meets the following criteria: All data is stored in a table, and each table has a unique name.
  • Each row in a table represents a unique entity or piece of information.
  • Each column in a table represents a single attribute or piece of data.
  • Second normal form (2NF): In 2NF, a database is considered to be in second normal form if it meets the following criteria: It is in 1NF.
  • It does not have any repeating groups of data.
  • All non-key attributes are fully dependent on the primary key.
  • Third normal form (3NF): In 3NF, a database is considered to be in third normal form if it meets the following criteria: It is in 2NF.
  • There are no transitive dependencies between non-key attributes.
  • Normalization is an important part of database design, as it helps to ensure that data is stored in a way that is efficient, flexible, and easy to manipulate. It helps to eliminate redundancy and dependency in the database, which can improve the performance and scalability of the database and make it easier to maintain.

What is the primary use of Normalization?

The primary use of normalization is to improve the efficiency, performance, and scalability of a database by reducing redundancy and dependency in the data. Normalization is a key element of database design, and it is used to organize a database in a way that makes it easy to store, manipulate, and query data. By normalizing a database, you can:

  • Reduce redundancy: Normalization helps to eliminate redundant data in a database, which can improve the efficiency and performance of the database by reducing the amount of data that needs to be stored and processed.
  • Improve data integrity: Normalization helps to ensure that data is stored in a consistent and accurate way, which can improve the integrity of the data in the database.
  • Make the database more flexible: Normalization helps to make a database more flexible and adaptable to change, as it allows you to easily modify the structure of the database without affecting the data stored in it.
  • Improve the scalability of the database: Normalization can help to improve the scalability of a database by reducing the amount of data that needs to be stored and processed, which can make it easier to scale the database to meet the needs of a growing application.
  • Overall, the primary use of normalization is to improve the efficiency, performance, and scalability of a database by reducing redundancy and dependency in the data, and by making the database more flexible and adaptable to change.

What is an inconsistent dependency?

An inconsistent dependency is a type of database dependency that occurs when a change to a column in a table affects the values of other columns in the table in an inconsistent or unexpected way. This can lead to data inconsistencies and can make it difficult to accurately query and manipulate the data in the database. For example, consider a table that contains the following data:

ID	Name	Age	Address
1	John	25	123 Main St
2	Mary	30	456 Main St
In this table, the "Address" column is dependent on the "ID" column, as the value in the "Address" column is associated with a specific "ID" value. However, the "Age" column is not directly dependent on the "ID" column. In this case, the "Address" column has an inconsistent dependency on the "ID" column, as the value in the "Address" column is only indirectly related to the value in the "ID" column.
  • Inconsistent dependencies can lead to data inconsistencies and can make it difficult to accurately query and manipulate the data in the database. To avoid inconsistent dependencies, it is important to properly design and normalize the database to eliminate redundant and inconsistent data dependencies.

What is Denormalization in a Database?

  • Denormalization is the process of modifying a database design by adding redundancy to it in order to improve the performance of certain queries or operations. It is the opposite of normalization, which is the process of eliminating redundancy and dependency in a database to improve its efficiency and scalability.
  • Denormalization is often used in database design to improve the performance of specific queries or operations that require the joining of multiple tables or the calculation of complex aggregations. By adding redundancy to the database, you can reduce the need to perform these operations, which can improve the performance of the database.
  • For example, consider a database with the following tables: Customers Orders Order Details In a normalized database, the "Order Details" table would contain only the details of the orders, such as the product IDs and quantities. However, if you wanted to query the database to get the total sales for each customer, you would need to join the "Customers," "Orders," and "Order Details" tables and perform a complex aggregation. This operation could be slow, particularly if the tables are large.
  • To improve the performance of this query, you could denormalize the database by adding the customer names and total sales to the "Order Details" table. This would allow you to get the total sales for each customer by querying the "Order Details" table alone, without having to join the other tables or perform a complex aggregation.

What are the different types of SQL operators?

SQL (Structured Query Language) is a programming language used to manage and manipulate data in a database. There are several types of SQL operators that can be used in SQL statements to perform various operations on the data in a database. Some common types of SQL operators include:

  • Arithmetic operators: These operators perform arithmetic calculations on numeric values, such as addition, subtraction, multiplication, and division. For example:
  • SELECT 1 + 2;
    Comparison operators: These operators compare two values and return a Boolean value indicating whether the comparison is true or false. For example:
  • SELECT 1 = 2;
    Logical operators: These operators perform logical operations, such as AND, OR, and NOT, on Boolean values. For example:
  • SELECT (1 = 1) AND (2 = 2);
    String operators: These operators perform operations on string values, such as concatenation (joining two strings together) and pattern matching. For example:
  • SELECT 'Hello' || ' ' || 'World';
    Set operators: These operators perform operations on sets of data, such as UNION and INTERSECT, to combine or compare the data in different sets. For example:
  • SELECT * FROM Table1 UNION SELECT * FROM Table2;
    SQL operators are an important part of SQL programming, and they are used to perform a wide variety of operations on the data in a database.

What is a view in SQL?

  • A view in SQL is a virtual table that is created based on a SELECT statement. It is not a physical table that is stored in the database, but rather a representation of the data that is produced by the SELECT statement.
  • Views are used to create a specific view of the data in a database, and they can be used to simplify the structure of a database, to restrict access to certain data, or to provide a security layer for the data.
  • To create a view in SQL, you use the CREATE VIEW statement, followed by the SELECT statement that defines the view. For example:
      
    CREATE VIEW SalesView AS
    SELECT CustomerID, OrderID, Total
    FROM Orders
    WHERE Total > 1000;
    
    This creates a view called "SalesView" that displays the "CustomerID," "OrderID," and "Total" columns from the "Orders" table, but only for rows where the "Total" column is greater than 1000.
  • Views are an important part of database design, as they allow you to create a specific view of the data in a database and to customize the data that is displayed to users. They can be used to simplify the structure of a database, to restrict access to certain data, or to provide a security layer for the data.

What is an Index in SQL?

An index in SQL is a data structure that is used to improve the performance of database queries. It is similar to an index in a book, in that it provides a quick way to look up specific data in a table. An index in SQL is created on one or more columns of a table, and it stores the values from those columns in a specific order. When a query is executed on a table, the database can use the index to quickly locate the rows that match the criteria in the query, rather than having to scan the entire table. This can significantly improve the performance of the query, particularly for large tables. There are several types of indexes in SQL, including:

  • Unique indexes: These indexes enforce the uniqueness of the data in the indexed columns, and they prevent duplicate values from being inserted into the table.
  • Clustered indexes: These indexes rearrange the physical order of the data in the table to match the order of the index, which can improve the performance of queries that return large amounts of data.
  • Nonclustered indexes: These indexes do not rearrange the physical order of the data in the table, but they store a copy of the indexed data in a separate structure that can be quickly searched.
  • Indexes are an important part of database design, as they can significantly improve the performance of database queries. It is important to carefully consider which columns to index and how to index them, as adding too many indexes can have a negative impact on the performance of inserts, updates, and deletes on the table.

What are the different types of indexes in SQL?

There are several types of indexes in SQL that can be used to improve the performance of database queries:

  • Unique indexes: These indexes enforce the uniqueness of the data in the indexed columns, and they prevent duplicate values from being inserted into the table.
  • Clustered indexes: These indexes rearrange the physical order of the data in the table to match the order of the index, which can improve the performance of queries that return large amounts of data.
  • Nonclustered indexes: These indexes do not rearrange the physical order of the data in the table, but they store a copy of the indexed data in a separate structure that can be quickly searched.
  • Full-text indexes: These indexes are used to index large amounts of text data, and they allow you to perform full-text searches on the data.
  • Spatial indexes: These indexes are used to index spatial data, such as data with coordinates or shapes, and they allow you to perform spatial queries on the data.
  • Columnstore indexes: These indexes are used to store and index large amounts of data in a columnar format, and they are optimized for data warehousing and business intelligence applications.
  • Each type of index is designed to meet the specific needs of a particular application or use case, and it is important to choose the right type of index for your database based on your performance and query requirements.

What is the unique index?

  • A unique index is a type of index in SQL that is used to enforce the uniqueness of the data in the indexed columns. It prevents duplicate values from being inserted into the table, and it can be used to improve the performance of queries that retrieve unique data.
  • A unique index is created using the CREATE UNIQUE INDEX statement, followed by the name of the index and the name of the column or columns that the index should be created on. For example:
    CREATE UNIQUE INDEX EmailIndex ON Customers (Email);
    
    This creates a unique index on the "Email" column of the "Customers" table, which ensures that no two rows in the table have the same email address.
  • Unique indexes are an important part of database design, as they can help to ensure the integrity and accuracy of the data in the database. They are particularly useful for columns that are used as primary keys, as they ensure that each row in the table has a unique primary key value.

What is clustered index in SQL?

A clustered index in SQL is a type of index that rearranges the physical order of the data in a table to match the order of the index. It is called a "clustered" index because the data is "clustered" together in the order of the index. A clustered index is created using the CREATE CLUSTERED INDEX statement, followed by the name of the index and the name of the column or columns that the index should be created on. For example:

CREATE CLUSTERED INDEX LastNameIndex ON Customers (LastName);
This creates a clustered index on the "LastName" column of the "Customers" table, which rearranges the rows in the table based on the values in the "LastName" column.
  • Clustered indexes are an important part of database design, as they can significantly improve the performance of queries that return large amounts of data. By rearranging the data in the table based on the index, a clustered index can reduce the number of disk I/O operations that are required to retrieve the data, which can improve the performance of the query.
  • It is important to choose the right column or columns for a clustered index, as the order of the data in the table will be based on the values in the indexed columns. If you frequently query the table based on a different set of columns, a nonclustered index may be a better choice.

What is the non-clustered index in SQL?

A nonclustered index in SQL is a type of index that does not rearrange the physical order of the data in a table, but rather stores a copy of the indexed data in a separate structure that can be quickly searched. A nonclustered index is created using the CREATE INDEX statement, followed by the name of the index and the name of the column or columns that the index should be created on. For example:

CREATE INDEX OrderDateIndex ON Orders (OrderDate);
This creates a nonclustered index on the "OrderDate" column of the "Orders" table, which stores a copy of the "OrderDate" values in a separate structure that can be quickly searched.
  • Nonclustered indexes are an important part of database design, as they can significantly improve the performance of queries that filter or sort data based on specific columns. By storing a copy of the indexed data in a separate structure, a nonclustered index can reduce the number of disk I/O operations that are required to retrieve the data, which can improve the performance of the query.
  • It is important to choose the right column or columns for a nonclustered index, as the index will only be used to improve the performance of queries that filter or sort data based on those columns. If you frequently query the table based on a different set of columns, a different index may be a better choice.

What are the differences between SQL, MySQL, and SQL Server?

SQL (Structured Query Language) is a standard programming language for managing and manipulating data in a database. It is used to create, modify, and query databases, and it is used by many different database management systems (DBMS).

  • MySQL and SQL Server are both DBMS that use SQL as their primary programming language. However, there are some differences between these two systems:
  • MySQL is an open-source DBMS, which means that it is freely available for anyone to use and modify. It is widely used on the web, particularly for web applications, and it is known for its ease of use and high performance.
  • SQL Server is a proprietary DBMS developed by Microsoft. It is a more powerful and feature-rich system than MySQL, and it is typically used for larger and more complex databases. It is often used in enterprise environments and is known for its robustness and security.
  • Overall, the main difference between MySQL and SQL Server is the level of complexity and the intended use case. MySQL is a simpler and more lightweight system that is well-suited for web applications, while SQL Server is a more powerful and feature-rich system that is better suited for larger and more complex databases. Both systems use SQL as their primary programming language, but they may have some differences in the specific syntax and features that they support.

What is the difference between SQL and PL/SQL?

SQL (Structured Query Language) is a standard programming language for managing and manipulating data in a database. It is used to create, modify, and query databases, and it is used by many different database management systems (DBMS).

  • PL/SQL (Procedural Language/SQL) is a procedural programming language that is specifically designed for use with the Oracle DBMS. It is based on SQL, and it includes additional features and constructs that are not present in SQL, such as loops, conditional statements, and exception handling.
  • One of the main differences between SQL and PL/SQL is that SQL is a declarative language, which means that you specify what you want to do, but not how to do it. PL/SQL is a procedural language, which means that you specify both what you want to do and how to do it. This makes PL/SQL more powerful and flexible than SQL, as it allows you to create more complex programs and to perform a wider range of operations on the data in a database.
  • Another difference between SQL and PL/SQL is that SQL is mainly used to query and manipulate data in a database, while PL/SQL is mainly used to create procedural programs that can be stored in the database and executed on demand.
  • Overall, the main difference between SQL and PL/SQL is that SQL is a declarative language that is mainly used to query and manipulate data in a database, while PL/SQL is a procedural language that is mainly used to create programs that can be stored in the database and executed on demand.

What is the difference between clustered and non-clustered indexes in SQL?

A clustered index in SQL is a type of index that rearranges the physical order of the data in a table to match the order of the index. It is called a "clustered" index because the data is "clustered" together in the order of the index.

  • A nonclustered index in SQL is a type of index that does not rearrange the physical order of the data in a table, but rather stores a copy of the indexed data in a separate structure that can be quickly searched.
  • The main difference between clustered and nonclustered indexes is how they store and access the data in the table. A clustered index physically rearranges the data in the table based on the index, which can improve the performance of queries that return large amounts of data. A nonclustered index stores a copy of the indexed data in a separate structure, which can improve the performance of queries that filter or sort data based on specific columns.
  • It is important to choose the right type of index based on your performance and query requirements. Clustered indexes are well-suited for queries that return large amounts of data, while nonclustered indexes are better for queries that filter or sort data based on specific columns. In general, a table can have only one clustered index, but it can have multiple nonclustered indexes.

Which are joins in SQL?

Joins in SQL are used to combine data from two or more tables based on a common field or set of fields. They are an important part of SQL programming, as they allow you to retrieve data from multiple tables in a single query and to work with data from multiple tables as if it were a single table. There are several types of joins in SQL, including:

  • Inner join: An inner join returns only the rows that match the join condition in both tables. It is the most common type of join, and it is the default behavior if no specific join type is specified.
  • Left join (also called a left outer join): A left join returns all the rows from the left table, along with any matching rows from the right table. If there is no match, NULL values are returned for the right table's columns.
  • Right join (also called a right outer join): A right join returns all the rows from the right table, along with any matching rows from the left table. If there is no match, NULL values are returned for the left table's columns.
  • Full outer join: A full outer join returns all the rows from both tables, regardless of whether there is a match. If there is no match, NULL values are returned for the non-matching columns.
  • Joins are an important part of SQL programming, as they allow you to retrieve and work with data from multiple tables in a single query. They are used to combine data from different tables based on common fields, and they can be used to filter and sort the data in a variety of ways.

Name the most commonly used SQL joins?

The most commonly used SQL joins are:

  • Inner join: An inner join returns only the rows that match the join condition in both tables. It is the most common type of join, and it is the default behavior if no specific join type is specified.
  • Left join (also called a left outer join): A left join returns all the rows from the left table, along with any matching rows from the right table. If there is no match, NULL values are returned for the right table's columns.
  • Right join (also called a right outer join): A right join returns all the rows from the right table, along with any matching rows from the left table. If there is no match, NULL values are returned for the left table's columns.
  • These three types of joins are the most commonly used in SQL programming, as they cover the majority of scenarios where data from multiple tables needs to be combined. Inner joins and left joins are particularly common, as they allow you to filter the data based on specific criteria and to return only the rows that match the join condition. Right joins are less common, but they can be useful in certain situations where you want to retrieve all the rows from one table and only the matching rows from the other table.

What are the different types of joins in SQL?

There are several types of joins in SQL that can be used to combine data from two or more tables based on a common field or set of fields:

  • Inner join: An inner join returns only the rows that match the join condition in both tables. It is the most common type of join, and it is the default behavior if no specific join type is specified.
  • Left join (also called a left outer join): A left join returns all the rows from the left table, along with any matching rows from the right table. If there is no match, NULL values are returned for the right table's columns.
  • Right join (also called a right outer join): A right join returns all the rows from the right table, along with any matching rows from the left table. If there is no match, NULL values are returned for the left table's columns.
  • Full outer join: A full outer join returns all the rows from both tables, regardless of whether there is a match. If there is no match, NULL values are returned for the non-matching columns.
  • Cross join: A cross join returns the Cartesian product of the two tables, which is a result set that includes every possible combination of rows from the two tables. It is not commonly used, as it is typically not useful to combine every row from one table with every row from another table.
  • Each type of join is used in a different situation, and it is important to choose the right type of join based on your specific needs. Inner joins and left joins are the most common, as they allow you to filter and sort the data based on specific criteria. Right joins and full outer joins are less common, but they can be useful in certain situations where you want to retrieve all the rows from one table and only the matching rows from the other table, or where you want to retrieve all the rows from both tables regardless of whether there is a match. Cross joins are rarely used, as they usually do not provide useful results.

What is INNER JOIN in SQL?

  • An inner join in SQL is a type of join that returns only the rows that match the join condition in both tables. It is the most common type of join, and it is the default behavior if no specific join type is specified.
  • An inner join is created using the INNER JOIN keyword, followed by the names of the two tables that you want to join and the join condition. The join condition specifies the column or columns that should be used to match the rows in the two tables.
  • For example, consider the following two tables:
  • Customers:
       
    CustomerID	FirstName   LastName
    1	        John        Smith
    2	        Jane        Doe
    3	        Bob         Johnson
    
  • Orders:
    OrderID	CustomerID	OrderDate
    1	    1	        2021-01-01
    2	    2	        2021-02-01
    3	    3	        2021-03-01
    
  • To retrieve all the orders for customers in the "Customers" table, you can use an inner join as follows:
    SELECT * FROM Customers INNER JOIN Orders ON Customers.CustomerID = Orders.CustomerID;
    
    This would return the following result set:
    CustomerID	FirstName	LastName	OrderID	CustomerID	OrderDate
    1	        John	        Smith	           1	    1	        2021-01-01
    2	        Jane	        Doe		    2	    2          2021-02-01
    3	        Bob	        Johnson	    3	    3	        2021-03-01
    
    An inner join returns only the rows that match the join condition in both tables .

What is the Right JOIN in SQL?

  • A right join in SQL (also called a right outer join) is a type of join that returns all the rows from the right table, along with any matching rows from the left table. If there is no match, NULL values are returned for the left table's columns.
  • A right join is created using the RIGHT JOIN keyword, followed by the names of the two tables that you want to join and the join condition. The join condition specifies the column or columns that should be used to match the rows in the two tables.
  • For example, consider the following two tables: Customers:
    CustomerID	FirstName	LastName
    1	        John	        Smith
    2	        Jane	        Doe
    3	        Bob	        Johnson
    
    Orders:
        
    OrderID	CustomerID	OrderDate
    1	    1	        2021-01-01
    2	    2	        2021-02-01
    3	    3	        2021-03-01
    
    To retrieve all the orders, along with the customer information for each order, you can use a right join as follows:
    SELECT * FROM Customers RIGHT JOIN Orders ON Customers.CustomerID = Orders.CustomerID;
    
    This would return the following result set:
    CustomerID	FirstName	LastName	    OrderID	CustomerID	OrderDate
    1	        John	        Smith	            1	    1	        2021-01-01
    2	        Jane	        Doe	            2	    2	        2021-02-01
    3	        Bob	        Johnson	     3	           3	        2021-03-01
    
    A right join returns all the rows from the right table, along with any matching rows from the left table. If there are orders that do not have a matching customer in the "Customers" table, NULL values will be returned for the customer columns.

What is Left Join in SQL?

  • A left join in SQL (also called a left outer join) is a type of join that returns all the rows from the left table, along with any matching rows from the right table. If there is no match, NULL values are returned for the right table's columns.
  • A left join is created using the LEFT JOIN keyword, followed by the names of the two tables that you want to join and the join condition. The join condition specifies the column or columns that should be used to match the rows in the two tables. For example, consider the following two tables: Customers:
    CustomerID	FirstName	LastName
    1	        John    	Smith
    2	        Jane    	Doe
    3	        Bob	      Johnson
    
    Orders:
        
    OrderID	CustomerID	OrderDate
    1	    1	        2021-01-01
    2	    2	        2021-02-01
    3	    3	        2021-03-01
    
    To retrieve all the customers, along with the order information for each customer (if available), you can use a left join as follows:
        SELECT * FROM Customers LEFT JOIN Orders ON Customers.CustomerID = Orders.CustomerID;
    
    This would return the following result set:
    CustomerID	FirstName	LastName	OrderID	CustomerID	OrderDate
    1	        John    	Smith	        1	    1	        2021-01-01
    2	        Jane    	Doe	        2	    2	        2021-02-01
    3	        Bob	      Johnson	        3	    3	        2021-03-01
    
    A left join returns all the rows from the left table, along with any matching rows from the right table. If there are customers who do not have any orders in the "Orders" table, NULL values will be returned for the order columns.
  • Left joins are commonly used to retrieve data from multiple tables, where you want to include all the rows from one table and only the matching rows from the other table. They are useful for retrieving data from one-to-many relationships, where each row in the left table may have multiple matching rows in the right table.

What is Full Join in SQL?

  • A full outer join in SQL (also called a full join) is a type of join that returns all the rows from both tables, regardless of whether there is a match. If there is no match, NULL values are returned for the non-matching columns.
  • A full outer join is created using the FULL OUTER JOIN keyword, followed by the names of the two tables that you want to join and the join condition. The join condition specifies the column or columns that should be used to match the rows in the two tables. For example, consider the following two tables: Customers:
    CustomerID	FirstName	LastName
    1	        John    	Smith
    2	        Jane    	Doe
    3	        Bob	      Johnson
    
    Orders:
    OrderID	CustomerID	OrderDate
    1	    1	        2021-01-01
    2	    2	        2021-02-01
    3	    3	        2021-03-01
    
    To retrieve all the customers and orders, along with any matching information, you can use a full outer join as follows:
    SELECT * FROM Customers FULL OUTER JOIN Orders ON Customers.CustomerID = Orders.CustomerID;
    
    This would return the following result set:
    CustomerID	FirstName	LastName	OrderID	CustomerID	OrderDate
    1	        John    	Smith	    1	    1	        2021-01-01
    2	        Jane    	Doe	        2	    2	        2021-02-01
    3	        Bob	        Johnson	    3	    3	        2021-03-01
    
    A full outer join returns all the rows from both tables, regardless of whether there is a match. If there are customers or orders that do not have a match in the other table, NULL values will be returned for the non-matching columns.
  • Full outer joins are rarely used, as they usually do not provide useful results. They can be useful in certain situations where you want to retrieve all the rows from both tables regardless of whether there is a match, but they can also result in a very large result set if the two tables have a large number of rows.

What is a "TRIGGER" in SQL?

In SQL, a trigger is a piece of code that is executed automatically when a specific event occurs in the database. Triggers are usually used to enforce business rules or to maintain data integrity, by performing actions such as updating or deleting data in other tables when a change is made to a table.

  • Triggers are defined at the database level, and they are associated with a specific table or view. They can be activated before or after a particular event, such as before an INSERT or UPDATE operation, or after a DELETE operation.
  • For example, consider a database that includes a "Customers" table and an "Orders" table. You might define a trigger that is activated before an INSERT operation on the "Orders" table, to check if the customer who is placing the order has a credit limit that is high enough to cover the cost of the order. If the credit limit is not sufficient, the trigger could roll back the INSERT operation and display an error message to the user.
  • Triggers are powerful tools that can be used to enforce business rules and to maintain data integrity, but they should be used with caution, as they can have unintended consequences if not implemented correctly. It is important to thoroughly test triggers before deploying them in a production environment, to ensure that they are working as intended and not causing any problems.

What is self-join and what is the requirement of self-join?

  • A self-join in SQL is a type of join that allows you to join a table to itself, using a common field or set of fields. Self-joins are useful when you want to compare rows within a single table, or when you want to retrieve data from a table that has a one-to-many relationship with itself. To perform a self-join, you need to specify the table name twice in the FROM clause, with different aliases for each instance of the table. You can then specify the join condition using the aliases.
For example, consider a "Employees" table that includes the following fields:
EmployeeID	FirstName	LastName	ManagerID
1	        John	    Smith	    NULL
2	        Jane	    Doe	        1
3	        Bob	        Johnson	    1
4	        Alice	    Smith	    2
  • In this table, the "ManagerID" field refers to the EmployeeID of the employee's manager. To retrieve the names of each employee and their manager, you can use a self-join as follows:
SELECT e1.FirstName AS Employee, e2.FirstName AS Manager
FROM Employees e1 LEFT JOIN Employees e2 ON e1.ManagerID = e2.EmployeeID;
  • This would return the following result set:
Employee	Manager
John	    NULL
Jane	    John
Bob	    John
Alice	    Jane
  • Self-joins are useful when you want to compare rows within a single table, or when you want to retrieve data from a table that has a one-to-many relationship with itself. They allow you to join a table to itself, using a common field or set of fields, and to retrieve the data in a meaningful way.

What are the set operators in SQL?

In SQL, set operators are used to combine the results of two or more SELECT statements into a single result set. There are several types of set operators that you can use in SQL, including UNION, UNION ALL, INTERSECT, and MINUS. Here is a brief description of each set operator:

  • UNION: The UNION operator combines the results of two or more SELECT statements, but it removes any duplicate rows.
  • UNION ALL: The UNION ALL operator combines the results of two or more SELECT statements, and it includes all rows, including duplicates.
  • INTERSECT: The INTERSECT operator returns only the rows that are common to the results of two or more SELECT statements.
  • MINUS: The MINUS operator returns the rows that are in the first SELECT statement but not in the second SELECT statement.
  • Set operators are used to combine the results of multiple SELECT statements, and they can be very useful when you want to retrieve data from multiple tables or when you want to perform complex queries.
  • For example, consider the following two tables: Customers:
    CustomerID	FirstName	LastName
    1	        John    	Smith
    2	        Jane    	Doe
    3	        Bob	      Johnson
    
    Orders:
    OrderID	CustomerID	OrderDate
    1	    1	        2021-01-01
    2	    2	        2021-02-01
    3	    3	        2021-03-01
    
    To retrieve all the customers who have placed an order, you can use a set operator as follows:
    SELECT CustomerID FROM Customers
    INTERSECT
    SELECT CustomerID FROM Orders;
    
    This would return the following result set:
    CustomerID
    1
    2
    3
    
    Set operators are a powerful tool in SQL that can be used to combine the results of multiple SELECT statements in a variety of ways. They can be used to perform complex queries and to retrieve data from multiple tables in a single query.

What is the difference between IN and BETWEEN operators?

  • In SQL, the IN operator allows you to specify a list of values that a column should be compared to, whereas the BETWEEN operator allows you to specify a range of values that a column should be between. Here is an example of how the IN operator can be used in a SELECT statement:
    SELECT * FROM Customers
    WHERE Country IN ('USA', 'Canada', 'Mexico');
    
    This statement would retrieve all the rows from the "Customers" table where the "Country" column is either 'USA', 'Canada', or 'Mexico'. Here is an example of how the BETWEEN operator can be used in a SELECT statement:
    SELECT * FROM Customers
    WHERE BirthDate BETWEEN '1980-01-01' AND '1999-12-31';
    
    This statement would retrieve all the rows from the "Customers" table where the "BirthDate" column is between '1980-01-01' and '1999-12-31', inclusive. In summary, the IN operator is used to compare a column to a list of values, whereas the BETWEEN operator is used to compare a column to a range of values. Both operators can be useful for filtering data in a SELECT statement, depending on your specific requirements.

What is a constraint?

In SQL, a constraint is a rule that is used to limit the values that can be stored in a table. Constraints are used to enforce data integrity and to ensure that the data in a table is valid and consistent. There are several types of constraints that you can use in SQL, including:

  • NOT NULL: This constraint ensures that a column cannot contain a NULL value.
  • UNIQUE: This constraint ensures that all the values in a column are unique.
  • PRIMARY KEY: This constraint defines a column or set of columns as the primary key of a table, which must be unique and cannot contain NULL values.
  • FOREIGN KEY: This constraint defines a column or set of columns that references the primary key of another table.
  • CHECK: This constraint limits the values that can be stored in a column by specifying a condition that must be met.
  • DEFAULT: This constraint specifies a default value for a column, which will be used if no value is specified when a new row is inserted.
  • Constraints are defined when a table is created, and they can be used to enforce data integrity and to ensure that the data in a table is valid and consistent. They can also be used to define relationships between tables, by using foreign key constraints. Constraints can be useful for enforcing business rules and for ensuring the quality of the data in a database.

What is the difference between DELETE and TRUNCATE statements in SQL?

  • In SQL, the DELETE statement is used to delete rows from a table, whereas the TRUNCATE statement is used to delete all the rows from a table and reset the auto-increment counter. Here is an example of how the DELETE statement can be used in SQL:
  • DELETE FROM Customers WHERE CustomerID = 1;
    
    This statement would delete the row with the CustomerID of 1 from the "Customers" table.
  • Here is an example of how the TRUNCATE statement can be used in SQL:
    TRUNCATE TABLE Customers;
    
    This statement would delete all the rows from the "Customers" table and reset the auto-increment counter. In summary, the DELETE statement is used to delete specific rows from a table, whereas the TRUNCATE statement is used to delete all the rows from a table and reset the auto-increment counter. Both statements can be useful for deleting data from a table, but they have different effects and should be used appropriately.

What is the ACID property in a database?

ACID is a set of properties that are used to ensure the consistency and integrity of data in a database. The acronym ACID stands for Atomicity, Consistency, Isolation, and Durability. Here is a brief description of each property:

  • Atomicity: Atomicity refers to the ability to ensure that a database transaction is either completed in its entirety or not completed at all. This means that if one part of a transaction fails, the entire transaction is rolled back and the database is restored to its previous state.
  • Consistency: Consistency refers to the ability to ensure that a database remains in a consistent state after a transaction is completed. This means that the data in the database must be valid and conform to all the rules and constraints that have been defined.
  • Isolation: Isolation refers to the ability to ensure that concurrent transactions do not interfere with each other. This means that each transaction is executed as if it were the only transaction running on the database, even if there are multiple transactions running at the same time.
  • Durability: Durability refers to the ability to ensure that the data in a database is persisted and survives after a transaction is completed. This means that the data is written to the database in a permanent form, and it is not lost even if the database crashes or shuts down.
  • The ACID properties are important for ensuring the consistency and integrity of data in a database, and they are essential for building robust and reliable database systems. They help to ensure that transactions are completed correctly, that the data in the database is valid and consistent, and that the data is persisted and survives after a transaction is completed.

What are functions and their usage in SQL?

  • In SQL, a function is a piece of code that performs a specific task and returns a value. Functions are used to perform a variety of tasks, such as calculating a sum, averaging a set of values, concatenating strings, or performing a lookup.
  • SQL includes a wide range of built-in functions that you can use in your queries. Some common types of functions that are available in SQL include:
  • Aggregate functions: Aggregate functions perform a calculation on a set of values and return a single result. Examples of aggregate functions include SUM, AVG, and COUNT.
  • String functions: String functions operate on character strings and return a modified string as a result. Examples of string functions include CONCAT, SUBSTRING, and UPPER.
  • Date and time functions: Date and time functions operate on date and time values and return a modified date or time as a result. Examples of date and time functions include CURRENT_TIMESTAMP, ADD_MONTHS, and EXTRACT.
  • Conversion functions: Conversion functions convert a value from one data type to another. Examples of conversion functions include TO_NUMBER, TO_DATE, and TO_CHAR.
  • Functions can be very useful in SQL, as they allow you to perform a wide range of tasks and calculations on your data. They can help to simplify your queries and to make them more efficient, by allowing you to perform complex tasks in a single function call.
  • For example, consider a "Sales" table that includes the following fields:
SalesID	ProductID	Quantity	Price
1	    1	        10	        10.00
2	    2	        5	        20.00
3	    3	        15	        5.00
To calculate the total sales for each product, you can use the SUM function as follows:
SELECT ProductID, SUM(Quantity * Price) AS TotalSales
FROM Sales
GROUP BY ProductID;
  • This would return the following result set:
ProductID	TotalSales
1	        100.00
2	        100.00
3	        75.00
  • Functions are an important part of SQL, and they can be very useful for performing a wide range of tasks and calculations on your data. By using functions, you can simplify your queries and make them more efficient, and you can perform complex tasks with a single function call.

What is the use of DISTINCT?

  • In SQL, the DISTINCT keyword is used to eliminate duplicate rows from a result set. When the DISTINCT keyword is used, only unique rows are returned in the result set.
  • Here is an example of how the DISTINCT keyword can be used in a SELECT statement:
    SELECT DISTINCT Country FROM Customers;
    
  • This statement would retrieve a list of all the unique countries in the "Customers" table. If there are multiple rows with the same country value, only one row would be returned in the result set.
  • The DISTINCT keyword can be useful when you want to eliminate duplicate rows from a result set, or when you want to retrieve a list of unique values from a table. It can be used in conjunction with any SELECT statement, and it can be used with any number of columns.
  • For example, consider the following "Orders" table:
    OrderID	CustomerID	ProductID	Quantity
    1	    1	        1	        10
    2	    1	        2	        5
    3	    2	        1	        15
    4	    3	        3	        5
    
  • To retrieve a list of all the unique combinations of customer and product in the table, you can use the DISTINCT keyword as follows:
  • SELECT DISTINCT CustomerID, ProductID FROM Orders;
    
  • This would return the following result set:
  • CustomerID	ProductID
    1	        1
    1	        2
    2	        1
    3	        3
    
    The DISTINCT keyword is a useful tool in SQL that can be used to eliminate duplicate rows from a result set and to retrieve a list of unique values from a table. It can be used in conjunction with any SELECT statement and with any number of columns.

What is the difference between the WHERE and HAVING clauses?

  • In SQL, the WHERE and HAVING clauses are used to filter rows from a result set. However, they are used in different contexts and have some important differences.
  • The WHERE clause is used to filter rows before the result set is grouped or aggregated. It is used to specify a condition that each row must meet in order to be included in the result set.
  • For example, consider the following "Sales" table:
    SalesID	ProductID	Quantity	Price
    1	    1	        10	        10.00
    2	    2	        5	        20.00
    3	    3	        15	        5.00
    
  • To retrieve the sales for products with a price of more than $10, you can use a WHERE clause as follows:
    SELECT ProductID, SUM(Quantity * Price) AS TotalSales
    FROM Sales
    WHERE Price > 10
    GROUP BY ProductID;
    
  • This would return the following result set:
    ProductID	TotalSales
    2	        100.00
    
  • The WHERE clause is used to filter rows before the result set is grouped or aggregated, and it is used to specify a condition that each row must meet in order to be included in the result set.
  • On the other hand, the HAVING clause is used to filter rows after the result set is grouped or aggregated. It is used to specify a condition that each group must meet in order to be included in the result set.
  • For example, to retrieve the sales for products with a total sales of more than $100, you can use a HAVING clause as follows:
    SELECT ProductID, SUM(Quantity * Price) AS TotalSales
    FROM Sales
    GROUP BY ProductID
    HAVING SUM(Quantity * Price) > 100;
    
  • This would return the following result set:
    ProductID	TotalSales
    2	        100.00
    
  • The HAVING clause is used to filter rows after the result set is grouped or aggregated, and it is used to specify a condition that each group must meet in order to be included in the result set.

What is SQL Injection?

  • SQL injection is a type of attack that allows an attacker to execute arbitrary SQL statements on a database by manipulating input data. It occurs when user input is not properly validated or sanitized, and it can be used to access, modify, or delete data in a database.
  • SQL injection attacks are a serious security risk, as they can allow an attacker to gain unauthorized access to sensitive data or to compromise the integrity of a database. They can be used to steal sensitive information, such as passwords or credit card numbers, or to alter or delete data in a database.
  • To prevent SQL injection attacks, it is important to properly validate and sanitize user input, and to use prepared statements and parameterized queries when interacting with a database. It is also a good idea to use input validation libraries and to follow best practices for secure programming.
  • By taking these precautions, you can help to protect your database from SQL injection attacks and ensure the security and integrity of your data.

What are SQL comments?

  • In SQL, comments are used to add notes or explanations to your code. Comments are ignored by the database engine and do not affect the execution of your code. They are used to document your code and to make it easier to understand and maintain.
  • There are two types of comments in SQL: single-line comments and multi-line comments.
  • Single-line comments start with two hyphens (--) and extend to the end of the line. For example:
    -- This is a single-line comment
    
  • Multi-line comments start with /* and end with */. They can span multiple lines and can be used to comment out blocks of code. For example:
    /* This is a
    multi-line comment */
    
  • Comments are a useful tool in SQL, as they allow you to add notes and explanations to your code, which can make it easier to understand and maintain. They can be used to document your code, to provide explanations for complex queries or statements, or to comment out blocks of code that are not currently in use.

Best Wishes by:- Code Seva Team