sql >> Databáze >  >> RDS >> Mysql

Co je SQL? Co je databáze? Systémy správy relačních databází (RDBMS) Vysvětleno v jednoduché angličtině.

Databází může být složité zamotat si hlavu. Jsou však nezbytné pro kompletní programování a vytváření back-endových služeb, které ukládají data.

V tomto příspěvku demystifikuji SQL, databáze a systémy správy relačních databází. Budu také používat některé analogie s kouzelnickým světem, včetně samotného Harryho Pottera a některých lekcí, které navštěvuje v Bradavicích.

Než se ponoříme do klíčových pojmů, pojďme definovat, co je samotná databáze:

Adatabáze je strukturovaný soubor dat uchovávaných v počítači, zejména takový, který je přístupný různými způsoby. Jde v podstatě o organizovaný soubor dat v počítači, ke kterému lze přistupovat elektronicky z počítačového systému.

Klíčové podmínky

Níže jsou uvedeny některé klíčové pojmy, kterými začneme:

  • RDMS: Systémy správy relačních databází. Tento rámec pro databáze je základem MySQL.
  • SQL: strukturovaný dotazovací jazyk.
  • Tabulky: Databázové objekty, které přenášejí data. Příkladem názvu tabulky je „Studenti“ nebo „Učitelé“ nebo „Kurzy“.
  • Pole: Hodnoty tabulky jsou známé jako pole. Příkladem polí pro studenty mohou být „First Name“, „Last Name“ a „GPA“.
  • Záznam/Řádek: Samostatný záznam v tabulce.

Po přidání učitelů a kurzů do databáze můžeme mít tabulky pro studenty, učitele a kurzy.

Při postupu v průvodci budeme používat pouze Studenti příklad zde jako reference. Pokud jste měli to štěstí, že jste byli najati jako softwarový inženýr v Bradavicích, vaše databáze by mohla dobře využít některé z těchto příkazů :D

Příkazy SQL

Syntaxe

Středník je standardní způsob, jak oddělit jeden příkaz SQL od druhého. Umožňuje spuštění více příkazů SQL ve stejném volání. V této příručce budeme mít na konci každého příkazu středník.

Nejdůležitější příkazy SQL

Vytvořit :Vytvoří novou SQL tabulku.

Pokud bychom vytvářeli databázi studentů například pro školu v Bradavicích, použili bychom VYTVOŘIT vytvořit stůl s názvem „Studenti“.

  • Syntaxe
CREATE TABLE table_name (
    column1 datatype,
    column2 datatype,
    column3 datatype,
   ....
);
  • Příklad
CREATE TABLE Students
                (first_name VARCHAR(255),
                last_name VARCHAR(255),
                login VARCHAR(255),
                age INTEGER,
                gpa REAL,
                house VARCHAR(255));

Vypustit :Smaže tabulku. Při používání tohoto příkazu buďte velmi opatrní, protože tím vymažete všechna data v tabulce!

Pokud bychom chtěli smazat celou databázi studentů, použijeme DROP k provedení této akce.

  • Syntaxe
DROP TABLE table_name;
  • Příklad
DROP TABLE Students;

Vložit :Přidá do tabulky nové řádky dat.

Použili bychom INSERT přidat nové studenty, když se zapíší do Bradavic.

  • Syntaxe
INSERT INTO table_name (column1, column2, column3, ...)
VALUES (value1, value2, value3, ...);
  • Příklad
INSERT 
INTO Students(first_name, last_name, login, age, gpa, house)
VALUES 
('Harry',     'Potter', 'theboywholived', 15, 4.0, 'Gryffindor'),
('Hermionie', 'Granger','granger2',       15, 4.5, 'Gryffindor'),
('Ron',       'Weasley','weasley7',       15, 3.7, 'Gryffindor'),
('Draco',     'Malfoy', 'malfoy999',      15, 4.0, 'Slytherin'),
('Cedric',    'Diggory','diggory123',     15, 4.0, 'Hufflepuff');

Vyberte :Používá se k načtení dat v databázi, která mají být vrácena ve formátu tabulky.

Pokud bychom chtěli získat všechna jména studentů, která jsou v Gryffindor House, použili bychom SELECT příkaz. Níže uvedený příklad se dotazuje tabulky Studenti na jméno a příjmení každého studenta v databázi, což je pro nás pouze pět výše popsaných řádků.

  • Syntaxe
SELECT column1, column2, ...
FROM table_name;
  • Příklad
SELECT first_name, last_name FROM Students;
first_name last_name
Harry Potter
Hermionie Grangerová
Ron Weasley
Draco Malfoy
Cedric Diggory

Případně, pokud chceme vybrat všechna pole v tabulce, náš příkaz by použil syntaxi "*", což znamená výběr všech polí:

