A legjobb SQL adatbázis oktatóanyagok

Az SQL a strukturált lekérdezési nyelv rövidítése. Ez a leggyakoribb eszköz, amelyet egy relációs adatbázisban (gyakran „SQL adatbázis” néven emlegetnek) kezelnek és kezelnek.

Az SQL-t általában „folytatásnak” mondják. A legnépszerűbb változatok a MySQL, a PostgreSQL és az SQLite - az SQL egyik változata, amelyet gyakran használnak prototípusok készítéséhez. Bevezette azt a koncepciót, hogy sok rekordhoz egyetlen paranccsal, SQL lekérdezésekkel lehet hozzáférni.

Javasoljuk, hogy kezdje a freeCodeCamp 4 órás SQL adatbázis-bemutatójával.

Javasoljuk továbbá a Harvard CS50 adatbázisokról és SQL-ről szóló tanfolyamát.

És ha kedvet érez hozzá, itt van egy teljes 9 órás oktatóanyag a relációs adatbázis-tervezésről, így saját RDBMS rendszerét építheti fel SQL használatával.

Néhány általános SQL utasítás és lekérdezés

Az SQL Select utasítás

Select és From záradékok

A lekérdezés SELECT része általában annak meghatározása, hogy az adatok mely oszlopait jelenítsék meg az eredményekben. Vannak olyan lehetőségek is, amelyeket alkalmazni lehet olyan adatok megjelenítésére, amelyek nem táblázatos oszlopok.

Ez a példa három oszlopot mutat be a „diák” táblázatból és egy számított oszlopot. Az adatbázis tárolja a hallgató azonosítóját, utónevét és vezetéknevét. Kombinálhatjuk a Vezeték és a Vezeték oszlopokat a Teljes név számított oszlop létrehozásához.

select studentID, FirstName, LastName, FirstName + ' ' + LastName as FullName from student;
+-----------+-------------------+------------+------------------------+ | studentID | FirstName | LastName | FullName | +-----------+-------------------+------------+------------------------+ | 1 | Monique | Davis | Monique Davis | | 2 | Teri | Gutierrez | Teri Gutierrez | | 3 | Spencer | Pautier | Spencer Pautier | | 4 | Louis | Ramsey | Louis Ramsey | | 5 | Alvin | Greene | Alvin Greene | | 6 | Sophie | Freeman | Sophie Freeman | | 7 | Edgar Frank "Ted" | Codd | Edgar Frank "Ted" Codd | | 8 | Donald D. | Chamberlin | Donald D. Chamberlin | | 9 | Raymond F. | Boyce | Raymond F. Boyce | +-----------+-------------------+------------+------------------------+ 9 rows in set (0.00 sec)

A CHECK megszorítás az oszlopba helyezhető értéktartomány korlátozására szolgál.

Ha CHECK korlátozást határoz meg egyetlen oszlopban, akkor csak bizonyos értékeket engedélyez ennek az oszlopnak.

Ha CHECK korlátozást határoz meg egy táblán, korlátozhatja egyes oszlopok értékeit a sor többi oszlopának értéke alapján.

SQL ELLENŐRZÉS A CREATE TABLE-n

A következő SQL létrehoz egy CHECK korlátozást az „Age” oszlopban a „Persons” tábla létrehozásakor. Az ELLENŐRZÉSI kényszer biztosítja, hogy 18 év alatti személyek ne legyenek:

MySQL:

CREATE TABLE Persons ( ID int NOT NULL, LastName varchar(255) NOT NULL, FirstName varchar(255), Age int, CHECK (Age>=18) );

SQL Server / Oracle / MS Access:

CREATE TABLE Persons ( ID int NOT NULL, LastName varchar(255) NOT NULL, FirstName varchar(255), Age int CHECK (Age>=18) );

A CHECK korlátozás elnevezésének engedélyezéséhez és a CHECK korlátozás több oszlopban történő meghatározásához használja a következő SQL szintaxist:

