SQL -

Subqueries, Joins, Groups

Quick Recap

  • Database
  • Relational Database vs Non-relation Database
  • SQL
  • Database Management System
  • Primary Keys vs Foreign keys
  • plain JOIN

INSERT Multiple Rows

New Definitions

  1. DDL (Data Definition Language)
    • CREATE
    • ALTER
    • DROP
  2. DML (Data Manipulation Language)
    • SELECT
    • INSERT
    • UPDATE
    • DELETE

SELECT *

  FROM some_table

But what if we want:

  • to order the rows
  • to select first N rows
  • to select first N rows after the Xth row

SELECT *

  FROM some_table

  ORDER BY some_column ASC/DESC

  • by default order is ASC (ascending)
  • DESC (descending)
  • ORDER BY several columns

SELECT *

  FROM some_table

    LIMIT 10

    OFFSET 2

SELECT.. AS

 SELECT column_name AS "Column name"
   FROM some_table;
   
   
   
SELECT s.column_name, o.column_name
   FROM some_table AS s
   JOIN other_table AS o
   ON s.title = o.movietitle;

Subquery

SubQueries

SELECT column(s)

FROM table(s)

WHERE some_column operator ( SELECT columns(s)

                                                             FROM table(s)

                                                             WHERE some_column operator some_value)

Където:

  • Резултатът от вътрешната(Inner) заявка се подава на външната(Outer) заявка
  • Двете заявки можем да ги смятаме за независими една от друга

Inner Query(Вътрешна заявка)

Outer Query(Външна заявка)

Inner query

Outer query

1

2

Co-related Queries

SELECT column(s)

FROM table T1

WHERE some_column operator ( SELECT columns(s)

                                                             FROM table T2

                                                             WHERE T2.some_column operator T1.some_column)

Където:

  • Всеки запис от външната заявка заявка се подава на вътрешната, изпълнява се вътрешната и резултатът от нея се подава отново на въшната.
  • Двете заявки можем да ги смятаме за зависими една от друга

Inner Query(Вътрешна заявка)

Outer Query(Външна заявка)

Inner query

Outer query

2

1

Database Normalization

1NF - First normal form

"Each column in each table should be atomic !"

2NF - Second normal form 

1NF + "All columns should be solely dependent on one column (primary key)"

3NF - Third normal form 

2NF + "There should be no column entity that's dependent other value than PK in one table. If there's such, move it to another table"

There are ~10

database normal forms
 

But before that..

Data is not only stored as tables..
It's always READ as tables!
In other words:
The result of SELECT is a table

AGGREGATIONS

 

  • SUM
  • MAX
  • MIN
  • AVG
  • COUNT

GROUP BY

SELECT COUNT(ID), AGE

  FROM PROGRAMMER

  GROUP BY  AGE;

  • COUNT - името на агрегацията
  • GROUP BY - колоната според която искаме да групираме

 

GROUP BY ще раздели резултата на групи според AGE, и ще покаже COUNT-а на ID-тата във всяка група.

Заявката ще покаже по колко програмисти имаме в таблицата(COUNT) от всяка възраст(AGE).

HAVING

SELECT COUNT(ID), AGE

  FROM PROGRAMMER

  GROUP BY  AGE

    HAVING ID > 2;

  • HAVING - филтрира резултатите във всяка група

     

Заявката ще покаже по колко програмисти имаме в таблицата(COUNT) от всяка възраст(AGE) където ID-то във всяка възрастова група е над 2.

JOINS

LEFT

RIGHT

INNER

OUTER

INNER JOIN

SELECT *

FROM table1

INNER JOIN table2

ON clause;

Връща сечението между две или повече таблици. Резултатът е нова таблица с всички редове, който отговарят на условието след ON.

OUTER JOIN

SELECT columns

FROM table1

FULL OUTER JOIN table2

ON clause;

Резултатът е обединението между таблиците.

LEFT (OUTER) JOIN

SELECT columns

FROM table1

LEFT JOIN table2

ON clause;

Резултатът е нова таблица с всички редове от лявата таблица заедно с редовете от дясната таблица, които отговарят на условието след ON. На редовете, където няма match между таблиците се записват null стойности.

RIGHT (OUTER) JOIN

SELECT columns

FROM table1

RIGHT JOIN table2

ON clause;

Резултатът е нова таблица с всички редове от дясната таблица заедно с редовете от лявата таблица, които отговарят на условието след ON. На редовете, където няма match между таблиците се записват null стойности.

JOINS

LEFT

RIGHT

INNER

OUTER

- All rows from inner join

- All rows from the main(left) table (with `null` values for all fields from the joined table)

- All rows from inner join

- All rows from the joined(right) table (with `null` values for all fields from the main table)

Python 101 9th SQL Queries, Joins, Groups

By Hack Bulgaria

Python 101 9th SQL Queries, Joins, Groups

  • 1,016