De bedste SQL Database-tutorials

SQL står for Structured Query Language. Det er det mest almindelige værktøj, der bruges til at manipulere og administrere data i en relationsdatabase (ofte omtalt som en "SQL-database").

SQL er ofte udtalt "efterfølger". Dens mest populære varianter er MySQL, PostgreSQL og SQLite - en version af SQL, der ofte bruges til prototyping. Det introducerede konceptet med at få adgang til mange poster med en enkelt kommando ved hjælp af SQL-forespørgsler.

Vi anbefaler, at du starter med freeCodeCamp's 4-timers SQL-database-tutorial.

Vi anbefaler også Harvard CS50's kursus om databaser og SQL.

Og hvis du har lyst til det, her er en hel 9-timers tutorial om relationsdatabasedesign, så du kan opbygge dit eget RDBMS-system ved hjælp af SQL.

Nogle almindelige SQL-sætninger og forespørgsler

SQL Select-erklæringen

Vælg og fra klausuler

SELECT-delen af ​​en forespørgsel er normalt at bestemme, hvilke kolonner af data der skal vises i resultaterne. Der er også muligheder, du kan anvende til at vise data, der ikke er en tabelkolonne.

Dette eksempel viser tre kolonner valgt fra "student" -tabellen og en beregnet kolonne. Databasen gemmer studentens id, fornavn og efternavn for studerende. Vi kan kombinere kolonnerne Første og Efternavn for at oprette den beregnede kolonne Fuldnavn.

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)

CHECK-begrænsningen bruges til at begrænse det værdiområde, der kan placeres i en kolonne.

Hvis du definerer en CHECK-begrænsning på en enkelt kolonne, tillader den kun visse værdier for denne kolonne.

Hvis du definerer en CHECK-begrænsning på en tabel, kan den begrænse værdierne i bestemte kolonner baseret på værdier i andre kolonner i rækken.

SQL CHECK på CREATE TABLE

Følgende SQL opretter en CHECK-begrænsning i kolonnen "Alder", når tabellen "Personer" oprettes. CHECK-begrænsningen sikrer, at du ikke kan have nogen person under 18 år:

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

For at tillade navngivning af en CHECK-begrænsning og til at definere en CHECK-begrænsning på flere kolonner skal du bruge følgende SQL-syntaks:

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 på ALTER TABLE

For at oprette en CHECK-begrænsning i kolonnen "Alder", når tabellen allerede er oprettet, skal du bruge følgende SQL:

MySQL / SQL Server / Oracle / MS Access:

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

For at tillade navngivning af en CHECK-begrænsning og til at definere en CHECK-begrænsning på flere kolonner skal du bruge følgende SQL-syntaks:

MySQL / SQL Server / Oracle / MS Access:

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

DROP en CHECK-begrænsning

Brug følgende SQL for at droppe en CHECK-begrænsning:

SQL Server / Oracle / MS Access:

ALTER TABLE Persons DROP CONSTRAINT CHK_PersonAge;

MySQL:

ALTER TABLE Persons DROP CHECK CHK_PersonAge; 

SQL hvor klausul

WHEREBestemmelse (og / eller, IN, BETWEEN, og LIKE)

Den WHEREklausul bruges til at begrænse antallet af rækker returneres.

I dette tilfælde vil alle disse fem blive brugt, er en noget latterlig WHEREklausul.

Her er den aktuelle fulde elevliste til sammenligning med WHEREsætningsresultatsættet:

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)

Rækker vil blive præsenteret for, at ...

  • WHERE Studerende-id'er er mellem 1 og 5 (inklusive)
  • OR studentID = 8

Her er en opdateret forespørgsel, hvor enhver post, der har en SAT-score, der er på denne liste (1000, 1400) ikke vil blive præsenteret:

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)

* Som med alle disse SQL-ting er der MEGET MERE til dem end hvad der er i denne introduktionsvejledning.

Jeg håber, at dette i det mindste giver dig nok til at komme i gang.

Se vejledningen til din databaseadministrator og have det sjovt selv at prøve forskellige muligheder.

SQL-opdateringserklæring

For at opdatere en post i en tabel bruger du UPDATEudsagnet.

Be careful. You can update all records of the table or just a few. Use the WHERE condition to specify which records you want to update. It is possible to update one or more columns at a time. The syntax is:

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

Here is an example updating the Name of the record with Id 4:

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

You can also update columns in a table by using values from other tables. Use JOIN clause to get data from multiple tables. The syntax is:

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

Here is an example updating Manager of all records:

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

What an Update query can do

An update query gives the DBA or SQL-using programmer the ability to update many records with one command.

Important Safety Tip! Always have a backup copy of what you are about to change BEFORE you change it!

This section will:

  • add a new field to the student table
  • test the logic to update that field with a school assigned email address
  • opdater det nye felt.

Her er elevtabellen, når vi starter denne 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)

Ændr tabellen, og tilføj et nyt felt

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

Elevtabellen efter ændringen er udført.

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)

TEST af logikken (MEGET vigtigt skridt!)

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)

En note om concat (): i MySQL bruges denne kommando til at kombinere strenge, ikke sådan i andre SQL-versioner (se din manual). I denne brug fungerer det således: Understrengningen af ​​FullName-feltet op til, men ikke med det første mellemrum, kombineres med “@ someSchool.edu”. I den virkelige verden SKAL dette være meget mere komplekst, og du bliver nødt til at sikre, at e-mail-adressen er unik.

Udfører opdateringen

Vi foregiver at det er det, vi vil have, og opdaterer tabellen med disse oplysninger:

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