SQL înseamnă Structured Query Language. Este cel mai comun instrument utilizat pentru manipularea și gestionarea datelor într-o bază de date relațională (adesea denumită „bază de date SQL”).

SQL se pronunță în mod obișnuit „continuare”. Cele mai populare variante ale sale sunt MySQL, PostgreSQL și SQLite – o versiune de SQL care este frecvent utilizată pentru prototipare. A introdus conceptul de accesare a mai multor înregistrări cu o singură comandă, utilizând interogări SQL.

Vă recomandăm să începeți cu Routech’s Tutorial baza de date SQL de 4 ore.

Cele mai bune tutoriale pentru baze de date SQL

De asemenea, vă recomandăm Cursul Harvard CS50 despre baze de date și SQL.

Și dacă vă faceți plăcere, iată un întreg Tutorial de 9 ore despre proiectarea bazelor de date relaționale astfel încât să vă puteți construi propriul sistem RDBMS folosind SQL.

1611943445 571 Cele mai bune tutoriale pentru baze de date SQL

Unele instrucțiuni și interogări SQL obișnuite

Instrucțiunea SQL Select

Selectați și din clauzele

Partea SELECT a unei interogări este în mod normal pentru a determina ce coloane din date să se afișeze în rezultate. Există, de asemenea, opțiuni pe care le puteți aplica pentru a afișa date care nu sunt o coloană de tabel.

Acest exemplu prezintă trei coloane selectate din tabelul „student” și o coloană calculată. Baza de date stochează studentID, prenume și prenume ale studentului. Putem combina coloanele Numele și Numele pentru a crea coloana calculată FullName.

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)

Constrângerea CHECK este utilizată pentru a limita intervalul de valori care poate fi plasat într-o coloană.

Dacă definiți o constrângere CHECK pe o singură coloană, aceasta permite numai anumite valori pentru această coloană.

Dacă definiți o constrângere CHECK pe un tabel, aceasta poate limita valorile din anumite coloane pe baza valorilor din alte coloane din rând.

SQL CHECK pe CREATE TABLE

Următorul SQL creează o constrângere CHECK pe coloana „Vârstă” când se creează tabelul „Persoane”. Constrângerea CHECK vă asigură că nu puteți avea nicio persoană sub 18 ani:

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)
);

Pentru a permite denumirea unei constrângeri CHECK și pentru definirea unei constrângeri CHECK pe mai multe coloane, utilizați următoarea sintaxă SQL:

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 CHECK pe ALTER TABLE

Pentru a crea o constrângere CHECK pe coloana „Age” când tabela este deja creată, utilizați următorul SQL:

MySQL / SQL Server / Oracle / MS Access:

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

Pentru a permite denumirea unei constrângeri CHECK și pentru definirea unei constrângeri CHECK pe mai multe coloane, utilizați următoarea sintaxă SQL:

MySQL / SQL Server / Oracle / MS Access:

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

DROP a CHECK Constraint

Pentru a renunța la o constrângere CHECK, utilizați următorul SQL:

SQL Server / Oracle / MS Access:

ALTER TABLE Persons
DROP CONSTRAINT CHK_PersonAge;

MySQL:

ALTER TABLE Persons
DROP CHECK CHK_PersonAge; 

Clauza SQL unde

WHERE Clauza (și / sau, IN, BETWEEN, și LIKE)

WHERE clauza este utilizată pentru a limita numărul de rânduri returnate.

În acest caz, toate cele cinci vor fi utilizate este oarecum ridicol WHERE clauză.

Iată lista completă actuală a studenților pentru a compara cu WHERE set de rezultate ale clauzei:

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)

Vor fi prezentate rândurile care …

  • WHERE ID-urile de student sunt cuprinse între 1 și 5 (inclusiv)
  • OR studentID = 8

Iată o interogare actualizată, în care orice înregistrare care are un scor SAT care se află în această listă (1000, 1400) nu va fi prezentată:

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)

* La fel ca în toate aceste lucruri SQL, există MULTE MULT pentru ele decât cele din acest ghid introductiv.

Sper că acest lucru vă oferă cel puțin suficient pentru a începe.

Vă rugăm să consultați manualul pentru managerul de baze de date și distrați-vă încercând singuri diferite opțiuni.

Instrucțiune de actualizare SQL

Pentru a actualiza o înregistrare într-un tabel, utilizați UPDATE afirmație.

Ai grija. Puteți actualiza toate înregistrările tabelului sau doar câteva. Folosește WHERE condiție pentru a specifica ce înregistrări doriți să actualizați. Este posibil să actualizați una sau mai multe coloane odată. Sintaxa este:

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

Iată un exemplu de actualizare a numelui înregistrării cu Id 4:

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

De asemenea, puteți actualiza coloanele dintr-un tabel utilizând valori din alte tabele. Utilizare JOIN pentru a obține date din mai multe tabele. Sintaxa este:

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

Iată un exemplu de actualizare a managerului tuturor înregistrărilor:

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

Ce poate face o interogare de actualizare

O interogare de actualizare oferă programatorului care utilizează DBA sau SQL posibilitatea de a actualiza mai multe înregistrări cu o singură comandă.

Sfat important de siguranță! Aveți întotdeauna o copie de rezervă a ceea ce urmează să schimbați ÎNAINTE să o modificați!

Această secțiune va:

  • adăugați un câmp nou în tabelul studenților
  • testați logica pentru a actualiza acel câmp cu o adresă de e-mail atribuită școlii
  • actualizați noul câmp.

Iată tabelul studenților în timp ce începem acest proces:

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)

Modificați tabelul și adăugați un câmp nou

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

Tabelul studentului după executarea modificării este executat.

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)

TESTAREA logicii (pas FOARTE important!)

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 | Monique@someSchool.edu |
| Teri Gutierrez         |                  5 | Teri@someSchool.edu    |
| Spencer Pautier        |                  8 | Spencer@someSchool.edu |
| Louis Ramsey           |                  6 | Louis@someSchool.edu   |
| Alvin Greene           |                  6 | Alvin@someSchool.edu   |
| Sophie Freeman         |                  7 | Sophie@someSchool.edu  |
| Edgar Frank "Ted" Codd |                  6 | Edgar@someSchool.edu   |
| Donald D. Chamberlin   |                  7 | Donald@someSchool.edu  |
| Raymond F. Boyce       |                  8 | Raymond@someSchool.edu |
+------------------------+--------------------+------------------------+
9 rows in set (0.00 sec)

O notă despre concat (): în MySQL această comandă este utilizată pentru șiruri combinate, nu în alte versiuni SQL (verificați manualul). În această utilizare, funcționează astfel: Sub șirul câmpului FullName până la primul spațiu, fără a include, este combinat cu „@ someSchool.edu”. În lumea reală, acest lucru TREBUIE să fie mult mai complex și ar trebui să vă asigurați că adresa de e-mail este unică.

Se face actualizarea

Ne vom preface că asta este ceea ce dorim și vom actualiza tabelul cu aceste informații:

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

Succes!

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