MySQL / SQL Server / Oracle / MS Access:

CREATE TABLE Persons ( ID int NOT NULL, LastName varchar(255) NOT NULL, FirstName varchar(255), Age int, City varchar(255), CONSTRAINT CHK_Person CHECK (Age>=18 AND City="Sandnes") );

SQL ELLENŐRZÉS AZ ALTER TÁBLÁZATON

Ha a táblát már létrehozta, akkor az „Élet” oszlopban hozzon létre CHECK korlátozást, használja a következő SQL-t:

MySQL / SQL Server / Oracle / MS Access:

ALTER TABLE Persons ADD CHECK (Age>=18);

A CHECK korlátozás elnevezésének engedélyezéséhez és a CHECK korlátozás több oszlopban történő meghatározásához használja a következő SQL szintaxist:

MySQL / SQL Server / Oracle / MS Access:

ALTER TABLE Persons ADD CONSTRAINT CHK_PersonAge CHECK (Age>=18 AND City="Sandnes");

DROP egy CHECK kényszer

A CHECK korlátozás elvetéséhez használja a következő SQL-t:

SQL Server / Oracle / MS Access:

ALTER TABLE Persons DROP CONSTRAINT CHK_PersonAge;

MySQL:

ALTER TABLE Persons DROP CHECK CHK_PersonAge; 

SQL Hol záradék

WHERESzakasz (és / vagy a, IN, BETWEEN, és a LIKE)

A WHEREzáradék a visszaadott sorok számának korlátozására szolgál.

Ebben az esetben mind az ötet egy kissé nevetséges WHEREzáradék fogja használni .

Itt található a jelenlegi teljes hallgatói lista, amely összehasonlítható a WHEREzáradék eredményhalmazával:

select studentID, FullName, sat_score, rcd_updated from student;
+-----------+------------------------+-----------+---------------------+ | studentID | FullName | sat_score | rcd_updated | +-----------+------------------------+-----------+---------------------+ | 1 | Monique Davis | 400 | 2017-08-16 15:34:50 | | 2 | Teri Gutierrez | 800 | 2017-08-16 15:34:50 | | 3 | Spencer Pautier | 1000 | 2017-08-16 15:34:50 | | 4 | Louis Ramsey | 1200 | 2017-08-16 15:34:50 | | 5 | Alvin Greene | 1200 | 2017-08-16 15:34:50 | | 6 | Sophie Freeman | 1200 | 2017-08-16 15:34:50 | | 7 | Edgar Frank "Ted" Codd | 2400 | 2017-08-16 15:35:33 | | 8 | Donald D. Chamberlin | 2400 | 2017-08-16 15:35:33 | | 9 | Raymond F. Boyce | 2400 | 2017-08-16 15:35:33 | +-----------+------------------------+-----------+---------------------+ 9 rows in set (0.00 sec)

Sorok kerülnek bemutatásra, amelyek…

  • WHERE A diákigazolványok 1 és 5 között vannak (beleértve)
  • OR studentID = 8

Itt van egy frissített lekérdezés, ahol nem jelennek meg azok a rekordok, amelyek SAT pontszámmal rendelkeznek ebben a listában (1000, 1400):

select studentID, FullName, sat_score, recordUpdated from student where (studentID between 1 and 5 or studentID = 8) and sat_score NOT in (1000, 1400);
+-----------+----------------------+-----------+---------------------+ | studentID | FullName | sat_score | rcd_updated | +-----------+----------------------+-----------+---------------------+ | 1 | Monique Davis | 400 | 2017-08-16 15:34:50 | | 2 | Teri Gutierrez | 800 | 2017-08-16 15:34:50 | | 4 | Louis Ramsey | 1200 | 2017-08-16 15:34:50 | | 5 | Alvin Greene | 1200 | 2017-08-16 15:34:50 | | 8 | Donald D. Chamberlin | 2400 | 2017-08-16 15:35:33 | +-----------+----------------------+-----------+---------------------+ 5 rows in set (0.00 sec)

