sql >> Database teknologi >  >> RDS >> Database

SQL INSERT INTO... VÆLG eksempler

SQL INSERT sætning bruges mest til at indsætte individuelle rækker i en tabel.

Men du kan også indsætte resultaterne af en forespørgsel i en tabel. Det betyder, at du kan indsætte flere rækker på én gang (så længe de returneres af forespørgslen).

Grundlæggende eksempel

Her er et grundlæggende eksempel at demonstrere.

INSERT INTO Pets2SELECT * FRA Pets; 

Det indsætter alle rækker fra Kæledyr tabel til Kæledyr2 tabel.

Det antager, at vi allerede har oprettet Pets2 tabel, og at den har den korrekte definition.

Hvis det ikke findes, eller hvis det ikke har den korrekte definition, får du en fejl.

Indsæt data fra flere tabeller

Du kan bruge denne metode til at indsætte data fra flere tabeller.

INSERT INTO PetsTypesOwnersSELECT p.PetId, p.PetName, p.DOB, pt.PetTypeId, pt.PetType, o.OwnerId, o.FirstName, o.LastName, o.Phone, o.EmailFROM Pets p INNER JOIN PetTypes pt ON p.PetTypeId =pt.PetTypeId INNER JOIN Ejere o ON p.OwnerId =o.OwnerId;

I dette eksempel indsatte jeg data fra tre tabeller i en tabel kaldet PetsTypesOwners .

Bemærk, at jeg udtrykkeligt har angivet hver kolonne. Jeg gjorde dette, fordi destinationskolonnen har færre kolonner end de tre tabeller tilsammen. I dette tilfælde er det fordi, hvis jeg havde valgt alle kolonner, ville forespørgslen have returneret duplikerede kolonner på grund af fremmednøgler med samme navn og værdi som deres primære nøgler.

Hvis jeg ville inkludere disse dubletkolonner, skulle destinationskolonnen inkludere disse dubletkolonner, men med et andet navn for en af ​​hvert dubletpar.

Her er et eksempel på valg af alle kolonner (jeg vælger dem eksplicit her, så du kan se deres navne):

INSERT INTO PetsTypesOwners2SELECT p.PetId, p.OwnerId, p.PetTypeId, p.PetName, p.DOB, pt.PetTypeId, pt.PetType, o.OwnerId, o.FirstName, o.LastName, o .Phone, o.EmailFROM Pets p INNER JOIN PetTypes pt ON p.PetTypeId =pt.PetTypeId INNER JOIN Ejere o ON p.OwnerId =o.OwnerId;

Du kan se, at der er to kolonner kaldet OwnerId og to kaldet PetTypeId , hver fra et andet bord. Disse er de primære nøgler og fremmednøgler i deres respektive tabeller.

Da disse kolonner er dubletter, inkluderede jeg kun én af hver i det foregående eksempel. Men til formålet med denne demo, har jeg inkluderet dem i dette eksempel.

Så for at tage højde for denne nye INSERT INTO...SELECT sætning, har vi brug for, at vores destinationstabel har det korrekte antal kolonner og med en kompatibel definition.

Derfor kan vores destinationstabels definition se nogenlunde sådan ud:

CREATE TABLE PetsTypesOwners2 ( PetId int NOT NULL PRIMARY KEY, PetPetType varchar(60) NOT NULL, PetOwnerId int NOT NULL, PetName varchar(60) NOT NULL, DOB date NULL, PetType NULL,(PET NOTyp 60) NOT NULL, OwnerId int NOT NULL, FirstName varchar(60) NOT NULL, Efternavn varchar(60) NOT NULL, Telefon varchar(20) NOT NULL, Email varchar(254)); 

I dette tilfælde har jeg præfikset en af ​​hver dubletkolonne med Pet . Specifikt oprettede jeg et PetPetTypeId (som er knyttet til p.OwnerId kolonne i forespørgslen) og PetOwnerId kolonne (som er knyttet til p.PetTypeId kolonne i forespørgslen).

Det er dog vigtigt at bemærke, at det er ligegyldigt, hvad du kalder dine kolonner i destinationstabellen. INSERT INTO... SELECT udtalelsen er ligeglad med det. INSERT INTO... SELECT erklæring er kun interesseret i kolonnerækkefølgen.

Indsæt data fra en visning

Du kan bruge den samme INSERT INTO... SELECT syntaks for at indsætte data i en tabel fra en visning.

Her er et hurtigt eksempel:

INSERT INTO PetTypeCountSELECT * FRA vPetTypeCount; 

I dette tilfælde vPetTypeCount er en visning, og jeg indsætter dens indhold i en tabel kaldet PetTypeCount .

Indsæt data fra en lagret procedure

Nogle DBMS'er (såsom SQL Server) kan også bruge den samme INSERT INTO... SELECT syntaks til at indsætte data i en tabel fra en lagret procedure.

Her er et hurtigt eksempel:

INSERT INTO PetByIdEXEC uspGetPetById 2; 

Igen forudsætter dette, at vi har en destinationstabel med den korrekte definition.

SELECT INTO Erklæring

Afhængigt af dit DBMS er der også en SELECT INTO sætning, som du kan bruge til automatisk at oprette en ny tabel baseret på resultatsættet, og derefter indsætte det resultatsæt i det.


  1. psql:FATAL:database <bruger> eksisterer ikke

  2. Hvad er den bedste måde at oprette og udfylde en taltabel på?

  3. Postgres holdt lige tilfældigt op med at virke (Rails, PGSQL.5432)

  4. Mysql tæller forekomster af understreng, og bestil derefter efter