Author: alien

  • Khóa học miễn phí PostgreSQL – Joins nhận dự án làm có lương

    PostgreSQL – JOINS



    The PostgreSQL Joins clause is used to combine records from two or more tables in a database. A JOIN is a means for combining fields from two tables by using values common to each.

    Join Types in PostgreSQL are −

    • The CROSS JOIN
    • The INNER JOIN
    • The LEFT OUTER JOIN
    • The RIGHT OUTER JOIN
    • The FULL OUTER JOIN

    Before we proceed, let us consider two tables, COMPANY and DEPARTMENT. We already have seen INSERT statements to populate COMPANY table. So just let us assume the list of records available in COMPANY table −

     id | name  | age | address   | salary | join_date
    ----+-------+-----+-----------+--------+-----------
      1 | Paul  |  32 | California|  20000 | 2001-07-13
      3 | Teddy |  23 | Norway    |  20000 |
      4 | Mark  |  25 | Rich-Mond |  65000 | 2007-12-13
      5 | David |  27 | Texas     |  85000 | 2007-12-13
      2 | Allen |  25 | Texas     |        | 2007-12-13
      8 | Paul  |  24 | Houston   |  20000 | 2005-07-13
      9 | James |  44 | Norway    |   5000 | 2005-07-13
     10 | James |  45 | Texas     |   5000 | 2005-07-13
    

    Another table is DEPARTMENT, has the following definition −

    CREATE TABLE DEPARTMENT(
       ID INT PRIMARY KEY      NOT NULL,
       DEPT           CHAR(50) NOT NULL,
       EMP_ID         INT      NOT NULL
    );
    

    Here is the list of INSERT statements to populate DEPARTMENT table −

    INSERT INTO DEPARTMENT (ID, DEPT, EMP_ID)
    VALUES (1, ''IT Billing'', 1 );
    
    INSERT INTO DEPARTMENT (ID, DEPT, EMP_ID)
    VALUES (2, ''Engineering'', 2 );
    
    INSERT INTO DEPARTMENT (ID, DEPT, EMP_ID)
    VALUES (3, ''Finance'', 7 );
    

    Finally, we have the following list of records available in DEPARTMENT table −

     id | dept        | emp_id
    ----+-------------+--------
      1 | IT Billing  |  1
      2 | Engineering |  2
      3 | Finance     |  7
    

    The CROSS JOIN

    A CROSS JOIN matches every row of the first table with every row of the second table. If the input tables have x and y columns, respectively, the resulting table will have x+y columns. Because CROSS JOINs have the potential to generate extremely large tables, care must be taken to use them only when appropriate.

    The following is the syntax of CROSS JOIN −

    SELECT ... FROM table1 CROSS JOIN table2 ...
    

    Based on the above tables, we can write a CROSS JOIN as follows −

    testdb=# SELECT EMP_ID, NAME, DEPT FROM COMPANY CROSS JOIN DEPARTMENT;
    

    The above given query will produce the following result −

    emp_id| name  |  dept
    ------|-------|--------------
        1 | Paul  | IT Billing
        1 | Teddy | IT Billing
        1 | Mark  | IT Billing
        1 | David | IT Billing
        1 | Allen | IT Billing
        1 | Paul  | IT Billing
        1 | James | IT Billing
        1 | James | IT Billing
        2 | Paul  | Engineering
        2 | Teddy | Engineering
        2 | Mark  | Engineering
        2 | David | Engineering
        2 | Allen | Engineering
        2 | Paul  | Engineering
        2 | James | Engineering
        2 | James | Engineering
        7 | Paul  | Finance
        7 | Teddy | Finance
        7 | Mark  | Finance
        7 | David | Finance
        7 | Allen | Finance
        7 | Paul  | Finance
        7 | James | Finance
        7 | James | Finance
    

    The INNER JOIN

    A INNER JOIN creates a new result table by combining column values of two tables (table1 and table2) based upon the join-predicate. The query compares each row of table1 with each row of table2 to find all pairs of rows, which satisfy the join-predicate. When the join-predicate is satisfied, column values for each matched pair of rows of table1 and table2 are combined into a result row.

    An INNER JOIN is the most common type of join and is the default type of join. You can use INNER keyword optionally.

    The following is the syntax of INNER JOIN −

    SELECT table1.column1, table2.column2...
    FROM table1
    INNER JOIN table2
    ON table1.common_filed = table2.common_field;
    

    Based on the above tables, we can write an INNER JOIN as follows −

    testdb=# SELECT EMP_ID, NAME, DEPT FROM COMPANY INNER JOIN DEPARTMENT
            ON COMPANY.ID = DEPARTMENT.EMP_ID;
    

    The above given query will produce the following result −

     emp_id | name  | dept
    --------+-------+------------
          1 | Paul  | IT Billing
          2 | Allen | Engineering
    

    The LEFT OUTER JOIN

    The OUTER JOIN is an extension of the INNER JOIN. SQL standard defines three types of OUTER JOINs: LEFT, RIGHT, and FULL and PostgreSQL supports all of these.

    In case of LEFT OUTER JOIN, an inner join is performed first. Then, for each row in table T1 that does not satisfy the join condition with any row in table T2, a joined row is added with null values in columns of T2. Thus, the joined table always has at least one row for each row in T1.

    The following is the syntax of LEFT OUTER JOIN −

    SELECT ... FROM table1 LEFT OUTER JOIN table2 ON conditional_expression ...
    

    Based on the above tables, we can write an inner join as follows −

    testdb=# SELECT EMP_ID, NAME, DEPT FROM COMPANY LEFT OUTER JOIN DEPARTMENT
       ON COMPANY.ID = DEPARTMENT.EMP_ID;
    

    The above given query will produce the following result −

     emp_id | name  | dept
    --------+-------+------------
          1 | Paul  | IT Billing
          2 | Allen | Engineering
            | James |
            | David |
            | Paul  |
            | Mark  |
            | Teddy |
            | James |
    

    The RIGHT OUTER JOIN

    First, an inner join is performed. Then, for each row in table T2 that does not satisfy the join condition with any row in table T1, a joined row is added with null values in columns of T1. This is the converse of a left join; the result table will always have a row for each row in T2.

    The following is the syntax of RIGHT OUTER JOIN −

    SELECT ... FROM table1 RIGHT OUTER JOIN table2 ON conditional_expression ...
    

    Based on the above tables, we can write an inner join as follows −

    testdb=# SELECT EMP_ID, NAME, DEPT FROM COMPANY RIGHT OUTER JOIN DEPARTMENT
       ON COMPANY.ID = DEPARTMENT.EMP_ID;
    

    The above given query will produce the following result −

     emp_id | name  | dept
    --------+-------+--------
          1 | Paul  | IT Billing
          2 | Allen | Engineering
          7 |       | Finance
    

    The FULL OUTER JOIN

    First, an inner join is performed. Then, for each row in table T1 that does not satisfy the join condition with any row in table T2, a joined row is added with null values in columns of T2. In addition, for each row of T2 that does not satisfy the join condition with any row in T1, a joined row with null values in the columns of T1 is added.

    The following is the syntax of FULL OUTER JOIN −

    SELECT ... FROM table1 FULL OUTER JOIN table2 ON conditional_expression ...
    

    Based on the above tables, we can write an inner join as follows −

    testdb=# SELECT EMP_ID, NAME, DEPT FROM COMPANY FULL OUTER JOIN DEPARTMENT
       ON COMPANY.ID = DEPARTMENT.EMP_ID;
    

    The above given query will produce the following result −

     emp_id | name  | dept
    --------+-------+---------------
          1 | Paul  | IT Billing
          2 | Allen | Engineering
          7 |       | Finance
            | James |
            | David |
            | Paul  |
            | Mark  |
            | Teddy |
            | James |
    

    Khóa học lập trình tại Toidayhoc vừa học vừa làm dự án vừa nhận lương: Khóa học lập trình nhận lương tại trung tâm Toidayhoc

  • Khóa học miễn phí PostgreSQL – Constraints nhận dự án làm có lương

    PostgreSQL – CONSTRAINTS



    Constraints are the rules enforced on data columns on table. These are used to prevent invalid data from being entered into the database. This ensures the accuracy and reliability of the data in the database.

    Constraints could be column level or table level. Column level constraints are applied only to one column whereas table level constraints are applied to the whole table. Defining a data type for a column is a constraint in itself. For example, a column of type DATE constrains the column to valid dates.

    The following are commonly used constraints available in PostgreSQL.

    • NOT NULL Constraint − Ensures that a column cannot have NULL value.

    • UNIQUE Constraint − Ensures that all values in a column are different.

    • PRIMARY Key − Uniquely identifies each row/record in a database table.

    • FOREIGN Key − Constrains data based on columns in other tables.

    • CHECK Constraint − The CHECK constraint ensures that all values in a column satisfy certain conditions.

    • EXCLUSION Constraint − The EXCLUDE constraint ensures that if any two rows are compared on the specified column(s) or expression(s) using the specified operator(s), not all of these comparisons will return TRUE.

    NOT NULL Constraint

    By default, a column can hold NULL values. If you do not want a column to have a NULL value, then you need to define such constraint on this column specifying that NULL is now not allowed for that column. A NOT NULL constraint is always written as a column constraint.

    A NULL is not the same as no data; rather, it represents unknown data.

    Example

    For example, the following PostgreSQL statement creates a new table called COMPANY1 and adds five columns, three of which, ID and NAME and AGE, specify not to accept NULL values −

    CREATE TABLE COMPANY1(
       ID INT PRIMARY KEY     NOT NULL,
       NAME           TEXT    NOT NULL,
       AGE            INT     NOT NULL,
       ADDRESS        CHAR(50),
       SALARY         REAL
    );
    

    UNIQUE Constraint

    The UNIQUE Constraint prevents two records from having identical values in a particular column. In the COMPANY table, for example, you might want to prevent two or more people from having identical age.

    Example

    For example, the following PostgreSQL statement creates a new table called COMPANY3 and adds five columns. Here, AGE column is set to UNIQUE, so that you cannot have two records with same age −

    CREATE TABLE COMPANY3(
       ID INT PRIMARY KEY     NOT NULL,
       NAME           TEXT    NOT NULL,
       AGE            INT     NOT NULL UNIQUE,
       ADDRESS        CHAR(50),
       SALARY         REAL    DEFAULT 50000.00
    );
    

    PRIMARY KEY Constraint

    The PRIMARY KEY constraint uniquely identifies each record in a database table. There can be more UNIQUE columns, but only one primary key in a table. Primary keys are important when designing the database tables. Primary keys are unique ids.

    We use them to refer to table rows. Primary keys become foreign keys in other tables, when creating relations among tables. Due to a ”longstanding coding oversight”, primary keys can be NULL in SQLite. This is not the case with other databases

    A primary key is a field in a table, which uniquely identifies each row/record in a database table. Primary keys must contain unique values. A primary key column cannot have NULL values.

    A table can have only one primary key, which may consist of single or multiple fields. When multiple fields are used as a primary key, they are called a composite key.

    If a table has a primary key defined on any field(s), then you cannot have two records having the same value of that field(s).

    Example

    You already have seen various examples above where we have created COMAPNY4 table with ID as primary key −

    CREATE TABLE COMPANY4(
       ID INT PRIMARY KEY     NOT NULL,
       NAME           TEXT    NOT NULL,
       AGE            INT     NOT NULL,
       ADDRESS        CHAR(50),
       SALARY         REAL
    );
    

    FOREIGN KEY Constraint

    A foreign key constraint specifies that the values in a column (or a group of columns) must match the values appearing in some row of another table. We say this maintains the referential integrity between two related tables. They are called foreign keys because the constraints are foreign; that is, outside the table. Foreign keys are sometimes called a referencing key.

    Example

    For example, the following PostgreSQL statement creates a new table called COMPANY5 and adds five columns.

    CREATE TABLE COMPANY6(
       ID INT PRIMARY KEY     NOT NULL,
       NAME           TEXT    NOT NULL,
       AGE            INT     NOT NULL,
       ADDRESS        CHAR(50),
       SALARY         REAL
    );
    

    For example, the following PostgreSQL statement creates a new table called DEPARTMENT1, which adds three columns. The column EMP_ID is the foreign key and references the ID field of the table COMPANY6.

    CREATE TABLE DEPARTMENT1(
       ID INT PRIMARY KEY      NOT NULL,
       DEPT           CHAR(50) NOT NULL,
       EMP_ID         INT      references COMPANY6(ID)
    );
    

    CHECK Constraint

    The CHECK Constraint enables a condition to check the value being entered into a record. If the condition evaluates to false, the record violates the constraint and is not entered into the table.

    Example

    For example, the following PostgreSQL statement creates a new table called COMPANY5 and adds five columns. Here, we add a CHECK with SALARY column, so that you cannot have any SALARY as Zero.

    CREATE TABLE COMPANY5(
       ID INT PRIMARY KEY     NOT NULL,
       NAME           TEXT    NOT NULL,
       AGE            INT     NOT NULL,
       ADDRESS        CHAR(50),
       SALARY         REAL    CHECK(SALARY > 0)
    );
    

    EXCLUSION Constraint

    Exclusion constraints ensure that if any two rows are compared on the specified columns or expressions using the specified operators, at least one of these operator comparisons will return false or null.

    Example

    For example, the following PostgreSQL statement creates a new table called COMPANY7 and adds five columns. Here, we add an EXCLUDE constraint −

    CREATE TABLE COMPANY7(
       ID INT PRIMARY KEY     NOT NULL,
       NAME           TEXT,
       AGE            INT  ,
       ADDRESS        CHAR(50),
       SALARY         REAL,
       EXCLUDE USING gist
       (NAME WITH =,
       AGE WITH )
    );
    

    Here, USING gist is the type of index to build and use for enforcement.

    You need to execute the command CREATE EXTENSION btree_gist, once per database. This will install the btree_gist extension, which defines the exclusion constraints on plain scalar data types.

    As we have enforced the age has to be same, let us see this by inserting records to the table −

    INSERT INTO COMPANY7 VALUES(1, ''Paul'', 32, ''California'', 20000.00 );
    INSERT INTO COMPANY7 VALUES(2, ''Paul'', 32, ''Texas'', 20000.00 );
    INSERT INTO COMPANY7 VALUES(3, ''Paul'', 42, ''California'', 20000.00 );
    

    For the first two INSERT statements, the records are added to the COMPANY7 table. For the third INSERT statement, the following error is displayed −

    ERROR:  conflicting key value violates exclusion constraint "company7_name_age_excl"
    DETAIL:  Key (name, age)=(Paul, 42) conflicts with existing key (name, age)=(Paul, 32).
    

    Dropping Constraints

    To remove a constraint you need to know its name. If the name is known, it is easy to drop. Else, you need to find out the system-generated name. The psql command d table name can be helpful here. The general syntax is −

    ALTER TABLE table_name DROP CONSTRAINT some_name;
    

    Khóa học lập trình tại Toidayhoc vừa học vừa làm dự án vừa nhận lương: Khóa học lập trình nhận lương tại trung tâm Toidayhoc

  • Khóa học miễn phí PostgreSQL – Group By nhận dự án làm có lương

    PostgreSQL – GROUP BY



    The PostgreSQL GROUP BY clause is used in collaboration with the SELECT statement to group together those rows in a table that have identical data. This is done to eliminate redundancy in the output and/or compute aggregates that apply to these groups.

    The GROUP BY clause follows the WHERE clause in a SELECT statement and precedes the ORDER BY clause.

    Syntax

    The basic syntax of GROUP BY clause is given below. The GROUP BY clause must follow the conditions in the WHERE clause and must precede the ORDER BY clause if one is used.

    SELECT column-list
    FROM table_name
    WHERE [ conditions ]
    GROUP BY column1, column2....columnN
    ORDER BY column1, column2....columnN
    

    You can use more than one column in the GROUP BY clause. Make sure whatever column you are using to group, that column should be available in column-list.

    Example

    Consider the table having records as follows −

    # select * from COMPANY;
     id | name  | age | address   | salary
    ----+-------+-----+-----------+--------
      1 | Paul  |  32 | California|  20000
      2 | Allen |  25 | Texas     |  15000
      3 | Teddy |  23 | Norway    |  20000
      4 | Mark  |  25 | Rich-Mond |  65000
      5 | David |  27 | Texas     |  85000
      6 | Kim   |  22 | South-Hall|  45000
      7 | James |  24 | Houston   |  10000
    (7 rows)
    

    If you want to know the total amount of salary of each customer, then GROUP BY query would be as follows −

    testdb=# SELECT NAME, SUM(SALARY) FROM COMPANY GROUP BY NAME;
    

    This would produce the following result −

      name  |  sum
     -------+-------
      Teddy | 20000
      Paul  | 20000
      Mark  | 65000
      David | 85000
      Allen | 15000
      Kim   | 45000
      James | 10000
    (7 rows)
    

    Now, let us create three more records in COMPANY table using the following INSERT statements −

    INSERT INTO COMPANY VALUES (8, ''Paul'', 24, ''Houston'', 20000.00);
    INSERT INTO COMPANY VALUES (9, ''James'', 44, ''Norway'', 5000.00);
    INSERT INTO COMPANY VALUES (10, ''James'', 45, ''Texas'', 5000.00);
    

    Now, our table has the following records with duplicate names −

      id | name  | age | address      | salary
     ----+-------+-----+--------------+--------
       1 | Paul  |  32 | California   |  20000
       2 | Allen |  25 | Texas        |  15000
       3 | Teddy |  23 | Norway       |  20000
       4 | Mark  |  25 | Rich-Mond    |  65000
       5 | David |  27 | Texas        |  85000
       6 | Kim   |  22 | South-Hall   |  45000
       7 | James |  24 | Houston      |  10000
       8 | Paul  |  24 | Houston      |  20000
       9 | James |  44 | Norway       |   5000
      10 | James |  45 | Texas        |   5000
    (10 rows)
    

    Again, let us use the same statement to group-by all the records using NAME column as follows −

    testdb=# SELECT NAME, SUM(SALARY) FROM COMPANY GROUP BY NAME ORDER BY NAME;
    

    This would produce the following result −

     name  |  sum
    -------+-------
     Allen | 15000
     David | 85000
     James | 20000
     Kim   | 45000
     Mark  | 65000
     Paul  | 40000
     Teddy | 20000
    (7 rows)
    

    Let us use ORDER BY clause along with GROUP BY clause as follows −

    testdb=#  SELECT NAME, SUM(SALARY)
             FROM COMPANY GROUP BY NAME ORDER BY NAME DESC;
    

    This would produce the following result −

     name  |  sum
    -------+-------
     Teddy | 20000
     Paul  | 40000
     Mark  | 65000
     Kim   | 45000
     James | 20000
     David | 85000
     Allen | 15000
    (7 rows)
    

    Khóa học lập trình tại Toidayhoc vừa học vừa làm dự án vừa nhận lương: Khóa học lập trình nhận lương tại trung tâm Toidayhoc

  • Khóa học miễn phí PostgreSQL – Having Clause nhận dự án làm có lương

    PostgreSQL – HAVING Clause



    The HAVING clause allows us to pick out particular rows where the function”s result meets some condition.

    The WHERE clause places conditions on the selected columns, whereas the HAVING clause places conditions on groups created by the GROUP BY clause.

    Syntax

    The following is the position of the HAVING clause in a SELECT query −

    SELECT
    FROM
    WHERE
    GROUP BY
    HAVING
    ORDER BY
    

    The HAVING clause must follow the GROUP BY clause in a query and must also precede the ORDER BY clause if used. The following is the syntax of the SELECT statement, including the HAVING clause −

    SELECT column1, column2
    FROM table1, table2
    WHERE [ conditions ]
    GROUP BY column1, column2
    HAVING [ conditions ]
    ORDER BY column1, column2
    

    Example

    Consider the table having records as follows −

    # select * from COMPANY;
     id | name  | age | address   | salary
    ----+-------+-----+-----------+--------
      1 | Paul  |  32 | California|  20000
      2 | Allen |  25 | Texas     |  15000
      3 | Teddy |  23 | Norway    |  20000
      4 | Mark  |  25 | Rich-Mond |  65000
      5 | David |  27 | Texas     |  85000
      6 | Kim   |  22 | South-Hall|  45000
      7 | James |  24 | Houston   |  10000
    (7 rows)
    

    The following is an example, which would display record for which the name count is less than 2 −

    testdb-# SELECT NAME FROM COMPANY GROUP BY name HAVING count(name) < 2;
    

    This would produce the following result −

      name
     -------
      Teddy
      Paul
      Mark
      David
      Allen
      Kim
      James
    (7 rows)
    

    Now, let us create three more records in COMPANY table using the following INSERT statements −

    INSERT INTO COMPANY VALUES (8, ''Paul'', 24, ''Houston'', 20000.00);
    INSERT INTO COMPANY VALUES (9, ''James'', 44, ''Norway'', 5000.00);
    INSERT INTO COMPANY VALUES (10, ''James'', 45, ''Texas'', 5000.00);
    

    Now, our table has the following records with duplicate names −

      id | name  | age | address      | salary
     ----+-------+-----+--------------+--------
       1 | Paul  |  32 | California   |  20000
       2 | Allen |  25 | Texas        |  15000
       3 | Teddy |  23 | Norway       |  20000
       4 | Mark  |  25 | Rich-Mond    |  65000
       5 | David |  27 | Texas        |  85000
       6 | Kim   |  22 | South-Hall   |  45000
       7 | James |  24 | Houston      |  10000
       8 | Paul  |  24 | Houston      |  20000
       9 | James |  44 | Norway       |   5000
      10 | James |  45 | Texas        |   5000
    (10 rows)
    

    The following is the example, which would display record for which the name count is greater than 1 −

    testdb-# SELECT NAME FROM COMPANY GROUP BY name HAVING count(name) > 1;
    

    This would produce the following result −

     name
    -------
     Paul
     James
    (2 rows)
    

    Khóa học lập trình tại Toidayhoc vừa học vừa làm dự án vừa nhận lương: Khóa học lập trình nhận lương tại trung tâm Toidayhoc

  • Khóa học miễn phí PostgreSQL – Distinct Keyword nhận dự án làm có lương

    PostgreSQL – DISTINCT Keyword



    The PostgreSQL DISTINCT keyword is used in conjunction with SELECT statement to eliminate all the duplicate records and fetching only unique records.

    There may be a situation when you have multiple duplicate records in a table. While fetching such records, it makes more sense to fetch only unique records instead of fetching duplicate records.

    Syntax

    The basic syntax of DISTINCT keyword to eliminate duplicate records is as follows −

    SELECT DISTINCT column1, column2,.....columnN
    FROM table_name
    WHERE [condition]
    

    Example

    Consider the table having records as follows −

    # select * from COMPANY;
     id | name  | age | address   | salary
    ----+-------+-----+-----------+--------
      1 | Paul  |  32 | California|  20000
      2 | Allen |  25 | Texas     |  15000
      3 | Teddy |  23 | Norway    |  20000
      4 | Mark  |  25 | Rich-Mond |  65000
      5 | David |  27 | Texas     |  85000
      6 | Kim   |  22 | South-Hall|  45000
      7 | James |  24 | Houston   |  10000
    (7 rows)
    

    Let us add two more records to this table as follows −

    INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)
    VALUES (8, ''Paul'', 32, ''California'', 20000.00 );
    
    INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)
    VALUES (9, ''Allen'', 25, ''Texas'', 15000.00 );
    

    Now, the records in the COMPANY table would be −

     id | name  | age | address    | salary
    ----+-------+-----+------------+--------
      1 | Paul  |  32 | California |  20000
      2 | Allen |  25 | Texas      |  15000
      3 | Teddy |  23 | Norway     |  20000
      4 | Mark  |  25 | Rich-Mond  |  65000
      5 | David |  27 | Texas      |  85000
      6 | Kim   |  22 | South-Hall |  45000
      7 | James |  24 | Houston    |  10000
      8 | Paul  |  32 | California |  20000
      9 | Allen |  25 | Texas      |  15000
    (9 rows)
    

    First, let us see how the following SELECT query returns duplicate salary records −

    testdb=# SELECT name FROM COMPANY;
    

    This would produce the following result −

     name
    -------
     Paul
     Allen
     Teddy
     Mark
     David
     Kim
     James
     Paul
     Allen
    (9 rows)
    

    Now, let us use DISTINCT keyword with the above SELECT query and see the result −

    testdb=# SELECT DISTINCT name FROM COMPANY;
    

    This would produce the following result where we do not have any duplicate entry −

     name
    -------
     Teddy
     Paul
     Mark
     David
     Allen
     Kim
     James
    (7 rows)
    

    Khóa học lập trình tại Toidayhoc vừa học vừa làm dự án vừa nhận lương: Khóa học lập trình nhận lương tại trung tâm Toidayhoc

  • Khóa học miễn phí PostgreSQL – With Clause nhận dự án làm có lương

    PostgreSQL – WITH Clause



    In PostgreSQL, the WITH query provides a way to write auxiliary statements for use in a larger query. It helps in breaking down complicated and large queries into simpler forms, which are easily readable. These statements often referred to as Common Table Expressions or CTEs, can be thought of as defining temporary tables that exist just for one query.

    The WITH query being CTE query, is particularly useful when subquery is executed multiple times. It is equally helpful in place of temporary tables. It computes the aggregation once and allows us to reference it by its name (may be multiple times) in the queries.

    The WITH clause must be defined before it is used in the query.

    Syntax

    The basic syntax of WITH query is as follows −

    WITH
       name_for_summary_data AS (
          SELECT Statement)
       SELECT columns
       FROM name_for_summary_data
       WHERE conditions <=> (
          SELECT column
          FROM name_for_summary_data)
       [ORDER BY columns]
    

    Where name_for_summary_data is the name given to the WITH clause. The name_for_summary_data can be the same as an existing table name and will take precedence.

    You can use data-modifying statements (INSERT, UPDATE or DELETE) in WITH. This allows you to perform several different operations in the same query.

    Recursive WITH

    Recursive WITH or Hierarchical queries, is a form of CTE where a CTE can reference to itself, i.e., a WITH query can refer to its own output, hence the name recursive.

    Example

    Consider the table having records as follows −

    testdb# select * from COMPANY;
     id | name  | age | address   | salary
    ----+-------+-----+-----------+--------
      1 | Paul  |  32 | California|  20000
      2 | Allen |  25 | Texas     |  15000
      3 | Teddy |  23 | Norway    |  20000
      4 | Mark  |  25 | Rich-Mond |  65000
      5 | David |  27 | Texas     |  85000
      6 | Kim   |  22 | South-Hall|  45000
      7 | James |  24 | Houston   |  10000
    (7 rows)
    

    Now, let us write a query using the WITH clause to select the records from the above table, as follows −

    With CTE AS
    (Select
     ID
    , NAME
    , AGE
    , ADDRESS
    , SALARY
    FROM COMPANY )
    Select * From CTE;
    

    The above given PostgreSQL statement will produce the following result −

    id | name  | age | address   | salary
    ----+-------+-----+-----------+--------
      1 | Paul  |  32 | California|  20000
      2 | Allen |  25 | Texas     |  15000
      3 | Teddy |  23 | Norway    |  20000
      4 | Mark  |  25 | Rich-Mond |  65000
      5 | David |  27 | Texas     |  85000
      6 | Kim   |  22 | South-Hall|  45000
      7 | James |  24 | Houston   |  10000
    (7 rows)
    

    Now, let us write a query using the RECURSIVE keyword along with the WITH clause, to find the sum of the salaries less than 20000, as follows −

    WITH RECURSIVE t(n) AS (
       VALUES (0)
       UNION ALL
       SELECT SALARY FROM COMPANY WHERE SALARY < 20000
    )
    SELECT sum(n) FROM t;
    

    The above given PostgreSQL statement will produce the following result −

      sum
    -------
     25000
    (1 row)
    

    Let us write a query using data modifying statements along with the WITH clause, as shown below.

    First, create a table COMPANY1 similar to the table COMPANY. The query in the example effectively moves rows from COMPANY to COMPANY1. The DELETE in WITH deletes the specified rows from COMPANY, returning their contents by means of its RETURNING clause; and then the primary query reads that output and inserts it into COMPANY1 TABLE −

    CREATE TABLE COMPANY1(
       ID INT PRIMARY KEY     NOT NULL,
       NAME           TEXT    NOT NULL,
       AGE            INT     NOT NULL,
       ADDRESS        CHAR(50),
       SALARY         REAL
    );
    
    WITH moved_rows AS (
       DELETE FROM COMPANY
       WHERE
          SALARY >= 30000
       RETURNING *
    )
    INSERT INTO COMPANY1 (SELECT * FROM moved_rows);
    

    The above given PostgreSQL statement will produce the following result −

    INSERT 0 3
    

    Now, the records in the tables COMPANY and COMPANY1 are as follows −

    testdb=# SELECT * FROM COMPANY;
     id | name  | age |  address   | salary
    ----+-------+-----+------------+--------
      1 | Paul  |  32 | California |  20000
      2 | Allen |  25 | Texas      |  15000
      3 | Teddy |  23 | Norway     |  20000
      7 | James |  24 | Houston    |  10000
    (4 rows)
    
    
    testdb=# SELECT * FROM COMPANY1;
     id | name  | age | address | salary
    ----+-------+-----+-------------+--------
      4 | Mark  |  25 | Rich-Mond   |  65000
      5 | David |  27 | Texas       |  85000
      6 | Kim   |  22 | South-Hall  |  45000
    (3 rows)
    

    Khóa học lập trình tại Toidayhoc vừa học vừa làm dự án vừa nhận lương: Khóa học lập trình nhận lương tại trung tâm Toidayhoc

  • Khóa học miễn phí PostgreSQL – Order By Clause nhận dự án làm có lương

    PostgreSQL – ORDER BY Clause



    The PostgreSQL ORDER BY clause is used to sort the data in ascending or descending order, based on one or more columns.

    Syntax

    The basic syntax of ORDER BY clause is as follows −

    SELECT column-list
    FROM table_name
    [WHERE condition]
    [ORDER BY column1, column2, .. columnN] [ASC | DESC];
    

    You can use more than one column in the ORDER BY clause. Make sure whatever column you are using to sort, that column should be available in column-list.

    Example

    Consider the table having records as follows −

    testdb# select * from COMPANY;
     id | name  | age | address   | salary
    ----+-------+-----+-----------+--------
      1 | Paul  |  32 | California|  20000
      2 | Allen |  25 | Texas     |  15000
      3 | Teddy |  23 | Norway    |  20000
      4 | Mark  |  25 | Rich-Mond |  65000
      5 | David |  27 | Texas     |  85000
      6 | Kim   |  22 | South-Hall|  45000
      7 | James |  24 | Houston   |  10000
    (7 rows)
    

    The following is an example, which would sort the result in ascending order by SALARY −

    testdb=# SELECT * FROM COMPANY ORDER BY AGE ASC;
    

    This would produce the following result −

      id | name  | age | address    | salary
     ----+-------+-----+------------+--------
       6 | Kim   |  22 | South-Hall |  45000
       3 | Teddy |  23 | Norway     |  20000
       7 | James |  24 | Houston    |  10000
       8 | Paul  |  24 | Houston    |  20000
       4 | Mark  |  25 | Rich-Mond  |  65000
       2 | Allen |  25 | Texas      |  15000
       5 | David |  27 | Texas      |  85000
       1 | Paul  |  32 | California |  20000
       9 | James |  44 | Norway     |   5000
      10 | James |  45 | Texas      |   5000
    (10 rows)
    

    The following is an example, which would sort the result in ascending order by NAME and SALARY −

    testdb=# SELECT * FROM COMPANY ORDER BY NAME, SALARY ASC;
    

    This would produce the following result −

     id | name  | age | address      | salary
    ----+-------+-----+--------------+--------
      2 | Allen |  25 | Texas        |  15000
      5 | David |  27 | Texas        |  85000
     10 | James |  45 | Texas        |   5000
      9 | James |  44 | Norway       |   5000
      7 | James |  24 | Houston      |  10000
      6 | Kim   |  22 | South-Hall   |  45000
      4 | Mark  |  25 | Rich-Mond    |  65000
      1 | Paul  |  32 | California   |  20000
      8 | Paul  |  24 | Houston      |  20000
      3 | Teddy |  23 | Norway       |  20000
    (10 rows)
    

    The following is an example, which would sort the result in descending order by NAME −

    testdb=# SELECT * FROM COMPANY ORDER BY NAME DESC;
    

    This would produce the following result −

     id | name  | age | address    | salary
    ----+-------+-----+------------+--------
      3 | Teddy |  23 | Norway     |  20000
      1 | Paul  |  32 | California |  20000
      8 | Paul  |  24 | Houston    |  20000
      4 | Mark  |  25 | Rich-Mond  |  65000
      6 | Kim   |  22 | South-Hall |  45000
      7 | James |  24 | Houston    |  10000
      9 | James |  44 | Norway     |   5000
     10 | James |  45 | Texas      |   5000
      5 | David |  27 | Texas      |  85000
      2 | Allen |  25 | Texas      |  15000
    (10 rows)
    

    Khóa học lập trình tại Toidayhoc vừa học vừa làm dự án vừa nhận lương: Khóa học lập trình nhận lương tại trung tâm Toidayhoc

  • Khóa học miễn phí PostgreSQL – Limit Clause nhận dự án làm có lương

    PostgreSQL – LIMIT Clause



    The PostgreSQL LIMIT clause is used to limit the data amount returned by the SELECT statement.

    Syntax

    The basic syntax of SELECT statement with LIMIT clause is as follows −

    SELECT column1, column2, columnN
    FROM table_name
    LIMIT [no of rows]
    

    The following is the syntax of LIMIT clause when it is used along with OFFSET clause −

    SELECT column1, column2, columnN
    FROM table_name
    LIMIT [no of rows] OFFSET [row num]
    

    LIMIT and OFFSET allow you to retrieve just a portion of the rows that are generated by the rest of the query.

    Example

    Consider the table having records as follows −

    # select * from COMPANY;
     id | name  | age | address   | salary
    ----+-------+-----+-----------+--------
      1 | Paul  |  32 | California|  20000
      2 | Allen |  25 | Texas     |  15000
      3 | Teddy |  23 | Norway    |  20000
      4 | Mark  |  25 | Rich-Mond |  65000
      5 | David |  27 | Texas     |  85000
      6 | Kim   |  22 | South-Hall|  45000
      7 | James |  24 | Houston   |  10000
    (7 rows)
    

    The following is an example, which limits the row in the table according to the number of rows you want to fetch from table −

    testdb=# SELECT * FROM COMPANY LIMIT 4;
    

    This would produce the following result −

     id | name  | age | address     | salary
    ----+-------+-----+-------------+--------
      1 | Paul  |  32 | California  |  20000
      2 | Allen |  25 | Texas       |  15000
      3 | Teddy |  23 | Norway      |  20000
      4 | Mark  |  25 | Rich-Mond   |  65000
    (4 rows)
    

    However, in certain situation, you may need to pick up a set of records from a particular offset. Here is an example, which picks up three records starting from the third position −

    testdb=# SELECT * FROM COMPANY LIMIT 3 OFFSET 2;
    

    This would produce the following result −

     id | name  | age | address   | salary
    ----+-------+-----+-----------+--------
      3 | Teddy |  23 | Norway    |  20000
      4 | Mark  |  25 | Rich-Mond |  65000
      5 | David |  27 | Texas     |  85000
    (3 rows)
    

    Khóa học lập trình tại Toidayhoc vừa học vừa làm dự án vừa nhận lương: Khóa học lập trình nhận lương tại trung tâm Toidayhoc

  • Khóa học miễn phí PostgreSQL – Delete Query nhận dự án làm có lương

    PostgreSQL – DELETE Query



    The PostgreSQL DELETE Query is used to delete the existing records from a table. You can use WHERE clause with DELETE query to delete the selected rows. Otherwise, all the records would be deleted.

    Syntax

    The basic syntax of DELETE query with WHERE clause is as follows −

    DELETE FROM table_name
    WHERE [condition];
    

    You can combine N number of conditions using AND or OR operators.

    Example

    Consider the table , having records as follows −

    # select * from COMPANY;
     id | name  | age | address   | salary
    ----+-------+-----+-----------+--------
      1 | Paul  |  32 | California|  20000
      2 | Allen |  25 | Texas     |  15000
      3 | Teddy |  23 | Norway    |  20000
      4 | Mark  |  25 | Rich-Mond |  65000
      5 | David |  27 | Texas     |  85000
      6 | Kim   |  22 | South-Hall|  45000
      7 | James |  24 | Houston   |  10000
    (7 rows)
    

    The following is an example, which would DELETE a customer whose ID is 7 −

    testdb=# DELETE FROM COMPANY WHERE ID = 2;
    

    Now, COMPANY table will have the following records −

     id | name  | age | address     | salary
    ----+-------+-----+-------------+--------
      1 | Paul  |  32 | California  |  20000
      3 | Teddy |  23 | Norway      |  20000
      4 | Mark  |  25 | Rich-Mond   |  65000
      5 | David |  27 | Texas       |  85000
      6 | Kim   |  22 | South-Hall  |  45000
      7 | James |  24 | Houston     |  10000
    (6 rows)
    

    If you want to DELETE all the records from COMPANY table, you do not need to use WHERE clause with DELETE queries, which would be as follows −

    testdb=# DELETE FROM COMPANY;
    

    Now, COMPANY table does not have any record because all the records have been deleted by the DELETE statement.


    Khóa học lập trình tại Toidayhoc vừa học vừa làm dự án vừa nhận lương: Khóa học lập trình nhận lương tại trung tâm Toidayhoc

  • Khóa học miễn phí PostgreSQL – Like Clause nhận dự án làm có lương

    PostgreSQL – LIKE Clause



    The PostgreSQL LIKE operator is used to match text values against a pattern using wildcards. If the search expression can be matched to the pattern expression, the LIKE operator will return true, which is 1.

    There are two wildcards used in conjunction with the LIKE operator −

    • The percent sign (%)
    • The underscore (_)

    The percent sign represents zero, one, or multiple numbers or characters. The underscore represents a single number or character. These symbols can be used in combinations.

    If either of these two signs is not used in conjunction with the LIKE clause, then the LIKE acts like the equals operator.

    Syntax

    The basic syntax of % and _ is as follows −

    SELECT FROM table_name
    WHERE column LIKE ''XXXX%''
    
    or
    
    SELECT FROM table_name
    WHERE column LIKE ''%XXXX%''
    
    or
    
    SELECT FROM table_name
    WHERE column LIKE ''XXXX_''
    
    or
    
    SELECT FROM table_name
    WHERE column LIKE ''_XXXX''
    
    or
    
    SELECT FROM table_name
    WHERE column LIKE ''_XXXX_''
    

    You can combine N number of conditions using AND or OR operators. Here XXXX could be any numeric or string value.

    Example

    Here are number of examples showing WHERE part having different LIKE clause with ”%” and ”_” operators −

    S. No. Statement & Description
    1

    WHERE SALARY::text LIKE ”200%”

    Finds any values that start with 200

    2

    WHERE SALARY::text LIKE ”%200%”

    Finds any values that have 200 in any position

    3

    WHERE SALARY::text LIKE ”_00%”

    Finds any values that have 00 in the second and third positions

    4

    WHERE SALARY::text LIKE ”2_%_%”

    Finds any values that start with 2 and are at least 3 characters in length

    5

    WHERE SALARY::text LIKE ”%2”

    Finds any values that end with 2

    6

    WHERE SALARY::text LIKE ”_2%3”

    Finds any values that have 2 in the second position and end with a 3

    7

    WHERE SALARY::text LIKE ”2___3”

    Finds any values in a five-digit number that start with 2 and end with 3

    Postgres LIKE is String compare only. Hence, we need to explicitly cast the integer column to string as in the examples above.

    Let us take a real example, consider the table , having records as follows −

    # select * from COMPANY;
     id | name  | age | address   | salary
    ----+-------+-----+-----------+--------
      1 | Paul  |  32 | California|  20000
      2 | Allen |  25 | Texas     |  15000
      3 | Teddy |  23 | Norway    |  20000
      4 | Mark  |  25 | Rich-Mond |  65000
      5 | David |  27 | Texas     |  85000
      6 | Kim   |  22 | South-Hall|  45000
      7 | James |  24 | Houston   |  10000
    (7 rows)
    

    The following is an example, which would display all the records from COMPANY table where AGE starts with 2 −

    testdb=# SELECT * FROM COMPANY WHERE AGE::text LIKE ''2%
    

    This would produce the following result −

     id | name  | age | address     | salary
    ----+-------+-----+-------------+--------
      2 | Allen |  25 | Texas       |  15000
      3 | Teddy |  23 | Norway      |  20000
      4 | Mark  |  25 | Rich-Mond   |  65000
      5 | David |  27 | Texas       |  85000
      6 | Kim   |  22 | South-Hall  |  45000
      7 | James |  24 | Houston     |  10000
      8 | Paul  |  24 | Houston     |  20000
    (7 rows)
    

    The following is an example, which would display all the records from COMPANY table where ADDRESS will have a hyphen (-) inside the text −

    testdb=# SELECT * FROM COMPANY WHERE ADDRESS  LIKE ''%-%
    

    This would produce the following result −

     id | name | age |                      address              | salary
    ----+------+-----+-------------------------------------------+--------
      4 | Mark |  25 | Rich-Mond                                 |  65000
      6 | Kim  |  22 | South-Hall                                |  45000
    (2 rows)
    

    Khóa học lập trình tại Toidayhoc vừa học vừa làm dự án vừa nhận lương: Khóa học lập trình nhận lương tại trung tâm Toidayhoc