* Mint mindezen SQL dolgok esetében, SOKKAL TÖBB számuk is van bennük, mint ami ebben a bevezető útmutatóban található.

Remélem, hogy ez legalább annyit ad a kezdéshez.

Kérjük, olvassa el az adatbázis-kezelő kézikönyvét, és jó szórakozást próbáljon ki magának a különböző lehetőségekkel.

SQL frissítési nyilatkozat

Egy táblázat rekordjának frissítéséhez használja az UPDATEutasítást.

Légy óvatos. Frissítheti a táblázat összes rekordját, vagy csak néhányat. A WHEREfeltétel segítségével adja meg, mely rekordokat kívánja frissíteni. Egyszerre egy vagy több oszlop frissítése lehetséges. A szintaxis a következő:

UPDATE table_name SET column1 = value1, column2 = value2, ... WHERE condition;

Íme egy példa a rekord nevének az Id 4-re történő frissítésére:

UPDATE Person SET Name = “Elton John” WHERE Id = 4;

A táblázat oszlopait is frissítheti más táblák értékeinek felhasználásával. Használjon JOINzáradékot, ha több táblából szeretne adatokat szerezni. A szintaxis a következő:

UPDATE table_name1 SET table_name1.column1 = table_name2.columnA table_name1.column2 = table_name2.columnB FROM table_name1 JOIN table_name2 ON table_name1.ForeignKey = table_name2.Key

Íme egy példa az összes rekord kezelőjének frissítésére:

UPDATE Person SET Person.Manager = Department.Manager FROM Person JOIN Department ON Person.DepartmentID = Department.ID

Mit tehet egy Update lekérdezés

A frissítési lekérdezés lehetővé teszi a DBA vagy az SQL programozó számára, hogy sok rekordot frissítsen egy paranccsal.

Fontos biztonsági tipp! Mindig legyen biztonsági másolata a változtatásról, mielőtt megváltoztatná!

Ez a szakasz:

  • adjon hozzá egy új mezőt a hallgató táblához
  • tesztelje a logikát, hogy frissítse a mezőt egy iskolához rendelt e-mail címmel
  • frissítse az új mezőt.

Itt van a diáktábla, amikor elkezdjük ezt a folyamatot:

SELECT * FROM student;
+-----------+------------------------+-----------+------------------+---------------------+---------------------+ | studentID | FullName | sat_score | programOfStudy | rcd_Created | rcd_Updated | +-----------+------------------------+-----------+------------------+---------------------+---------------------+ | 1 | Monique Davis | 400 | Literature | 2017-08-16 15:34:50 | 2017-08-16 15:34:50 | | 2 | Teri Gutierrez | 800 | Programming | 2017-08-16 15:34:50 | 2017-08-16 15:34:50 | | 3 | Spencer Pautier | 1000 | Programming | 2017-08-16 15:34:50 | 2017-08-16 15:34:50 | | 4 | Louis Ramsey | 1200 | Programming | 2017-08-16 15:34:50 | 2017-08-16 15:34:50 | | 5 | Alvin Greene | 1200 | Programming | 2017-08-16 15:34:50 | 2017-08-16 15:34:50 | | 6 | Sophie Freeman | 1200 | Programming | 2017-08-16 15:34:50 | 2017-08-16 15:34:50 | | 7 | Edgar Frank "Ted" Codd | 2400 | Computer Science | 2017-08-16 15:35:33 | 2017-08-16 15:35:33 | | 8 | Donald D. Chamberlin | 2400 | Computer Science | 2017-08-16 15:35:33 | 2017-08-16 15:35:33 | | 9 | Raymond F. Boyce | 2400 | Computer Science | 2017-08-16 15:35:33 | 2017-08-16 15:35:33 | +-----------+------------------------+-----------+------------------+---------------------+---------------------+ 9 rows in set (0.00 sec)