SELECT * FROM Students;
first_name last_name přihlášení věk gpa dům
Harry Potter chlapec, který žil 15 4 Nebelvír
Hermionie Grangerová granger2 15 4.5 Nebelvír
Ron Weasley weasley7 15 3.7 Nebelvír
Draco Malfoy malfoy999 15 4 Zmijozel
Cedric Diggory diggory123 15 4 Mrzimor

Klauzuly

klauzule je logická část příkazu SQL a je (teoreticky) volitelným polem.

Ve výše uvedeném příkazu jsme jednoduše vrátili všechna pole v databázi Student. Nespecifikovali jsme podmínku pro vracené hodnoty.

Co kdybychom se chtěli zeptat ne všech studentů, ale pouze těch, jejichž dům je Nebelvír? Co takhle dotazovat se studentů, jejichž křestní jméno začíná na „H“, nebo studentů z Mrzimoru a Zmijozelu? Tyto složitější případy jsou řešeny klauzulemi SQL.

Níže je uveden přehled nejběžnějších klauzulí, ale v jazyce SQL existuje několik dalších klauzulí. Zde je dobrý obecný přehled, pokud chcete nějaké další informace.

Příklady klauzulí

Kde: Používá se ke stanovení podmínky při načítání dat z databáze. Když se vrátíme k příkladu s Select, museli bychom použít WHERE za účelem specifikovat dům jako Nebelvír.

  • Syntaxe
SELECT column1, column2, ...
FROM table_name
WHERE condition;
  • Příklad
SELECT * FROM Students
WHERE house='Gryffindor';
first_name last_name přihlášení věk gpa dům
Harry Potter chlapec, který žil 15 4 Nebelvír
Hermionie Grangerová granger2 15 4.5 Nebelvír
Ron Weasley weasley7 15 3.7 Nebelvír

A Používá se ke kombinaci více klauzulí v příkazu SQL, kde jsou všechny podmínky oddělené AND. Použili bychom AND, abychom získali nebelvírské studenty, kteří mají vyšší než 3,8 GPA.

  • Syntaxe
SELECT column1, column2, ...
FROM table_name
WHERE condition1 AND condition2 AND condition3 ...;
  • Příklad
SELECT * FROM Students
WHERE house='Gryffindor' AND gpa>3.8;
first_name last_name přihlášení věk gpa dům
Harry Potter chlapec, který žil 15 4 Nebelvír
Hermionie Grangerová granger2 15 4.5 Nebelvír

Nebo :Podobné jako AND, ale vrací pouze data, ve kterých platí pouze JEDNA z podmínek oddělených NEBO. Pokud bychom chtěli získat studenty v Mrzimoru a Zmijozelu, ale ne v obou, použili bychom příkaz OR.

  • Syntaxe
SELECT column1, column2, ...
FROM table_name
WHERE condition1 OR condition2 OR condition3 ...;
  • Příklad
SELECT * FROM Students
WHERE house='Slytherin' OR house='Hufflepuff';
first_name last_name přihlášení věk gpa dům
Draco Malfoy malfoy999 15 4 Zmijozel
Cedric Diggory diggory123 15 4 Mrzimor

To se mi líbí: Používá se s WHERE k vyhledání konkrétního vzoru. Pokud bychom chtěli pouze jméno a příjmení čarodějů/čarodějnic se jmény začínajícími na „H“, mohli bychom použít příkaz Like.

  • Syntaxe
SELECT column1, column2, ...
FROM table_name
WHERE columnN LIKE pattern;
  • Příklad
SELECT first_name, last_name FROM Students
WHERE first_name LIKE 'H%';
first_name last_name
Harry Potter
Hermionie Grangerová

Počet: Používá se k nalezení počtu sloupců (nebo sloupců) v tabulce.

  • Syntaxe
SELECT COUNT(column_name)
FROM table_name
WHERE condition;
  • Příklad
SELECT COUNT(first_name) FROM Students;
POČET(křestní_jméno)
5

Dva další příkazy, které používají stejnou syntaxi, jsou AVG a SUM. AVG vypočítá průměr všech hodnot a suma vypočítá součet všech hodnot.

Vyberte Limit: Používá se k oříznutí odpovědí pouze na zadané množství. Způsob výběru nejlepších odpovědí je v pořadí prvního vložení do databáze chronologicky.

  • Syntaxe
SELECT column_name(s)
FROM table_name
WHERE condition
LIMIT number;
  • Příklad
SELECT * FROM Students LIMIT 3;
first_name last_name přihlášení věk gpa dům
Harry Potter chlapec, který žil 15 4 Nebelvír
Hermionie Grangerová granger2 15 4.5 Nebelvír
Ron Weasley weasley7 15 3.7 Nebelvír