Módosítsa a táblázatot, és adjon hozzá egy új mezőt

 ALTER TABLE `fcc_sql_guides_database`.`student` ADD COLUMN `schoolEmailAdr` VARCHAR(125) NULL AFTER `programOfStudy`;

A diákasztal az alter végrehajtása után.

mysql> SELECT FullName, sat_score, programOfStudy, schoolEmailAdr FROM student; +------------------------+-----------+------------------+----------------+ | FullName | sat_score | programOfStudy | schoolEmailAdr | +------------------------+-----------+------------------+----------------+ | Monique Davis | 400 | Literature | NULL | | Teri Gutierrez | 800 | Programming | NULL | | Spencer Pautier | 1000 | Programming | NULL | | Louis Ramsey | 1200 | Programming | NULL | | Alvin Greene | 1200 | Programming | NULL | | Sophie Freeman | 1200 | Programming | NULL | | Edgar Frank "Ted" Codd | 2400 | Computer Science | NULL | | Donald D. Chamberlin | 2400 | Computer Science | NULL | | Raymond F. Boyce | 2400 | Computer Science | NULL | +------------------------+-----------+------------------+----------------+ 9 rows in set (0.00 sec)

A logika tesztelése (NAGYON fontos lépés!)

SELECT FullName, instr(FullName," ") AS firstSpacePosition, concat(substring(FullName,1,instr(FullName," ")-1),"@someSchool.edu") AS schoolEmail FROM student;
+------------------------+--------------------+------------------------+ | FullName | firstSpacePosition | schoolEmail | +------------------------+--------------------+------------------------+ | Monique Davis | 8 | [email protected] | | Teri Gutierrez | 5 | [email protected] | | Spencer Pautier | 8 | [email protected] | | Louis Ramsey | 6 | [email protected] | | Alvin Greene | 6 | [email protected] | | Sophie Freeman | 7 | [email protected] | | Edgar Frank "Ted" Codd | 6 | [email protected] | | Donald D. Chamberlin | 7 | [email protected] | | Raymond F. Boyce | 8 | [email protected] | +------------------------+--------------------+------------------------+ 9 rows in set (0.00 sec)

Megjegyzés a concat () -ról: a MySQL-ben ezt a parancsot a karakterláncok kombinálására használják, más SQL-verziókban nem így (ellenőrizze a kézikönyvet). Ebben a használatban ez így működik: A FullName mező alszövegét az első szóközig, de az első helyet nem számítva, a „@ someSchool.edu” -val kombináljuk. A való világban ennek sokkal összetettebbnek kellene lennie, és biztosítania kell, hogy az e-mail cím egyedi legyen.

A frissítés végrehajtása

Úgy teszünk, mintha ezt szeretnénk, és frissítjük a táblázatot ezekkel az információkkal:

UPDATE student SET schoolEmailAdr = concat(substring(FullName,1,instr(FullName," ")-1),"@someSchool.edu") WHERE schoolEmailAdr is NULL;

Siker!

mysql> SELECT FullName, sat_score, programOfStudy, schoolEmailAdr FROM student; +------------------------+-----------+------------------+------------------------+ | FullName | sat_score | programOfStudy | schoolEmailAdr | +------------------------+-----------+------------------+------------------------+ | Monique Davis | 400 | Literature | [email protected] | | Teri Gutierrez | 800 | Programming | [email protected] | | Spencer Pautier | 1000 | Programming | [email protected] | | Louis Ramsey | 1200 | Programming | [email protected] | | Alvin Greene | 1200 | Programming | [email protected] | | Sophie Freeman | 1200 | Programming | [email protected] | | Edgar Frank "Ted" Codd | 2400 | Computer Science | [email protected] | | Donald D. Chamberlin | 2400 | Computer Science | [email protected] | | Raymond F. Boyce | 2400 | Computer Science | [email protected] | +------------------------+-----------+------------------+------------------------+ 9 rows in set (0.00 sec)