Další užitečné příkazy

Objednat podle: Seřadí výsledky vzestupně nebo sestupně.

  • Syntaxe
SELECT column1, column2, ...
FROM table_name
ORDER BY column1, column2, ... ASC|DESC;
  • Příklad
SELECT * FROM Students ORDER BY first_name;
first_name last_name přihlášení věk gpa dům
Cedric Diggory diggory123 15 4 Mrzimor
Draco Malfoy malfoy999 15 4 Zmijozel
Harry Potter chlapec, který žil 15 4 Nebelvír
Hermionie Grangerová granger2 15 4.5 Nebelvír
Ron Weasley weasley7 15 3.7 Nebelvír

Seskupit podle: Seskupuje kategorie, které mají stejné hodnoty, do řádků. Pokud byste chtěli znát počet studentů v každém domě (například 3 v Nebelvíru), můžete použít příkaz Seskupit podle.

  • Syntaxe
SELECT column_name(s)
FROM table_name
WHERE condition
GROUP BY column_name(s)
ORDER BY column_name(s);
  • Příklad
SELECT COUNT(first_name), house FROM Students GROUP BY house;
POČET(křestní_jméno) dům
3 Nebelvír
1 Mrzimor
1 Zmijozel

Konečně je zde DB Fiddle, který ukazuje všechny výše uvedené příkazy v akci!

Normalizované vs. denormalizované databáze

Při navrhování databáze se můžete řídit dvěma hlavními návrhovými vzory, z nichž každý má své vlastní kompromisy.

Normalizováno: Optimalizuje pro minimalizace redundance ne na čtení.

Řekněme, že máme tabulku kurzů, která má ID učitele pro učitele, který daný kurz vyučuje. Máme také databázi učitelů, která má jméno učitele.

Když chceme získat jména učitelů vyučujících konkrétní kurz, budeme se muset dotazovat na tabulky Kurzy i Učitelé, protože tabulka kurzů nemá jméno učitele (efektivní, ale nadbytečné).

Denormalizováno: Optimalizuje pro dobu čtení , nikoli pro minimalizaci redundance.

Řekněme, že máme tabulku kurzů, která má ID učitele A jméno učitele. Máme databázi učitelů, která má také jméno učitele. Když chceme získat jména učitelů v kurzu, můžeme použít tabulku kurzů (nadbytečná, ale efektivní).

Integrita dat

Pro uživatele je životně důležité, aby data, se kterými interagují, byla bezpečná, správná a rozumná. Příklady jsou ujištění, že věk není záporné číslo nebo že žádní dva studenti nemají stejné informace. Označujeme to jakointegrita dat.

Integrita dat má několik podob a lze ji rozdělit do čtyř kategorií:

  • Integrita entity :V tabulce neexistují žádné duplicitní řádky. Například Rona Weasleyho nemůžeme do databáze vložit dvakrát.
  • Integrita domény :Omezení typu hodnot, které lze vkládat za účelem vynucení správných hodnot. Dům může být například pouze Nebelvír, Havraspár, Zmijozel nebo Mrzimor.
  • Referenční integrita :Záznamy, které používají jiné záznamy, nelze smazat. Učitele nelze smazat, pokud právě vyučuje kurz.
  • Uživatelsky definovaná integrita: „Jiná“ kategorie, která se skládá z obchodní logiky a pravidel pro databázi.

Běžné databáze SQL

  • Oracle :Velmi stabilní a vyzrálý, ale může být nákladný
  • MySQL :Lehké a rychlé nastavení, ale ne tak vyspělé jako Oracle
  • PostgreSQL :Dobré pro určité případy použití, ale ne super rychlé

Zdroje

  • SWEPrep – Otázky k rozhovoru přímo do vaší doručené pošty
  • SQL a databáze freeCodeCamp
  • Čistý kód
  • Efektivní Java
  • Dokumentace Oracle
  • Dokumentace MySql
  • Dokumentace PostgreSQL

Zůstaňte aktuální

  • Vlákna Reddit :Skvělá vlákna o databázích, SQL a nových technologiích
  • Hacker News: Opravdu skvělý zdroj, jak zůstat v obraze o nejnovějším vývoji v technologickém průmyslu
  • CodePen: Vynikající zdroj pro objevování správných postupů SQL.


  1. Nesprávný soubor klíče MySQL pro tabulku tmp při vytváření více spojení

  2. Přehled různých metod skenování v PostgreSQL

  3. Výjimka v hlavním vláknu java.sql.SQLException:Přístup odepřen uživateli ''@'localhost' (pomocí hesla:NE)

  4. Koncepty Oracle High Availability v PostgreSQL