Windows.  Virus.  Bärbara datorer.  Internet.  Kontor.  Verktyg.  Förare

UPDATE kommando— gör ändringar i en befintlig post eller flera poster i en tabell SQL. Ändrar befintliga värden i en tabell eller vyns huvudtabell.

UPDATE Kommando Kommandosyntax

UPDATE Kommandosyntax

UPDATE kommando. Grundläggande nyckelord och parametrar för kommandot UPDATE

  • schema - en behörighetsidentifierare, vanligtvis samma som ett användarnamn
  • bordsvy - tabellnamn SQL, där uppgifterna ändras; om en vy är definierad, ändras data i huvudtabellen SQL inlagor
  • subquery_1 - subquery, som servern behandlar på samma sätt som en vy
  • Medolumn - tabell kolumn SQL eller inlagor SQL, vars värde ändras; om tabellkolumnen är från en mening UPPSÄTTNING utelämnas, förblir kolumnvärdet oförändrat
  • expr - ; detta uttryck kan innehålla huvudvariabler och valfria indikatorvariabler
  • underfråga_2 - nytt värde tilldelat motsvarande kolumn
  • underfråga_3 - nytt värde tilldelat motsvarande kolumn

DÄR- definierar intervallet av rader som ska modifieras av de för vilka ett visst villkor gäller SANN; om denna fras utelämnas ändras alla rader i tabellen eller vyn.
När ett godkännande utfärdas, ev UPPDATERING utlösare, definieras i tabellen.
Underfrågor. Om erbjudandet UPPSÄTTNING innehåller underfråga, returnerar den exakt en rad för varje modifierad rad. Varje värde i underfrågans resultat tilldelas motsvarande listkolumner inom parentes. Om underfrågan inte returnerar några rader tilldelas kolumnen NULL. Underfrågor kan välja data från den ändrade tabellen. Erbjuda UPPSÄTTNING kan kombinera uttryck och underfrågor.

UPDATE Kommando Exempel 1
Ändra betyget för alla köpare till ett värde lika med 200:

Kunder UPPSÄTTNING betyg = 200;

UPDATE Kommando Exempel 2
Att ersätta ett kolumnvärde över alla rader i en tabell används i allmänhet sällan. Därför i laget, som i laget RADERA, kan du använda ett predikat. För att utföra den angivna ersättningen av värdena i betygskolumnen, för alla kunder som betjänas av säljaren Giovanni (snum = 1003), ska du ange:

Kunder UPPSÄTTNING betyg = 200 WHERE snum = 1001;

SQL UPDATE Kommando Exempel 3
I en mening UPPSÄTTNING Du kan ange valfritt antal värden för kolumnerna, separerade med kommatecken:

Emp UPPSÄTTNING jobb = 'MANAGER', sal = sal + 1000, deptnr = 20 WHERE ename = 'JONES';

UPDATE Kommando Exempel 4
I en mening UPPSÄTTNING du kan ange ett NULL-värde utan att använda någon speciell syntax (som IS NULL). Således, om du vill ställa in alla kundbetyg från London (stad = 'London') till NULL, anger du:

Kunder UPPSÄTTNING betyg = NULL WHERE stad = 'London';

UPDATE Kommando Exempel 5
Förklarar användningen av följande kommandosyntax:

  • Båda meningsformerna UPPSÄTTNING tillsammans i ett uttalande.
  • Underfråga.
  • En WHERE-sats som begränsar intervallet av rader som kan ändras.

Emp a UPPSÄTTNING avdnr =
(VÄLJA deptno FROM dept WHERE loc = 'BOSTON'), (sal, comm) = ( VÄLJA 1,1*AVG(sal), 1,5*AVG(komm.) FRÅN emp b WHERE a.deptno = b.deptno) WHERE deptno IN ( VÄLJA deptno FROM dept WHERE loc = 'DALLAS' ELLER loc = 'DETROIT');

Ovanstående uttalande gör följande:

  • Ändrar endast de anställda som arbetar i Dallas eller Detroit
  • Ställer in värdet på kolumnen deptno för anställda från Boston
  • Sätter lönen för varje anställd till 1,1 gånger snittlönen för hela avdelningen
  • Sätter varje anställds provision till 1,5 gånger den genomsnittliga provisionen för hela avdelningen

SQL Server-plattformen stöder de flesta av de grundläggande komponenterna i ANSI UPDATE-satsen, men stöder inte nyckelorden ONLY och ARRAY och stöder inte möjligheten att uppdatera arrayer. SQL Server har utökat funktionaliteten för UPDATE-satsen till att inkludera tabelltips med hjälp av WITH-satsen, frågetips med OPTION-satsen och mer robust variabelhantering. Syntaxen är som följer.

UPPDATERING (tabellnamn | visningsnamn | raduppsättning)] SET (kolumnnamn=(DEFAULT | NULL | skalärt uttryck) |

stigbygel namn=scalar_expression| variabelnamn=kolumnnamn=skalärt_uttryck) [, ...] ]

WHERE (villkor | CURRENT OF cursor_name)]

Syntaxelementen i UPDATE-satsen i SQL Server är följande.

MED ledtråd

Låter dig använda tabelltips och åsidosätter standardbeteendet för frågeoptimeraren. Eftersom frågeoptimeraren är mycket bra på att välja bearbetningsplaner, använd bara tips om du har en mycket god förståelse för de tabeller, index och data som påverkas av operationen. Om denna förståelse inte finns kan användningen av tips leda till minskad snarare än ökad produktivitet.

variabelnamn

SQL Server-variabler måste deklareras innan du använder UPDATE-satsen, i formen DECLARE @variable. Konstruktionsuppsättning @variabel=kolumn!=uttryck! ställer in variabeln till det slutliga värdet för den uppdaterade kolumnen, och SET @variable -column!, column!=expression ställer in variabeln till värdet i kolumnen innan UPDATE-satsen kördes.

Ger möjlighet att skapa ett mycket selektivt sammanfogningsbaserat kriterium för att ange rader som ska uppdateras. FROM-satsen behövs inte om endast en tabell används vid specificering av rader - måltabellen. Raduppsättningsfunktionerna i SQL Server beskrivs i avsnittet SELECT Statement.

AS alias

Låter dig tilldela ett lättanvänt alias till en tabell, vy, kapslad tabellunderfråga eller raduppsättningsfunktion.

Ger möjlighet att använda standard ANSI-syntax för tabellkopplingar i kombination med FROM-satsen.

En liten variation av ANSI WHERE CURRENT OF-satsen. WHERE CURRENT OF markörnamnsatsen, som används i kombination med en markör, gör att SQL Server endast uppdaterar den enda posten som markören för närvarande befinner sig på. Markören antas vara lokal, men du kan ange en global markör med nyckelordet GLOBAL.

ALTERNATIV tips

Låter dig använda frågetips genom att åsidosätta standardbeteendet för frågeoptimeraren. Som med WITH-satsen, använd bara tips om du har en mycket god förståelse för de tabeller, index och data som påverkas av operationen. Om denna förståelse inte finns kan användningen av tips leda till minskad snarare än ökad produktivitet.

Det huvudsakliga tillägget som Microsoft SQL Server introducerar till ANSI UPDATE-satsen är FROM-satsen. FROM-satsen låter dig använda en JOIN-sats, vilket avsevärt förenklar uppdateringen av måltabellens rader genom att associera raderna som anges i FROM-satsen med raderna uppdaterade av komponenten table_name UPDATE. Följande exempel uppdaterar resultatet av en tabellkoppling med ANSI-stil och en ganska besvärlig underfråga, och uppdaterar sedan med SQL Server FROM-satsen. Båda förfrågningarna utför samma åtgärd, men på helt olika sätt.

Att utföra en sådan uppdatering med Transact-SQL-stilen innebär att två tabeller, författare och titelförfattare, sammanfogas med titeltabellen. För att utföra samma operation med ANSI-kod måste du först leta upp au_id-värdet i författaretabellen och skicka det till titleauthor-tabellen, och sedan måste du slå upp title_id-värdet och skicka det till huvudsatsen UPDATE.

Följande exempel uppdaterar tillståndskolumnen för de första tio raderna i författaretabellen.

UPPDATERA författare SET state="ZZ" FRÅN (VÄLJ TOPP 10 * FRÅN författare BESTÄLL EFTER au_lname) SOM t1 WHERE authors.au_id=t1.au_.id

Det viktiga att notera i det här exemplet är att det i allmänhet är ganska svårt att uppdatera de första n raderna med en UPDATE-sats om det inte finns någon explicit radsekvens som kan bestämmas med hjälp av en WHERE-sats. En kapslad tabellunderfråga i FROM-satsen, som använder nyckelordet TOP för att hämta de första 10 raderna, hjälper till att eliminera ytterligare programmeringsansträngningar som annars skulle vara nödvändiga.

UPDATE kommando— gör ändringar i en befintlig post eller flera poster i en tabell SQL. Ändrar befintliga värden i en tabell eller vyns huvudtabell.

UPDATE Kommando Kommandosyntax

UPDATE Kommandosyntax

UPDATE kommando. Grundläggande nyckelord och parametrar för kommandot UPDATE

  • schema - en behörighetsidentifierare, vanligtvis samma som ett användarnamn
  • bordsvy - tabellnamn SQL, där uppgifterna ändras; om en vy är definierad, ändras data i huvudtabellen SQL inlagor
  • subquery_1 - subquery, som servern behandlar på samma sätt som en vy
  • Medolumn - tabell kolumn SQL eller inlagor SQL, vars värde ändras; om tabellkolumnen är från en mening UPPSÄTTNING utelämnas, förblir kolumnvärdet oförändrat
  • expr - ; detta uttryck kan innehålla huvudvariabler och valfria indikatorvariabler
  • underfråga_2 - nytt värde tilldelat motsvarande kolumn
  • underfråga_3 - nytt värde tilldelat motsvarande kolumn

DÄR- definierar intervallet av rader som ska modifieras av de för vilka ett visst villkor gäller SANN; om denna fras utelämnas ändras alla rader i tabellen eller vyn.
Vid utfärdande av godkännande UPPDATERA någon slår på UPPDATERING utlösare, definieras i tabellen.
Underfrågor. Om erbjudandet UPPSÄTTNING innehåller underfråga, returnerar den exakt en rad för varje modifierad rad. Varje värde i underfrågans resultat tilldelas motsvarande listkolumner inom parentes. Om underfrågan inte returnerar några rader tilldelas kolumnen NULL. Underfrågor kan välja data från den ändrade tabellen. Erbjuda UPPSÄTTNING kan kombinera uttryck och underfrågor.

UPDATE Kommando Exempel 1
Ändra betyget för alla köpare till ett värde lika med 200:

UPPDATERA Kunder UPPSÄTTNING betyg = 200;

UPDATE Kommando Exempel 2
Att ersätta ett kolumnvärde över alla rader i en tabell används i allmänhet sällan. Därför i laget UPPDATERA, som i laget RADERA, kan du använda ett predikat. För att utföra den angivna ersättningen av värdena i betygskolumnen, för alla kunder som betjänas av säljaren Giovanni (snum = 1003), ska du ange:

UPPDATERA Kunder UPPSÄTTNING betyg = 200 WHERE snum = 1001;

SQL UPDATE Kommando Exempel 3
I en mening UPPSÄTTNING Du kan ange valfritt antal värden för kolumnerna, separerade med kommatecken:

UPPDATERA emp UPPSÄTTNING jobb = 'MANAGER', sal = sal + 1000, deptnr = 20 WHERE ename = 'JONES';

UPDATE Kommando Exempel 4
I en mening UPPSÄTTNING du kan ange ett NULL-värde utan att använda någon speciell syntax (som IS NULL). Således, om du vill ställa in alla kundbetyg från London (stad = 'London') till NULL, anger du:

UPPDATERA Kunder UPPSÄTTNING betyg = NULL WHERE stad = 'London';

UPDATE Kommando Exempel 5
Förklarar användningen av följande kommandosyntax UPPDATERA:

  • Båda meningsformerna UPPSÄTTNING tillsammans i ett uttalande.
  • Underfråga.
  • En WHERE-sats som begränsar intervallet av rader som kan ändras.

UPPDATERA emp a UPPSÄTTNING avdnr =
(VÄLJA deptno FROM dept WHERE loc = 'BOSTON'), (sal, comm) = ( VÄLJA 1,1*AVG(sal), 1,5*AVG(komm.) FRÅN emp b WHERE a.deptno = b.deptno) WHERE deptno IN ( VÄLJA deptno FROM dept WHERE loc = 'DALLAS' ELLER loc = 'DETROIT');

Ovanstående uttalande UPPDATERA utför följande operationer:

  • Ändrar endast de anställda som arbetar i Dallas eller Detroit
  • Ställer in värdet på kolumnen deptno för anställda från Boston
  • Sätter lönen för varje anställd till 1,1 gånger snittlönen för hela avdelningen
  • Sätter varje anställds provision till 1,5 gånger den genomsnittliga provisionen för hela avdelningen

Operatörer för datamanipulation (DML-språk).

DML-satser fungerar på databasen och används för att modifiera data och hämta nödvändig information.

SELECT – urval av rader som uppfyller angivna villkor. Operatören implementerar i synnerhet sådana operationer av relationalgebra som "selektion" och "projektion".

UPPDATERING – ändra värdena för vissa fält i tabellrader som uppfyller angivna villkor.

INSERT – infogar nya rader i tabellen.

DELETE – tar bort tabellrader som uppfyller angivna villkor. Exemplet med denna operatör tar hänsyn till integritetsprinciper, så det kanske inte alltid utförs korrekt.

12.2 Interaktivt sätt att arbeta med SQL (interaktiv SQL)

Motsvarande läge tillhandahåller direkt användararbete med databasen enligt följande algoritm: med ett applikationsprogram (klientapplikation) eller ett standardverktyg som ingår i DBMS, användaren:

· upprättar en anslutning till databasen (bekräftar tillgången på åtkomsträttigheter);

· anger lämplig SQL-sats, om nödvändigt, anger ytterligare information i dialogläge;

· initierar kommandoexekvering.

Förfrågningstexten skickas till DBMS, som:

· analyserar begäran (kontrollerar om begäran är korrekt);

· kontrollerar om användaren har rätt att utföra en sådan begäran (till exempel försöker en användare som har läsrättigheter ta bort något);

· väljer hur förfrågan ska verkställas – planen för utförande av begäran;

· verkställer begäran;

· exekveringsresultatet skickas till användaren.

Schema för interaktion mellan användaren och DBMS med hjälp av interaktiv SQL

visas i fig. 12.1.

Ris. 12.1. Hur interaktiv SQL fungerar

12.3. Använda SQL för att välja information från en tabell

Data hämtas med hjälp av SELECT-satsen, som är den vanligaste satsen i SQL-språket. Syntaxen för SELECT-satsen är som följer:

VÄLJA<список атрибутов>/*

FRÅN<список таблиц>

Hakparenteser indikerar element som kanske inte finns i begäran.

Nyckelordet ALL betyder att resultatet blir alla rader som uppfyller frågevillkoret, inklusive identiska rader.

DISTINCT betyder att inga dubbletter av rader ingår i resultatuppsättningen. Nästa är en lista över attribut för källtabellen som kommer att inkluderas i resultattabellen. Symbolen * betyder att den resulterande tabellen innehåller alla källtabellens attribut.

Det obligatoriska nyckelordet är FROM, följt av namnen på tabellerna som frågas efter.

Klausulen med nyckelordet WHERE anger villkoren för att välja tabellrader. Resultattabellen inkluderar endast de rader för vilka villkoret som anges i WHERE-satsen utvärderas till sant.

Nyckelordet ORDER BY specificerar operationen för att ordna raderna i resultattabellen enligt den specificerade listan med attribut.

GROUP BY nyckelordssatsen specificerar en lista med grupperingsattribut (detta och följande nyckelord kommer att förklaras lite senare).

HAVING-satsen specificerar de villkor som ska tillämpas på varje grupp.

Separat noterar vi att nyckelorden FROM, WHERE ORDER BY används på liknande sätt i andra SQL-datamanipulationsoperatorer.

Låt oss titta på implementeringen av frågor för det specifika exemplet som presenterades i föreläsning 8 (se fig.

SQL - UPPDATERINGSfråga

Lista alla elever.

SELECT id_st, efternamn

Observera att om du lägger till efternamnsklausulen ORDER BY i denna fråga kommer listan att sorteras efter efternamn. Som standard antas sorteringen vara i stigande ordning. Om fallande ordning önskas läggs ordet DESC till efter attributnamnet.

Visa en lista över betyg som eleven fått med koden "1".

SELECT id_st, mark

Ge en lista med koder för studenter som fått minst en D eller C i tentorna.

I WHERE-satsen kan du skriva ett uttryck med aritmetiska jämförelseoperatorer (<, >, etc.) och logiska operatorer (AND, OR, NOT) som i konventionella programmeringsspråk.

SELECT id_st, mark

WHERE (MARK >= 2) OCH (MARK<= 3)

Tillsammans med jämförelseoperatorer och logiska operatorer för att skapa villkor i SQL-språket (på grund av det specifika tillämpningsomfånget), finns det ett antal specialoperatorer som i regel inte har några analoger på andra språk. Dessa är operatörerna:

IN – inträde i en viss uppsättning värden;

BETWEEN – inträde i ett visst värdeintervall;

GILLA – mönstermatchningstest;

ÄR NULL – kontrollera efter ett odefinierat värde.

IN-operatorn används för att kontrollera om ett värde ingår i en uppsättning. Ja, förfrågan

SELECT id_st, mark

WHERE markera IN (2,3)

ger samma resultat som ovanstående fråga (den kommer att visa identifierarna för alla sökande som fått minst en D eller C i proven).

Samma resultat kan uppnås med operatorn MELLAN:

SELECT id_st, mark

VAR-märke MELLAN 2 OCH 3

Skriv ut en lista över alla elever vars efternamn börjar med bokstaven A.

I det här fallet är det bekvämt att använda LIKE-operatorn.

LIKE-operatorn gäller uteslutande för teckenfält och låter dig avgöra om ett fälts värde matchar ett mönster. Mönstret kan innehålla specialtecken:

_ (understreck) – ersätter varje enskilt tecken;

% (procenttecken) – ersätter en sekvens med valfritt antal tecken.

SELECT id_st, efternamn

VAR efternamn SOM "A%"

Mycket ofta finns det ett behov av att beräkna lägsta, högsta eller genomsnittliga värden i kolumner. Till exempel kan du behöva beräkna din GPA. För att utföra sådana beräkningar tillhandahåller SQL speciella aggregatfunktioner:

MIN – lägsta värde i kolumnen;

MAX – maxvärde i kolumnen;

SUM – summan av värdena i kolumnen;

AVG – medelvärde i kolumnen;

COUNT – antalet icke-NULL-värden i kolumnen.

Följande fråga beräknar genomsnittet av alla poäng erhållna av studenter i tentor.

VÄLJ AVG(mark)

Naturligtvis kan du använda aggregerade funktioner i kombination med en WHERE-sats:

VÄLJ AVG(mark)

WHERE id_st = 100

Denna fråga kommer att beräkna medelpoängen för en student med en kod på 100 baserat på resultaten av alla tentor han har gjort.

VÄLJ AVG(mark)

WHERE id_ex = 10

Den här frågan kommer att beräkna det genomsnittliga betyget för studenter baserat på resultaten av att klara provet med kod 10.

Förutom de mekanismer som diskuterats ovan tillhandahåller SQL-språket en kraftfull apparat för att beräkna aggregerade funktioner, inte för hela tabellen med frågeresultat, utan för olika värden per grupp. För detta ändamål har SQL en speciell GROUP BY-konstruktion, utformad för att indikera kolumnen vars värden kommer att användas för gruppering. Så, till exempel, kan vi beräkna medelpoängen för alla tentor för varje elev. För att göra detta, kör bara följande fråga:

SELECT id_st, AVG(mark)

Allt detta kan som vanligt kombineras med en WHERE-klausul. Samtidigt, utan att gå in på krångligheterna med att köra frågor i DBMS, kan vi anta att först de rader i tabellen som uppfyller villkoren från WHERE-satsen väljs, och sedan utförs gruppering och aggregering.

Här är en fråga som beräknar medelpoängen baserat på betyg erhållna i ett prov kodat 100 för varje elev.

SELECT id_st, AVG(mark)

WHERE id_ex = 100

Observera att gruppering kan göras av mer än ett fält.

För frågor som innehåller en GROUP BY-sats finns det en viktig begränsning: sådana frågor kan inkludera som resultat de kolumner som grupperingen utförs med och de kolumner som innehåller de faktiska aggregeringsresultaten.

Det finns olika SQL-funktioner för att formatera utdata. Det är till exempel acceptabelt att inkludera text i en förfrågan. Låt oss titta på ett exempel på hur detta går till:

VÄLJ "Average score=", AVG(mark)

WHERE id_ex = 10

Som ett resultat av denna begäran kommer användaren att se inte bara ett visst nummer, utan ett nummer tillsammans med förklarande text.

12.4. Använda SQL för att välja information från flera tabeller

Hittills har vi tittat på att välja information från en enda tabell. Du kan söka information från flera tabeller genom att implementera de relationsoperationer som beskrivs i motsvarande avsnitt i läroboken. Det är värt att nämna att en fullständig diskussion om ämnet ligger utanför denna lärobok. Denna fråga kan studeras i detalj med hjälp av till exempel . Låt oss titta på några exempel på hur detta går till.

I de fall där det finns behov av att välja information från olika tabeller är de i regel relaterade till varandra på ett eller annat sätt, till exempel genom en en-till-många eller en-till-en relation för en viss fält.

Låt oss återgå till exemplet från föreläsning 8. Betrakta motsvarande ER-diagram (Fig. 12.2.).

Ris. 12.2. Exempel på länkade tabeller

Detta exempel innehåller också relaterade tabeller. Låt oss titta på tabellerna student, mark_st och exam_st.

Mark_st-tabellen är länkad till exam_st-tabellen av id_ex-fältet.

Mark_st-tabellen är länkad till elevtabellen av id_st-fältet.

Låt oss säga att du vill skriva ut en lista över elever med de betyg de fått på prov. För att göra detta måste du köra följande fråga:

VÄLJ student.efternamn, mark_st.id_ex, mark_st.mark

FRÅN student, mark_st

WHERE student.id_st = mark_st.id_st

Observera följande ändringar jämfört med frågor mot en enskild tabell.

1. Avsnittet FRÅN innehåller två tabeller.

2. Eftersom det fanns mer än en tabell fanns det en viss oklarhet när fälten nämndes. Så i många fall är det inte känt vilken tabell från FRÅN-listan man ska ta ett fält från. För att eliminera tvetydighet anges fältnamn med ett prefix - tabellnamnet. Tabellnamnet skiljs från fältnamnet med en punkt.

3. WHERE-satsen specificerar villkoret för att gå med i tabellerna.

Det är lätt att se att användningen av tabellnamnsprefix stör frågan kraftigt. För att undvika sådan röran används pseudonymer. Så du kan skriva om den föregående frågan enligt följande:

VÄLJ E.efternamn, M.id_ex, M.mark

FRÅN elev E, mark_st M

WHERE E.id_st = M.id_st

12.5. Använda SQL för att infoga, redigera och ta bort data
i tabeller

För att lägga till data i en tabell tillhandahåller SQL-standarden kommandot INSERT.

Låt oss titta på ett antal exempelfrågor.

INSERT INTO mark_st

VÄRDEN (1, 2, 5)

Denna fråga infogar en rad i mark_st-tabellen som innehåller värdena listade i VALUES-listan. Om du inte behöver ange värdet på ett fält kan du tilldela det NULL:

INSERT INTO-märket

VÄRDEN (1, 2, NULL)

Om du behöver använda standardvärden för vissa fält låter SQL dig explicit specificera vilka fält som behöver fyllas med specifik data och vilka med standardvärden:

INSERT INTO mark_st (id_st, id_ex)

För att radera data från en tabell finns kommandot DELETE:

Denna fråga tar bort all data från elevtabellen.

Du kan begränsa mängden information som raderas enligt följande:

VAR efternamn > "OCH"

Kommandot UPDATE används för att uppdatera data.

SET-markering = '5'

WHERE id_st = 100 OCH id_ex = 10

Med denna begäran kommer studentens betyg med kod 100 på tentamen med kod 10 att ändras till "5".

12.5. SQL-språk och relationalgebraoperationer

SQL-språket är ett sätt att uttrycka den kraftfulla matematiken i mängdteorin och relationalgebra. Det här avsnittet undersöker sambandet mellan SQL-satser och operationerna för relationalgebra och mängdteori.

Facklig verksamhet

Med hjälp av SQL-språket representeras en join-operation enligt följande:

Skillnadsoperation

Med hjälp av SQL-språket representeras skillnadsoperationen enligt följande:

Projektionsoperation

VÄLJ Fält i1, …, Fält in

Urvalsoperation

DÄR( )

Korsningsoperation

Föregående78910111213141516171819202122Nästa

4.6.5.DML: Datamodifieringskommandon.

Denna grupp inkluderar operatörer för att lägga till, ändra och ta bort poster. SÄTT IN I<имя_таблицы> [ (<имя_столбца>,<имя_столбца>,...) ] VÄRDEN (<значение>,<значение>,..) Listan över kolumner i detta kommando är inte en obligatorisk parameter. I det här fallet måste värdena för alla tabellfält anges i den ordning som kolumnerna listades i kommandot, till exempel: Exempel som anger en lista med kolumner: UPPDATERA<имя_таблицы>UPPSÄTTNING<имя_столбца>=<значение>,… Om ett nyckelord och ett villkor anges, tillämpas kommandot endast på de poster för vilka det körs. Om villkoret inte anges gäller det alla poster. Exempel: Logiska uttryck över konstanter och fält används som villkor. Villkoren tillåter:

  • jämförelseoperationer: . I SQL kan dessa operationer tillämpas inte bara på numeriska värden, utan också på strängar (vilket betyder tidigare och senare i alfabetisk ordning) och datum (tidigare och senare i kronologisk ordning).
  • operationer för att kontrollera ett fält för ett värde:
  • räckviddskontrolloperationer: och.
  • listkontrolloperationer: och
  • operationer för att kontrollera förekomsten av en delsträng: och
  • individuella operationer kopplas samman med länkar och grupperas med parenteser.

Alla dessa nyckelord kommer att beskrivas och illustreras i detalj i avsnittet som är tillägnat operatören. Här kommer vi att begränsa oss till att ge ett enkelt exempel: Detta kommando hittar i tabellen förlag alla odefinierade kolumnvärden url och ersätter dem med raden "url ej definierad". DELETE FRÅN<имя_таблицы>[DÄR<условие> ] Alla poster som uppfyller det angivna villkoret raderas. Om nyckelordet och villkoret saknas tas alla poster bort från tabellen. Exempel: Detta kommando tar bort Super Computer Publishing-posten.

4.6.6.DML: Datasampling.

För att hämta poster från tabeller definieras operatorn i SQL VÄLJA. Med detta kommando utförs inte bara den relationella algebraoperationen "selektion" (horisontell delmängd), utan också en preliminär sammanfogning av två eller flera tabeller. Detta är det mest sofistikerade och kraftfulla SQL-verktyget, full uttalandesyntax VÄLJA har formen: VÄLJA<список_выбора>FRÅN<имя_таблицы>, …[ VAR<условие>] [ GRUPPER EFTER<имя_столбца>,...] [HA<условие> ] ,… ] Ordning av klausuler i ett uttalande VÄLJA måste följas strikt (måste t.ex. alltid föregås) annars kommer det att införa fel.

Vi kommer att börja granska VÄLJA från dess enklaste former. Alla nedanstående exempel angående publikationsdatabasen kan utföras oberoende genom att gå till denna sida, så resultaten av frågorna visas inte här.

Detta påstående börjar alltid med ett nyckelord. Konstruktionen anger kolumnen eller kolumnerna som ska inkluderas i resultatet. Den kan bestå av namnen på en eller flera kolumner, eller ett enda tecken (asterisk) som identifierar alla kolumner. Listelement separeras med kommatecken.

få en lista över alla tabellfält författare: Om vi ​​inte är intresserade av alla poster, utan bara de som uppfyller ett visst villkor, kan detta villkor anges efter nyckelordet.

Låt oss till exempel hitta alla böcker som publicerats efter 1996: Låt oss nu säga att vi måste hitta alla publikationer för intervallet 1995 - 1997. Detta villkor kan skrivas som: En annan version av detta kommando kan erhållas med den logiska operationen att testa för förekomst i intervallet: När du använder konstruktionen hittas alla rader som inte ingår i det angivna intervallet.

En annan version av detta kommando kan konstrueras med den logiska operationen att kontrollera om det finns med i en lista:

Här har vi uttryckligen specificerat en lista över värden som intresserar oss. Konstruktionen gör att du kan hitta linjer som inte uppfyller de villkor som anges i listan.

Fördelarna med ett nyckelord är mest uppenbara i kapslade frågor, även kallade underfrågor. Låt oss säga att vi måste hitta alla publikationer som publiceras av Oracle Press. Namnen på förlagsbolagen finns i tabellen förlag, boktitlar i tabellen titlar. Nyckelordet låter dig gå med i båda tabellerna (utan att få en gemensam relation) och extrahera nödvändig information:

När du kör det här kommandot bearbetar DBMS först en kapslad fråga i tabellen förlag, och sedan skickas dess resultat till ingången för huvudfrågan i tabellen titlar.

Vissa problem kan inte lösas med enbart jämförelseoperatorer. Vi vill till exempel hitta webbplatsen för Wiley förlag, men vi vet inte dess exakta namn. Ett nyckelord är avsett att lösa detta problem.

Mönstret är omgivet av citattecken och måste innehålla det delsträngsmönster som ska sökas. Vanligtvis används två tecken i mönster:

  • % (procenttecken) - ersätter valfritt antal tecken
  • _ (understreck) - ersätter ett enda tecken.

Låt oss försöka hitta den önskade webbplatsen: I enlighet med mallen kommer DBMS att hitta alla rader som innehåller delsträngen "Wiley". Ett annat exempel: hitta alla böcker vars titlar börjar med ordet "SQL": Om du behöver hitta ett värde som i sig innehåller ett av mönstertecken, använd nyckelordet och<ключевой_символ>. Det bokstavliga som följer på nyckeltecknet i mönstret behandlas som ett vanligt tecken alla efterföljande tecken har en regelbunden betydelse. Till exempel måste vi hitta en länk till en webbsida som är känd för att innehålla delsträngen "my_works" i sin url: Sammanfattningsvis, notera att när operatorn exekveras kan den resulterande relationen ha flera poster med samma värden ​för alla områden. För att utesluta dubblettposter från urvalet används ett nyckelord. Nyckelordet anger att alla rader ska inkluderas i resultatet.

4.6.7.DML: Välj från flera tabeller.

Mycket ofta uppstår en situation när data måste samplas från en relation som är resultatet av en sammanfogning av två andra relationer. Till exempel måste vi hämta från databasen publikationer information om alla tryckta publikationer i form av följande tabell: För detta måste DBMS först slå samman tabellerna titlar Och förlag, och gör först därefter ett prov från den resulterande relationen.

För att utföra en operation av detta slag specificerar operatören efter nyckelordet en lista med tabeller genom vilka data ska sökas. Efter nyckelordet indikeras villkoret under vilket sammanslagningen utförs. För att utföra denna begäran måste du utfärda kommandot:

Och här är ett exempel där villkoren för både sammanslagning och urval specificeras samtidigt (resultatet av den tidigare frågan är begränsat till publikationer efter 1996): Observera att när olika tabeller innehåller fält med samma namn, för att eliminera tvetydighet, tabellnamnet anges före fältnamnet och tecknet "." (punkt). (En bra tumregel är att alltid ta med tabellnamnet!)

Naturligtvis är det möjligt att slå samman fler än två tabeller. Till exempel, för att komplettera urvalet som beskrivs ovan med namnen på bokförfattare, måste du skapa en operatör i följande form:

4.6.8.DML: Beräkningar i SELECT.

låter dig utföra olika aritmetiska operationer på kolumnerna i den resulterande relationen. I design<список_выбора>Du kan använda konstanter, funktioner och deras kombinationer med aritmetiska operationer och parenteser. Till exempel, för att ta reda på hur många år som har gått sedan 1992 (året då SQL-92-standarden antogs) fram till publiceringen av en viss bok, kan du köra kommandot: I aritmetiska ekvationer är de tillåtna operationerna addition (+) , subtraktion (-), division (/), multiplikation ( *), samt olika funktioner (COS, SIN, ABS - absolutvärde, etc.).

Du kan också lägga till en strängkonstant till frågan: De så kallade aggregatfunktionerna definieras också, som utför åtgärder på en uppsättning identiska fält i en grupp av poster. Bland dem:

  • AVG(<имя поля>) — genomsnitt över alla värden i detta fält
  • RÄKNA(<имя поля>) eller COUNT (*)— antal poster
  • MAX(<имя поля>) — det maximala av alla värden i detta fält
  • MIN(<имя поля>) — minimum av alla värden i detta fält
  • BELOPP(<имя поля>) — summan av alla värden i detta fält

Observera att varje aggregeringsfunktion returnerar det enda menande. Exempel: bestäm publiceringsdatumet för den äldsta boken i vår databas, räkna antalet böcker i vår databas: Omfattningen av dessa funktioner kan begränsas med hjälp av ett logiskt villkor. Till exempel, antalet böcker med ordet "SQL" i titeln:

4.6.9.DML: Datagruppering.

Gruppering av data i ett uttalande görs med hjälp av ett nyckelord och ett nyckelord, som används för att ställa in villkoren för att dela upp poster i grupper.

är oupplösligt kopplad till aggregeringsfunktioner utan dem används den praktiskt taget inte. delar in tabellen i grupper, och aggregeringsfunktionen beräknar det totala värdet för var och en av dem. Som ett exempel, låt oss bestämma antalet böcker från varje förlag i vår databas:

Nyckelordet fungerar enligt följande: först delar det upp rader i grupper, sedan ställs villkor på de resulterande uppsättningarna. Låt oss till exempel utesluta de förlag som bara har en bok från den föregående frågan: Ett annat användningsfall är att i resultatet endast inkludera de förlag vars namn slutar med delsträngen "Press": Vad är skillnaden mellan dessa två användningsfall ? I det andra alternativet skulle vi kunna placera villkoret för att välja poster i nyckelordssektionen i det första alternativet, detta skulle inte vara möjligt eftersom det inte tillåter användning av aggregeringsfunktioner.

4.6.10.DML: Datasortering.

För att sortera data som erhålls med hjälp av operatorn används ett nyckelord. Det låter dig sortera resultat efter valfri kolumn eller uttryck som anges i<списке_выбора>. Data kan sorteras i antingen stigande eller fallande ordning. Exempel: sortera en lista med författare i alfabetisk ordning: Ett mer komplext exempel: få en lista över författare sorterade i alfabetisk ordning och en lista över deras publikationer, och för varje författare sorteras listan med böcker efter publiceringstid i omvänd ordning (d.v.s. nyare böcker först, sedan mer och mer "gammalt"): Nyckelordet här anger den omvända sorteringsordningen efter fält årspub, nyckelord (det kan utelämnas) - direkt sorteringsordning efter fält författare.

4.6.11.DML: Sammanfogningsoperation.

SQL ger möjligheten att utföra den relationella algebraoperationen UNION på relationer som är resultatet av en SELECT-sats. Naturligtvis måste dessa relationer definieras enligt samma schema. Exempel: få alla Internetlänkar lagrade i databasen publikationer. Dessa länkar lagras i tabeller förlag Och wwwwebbplatser. För att få dem i en tabell måste vi bygga följande fråga:

4.6.12.Använda vyer.

Hittills har vi pratat om tabeller som verkligen lagras i databasen. Dessa är de så kallade bastabellerna. Det finns en annan typ av tabell som kallas "vyer" (ibland kallade "visningsbara tabeller").

När innehållet i de underliggande tabellerna ändras, kör DBMS automatiskt om frågorna som skapar vyn, vilket resulterar i motsvarande ändringar i vyerna.

Vyn definieras med kommandot

SKAPA VY<имя_представления> [<имя_столбца>,...] AS<запрос> Följande begränsningar måste följas:

  • vyn måste baseras på en enda fråga (inte tillåtet)
  • utdata från frågan som genererar vyn måste vara oordnad (inte tillåtet)

Låt oss skapa en vy som lagrar information om författare, deras böcker och utgivare av dessa böcker: Nu kan alla användare som har tillräckliga rättigheter för att komma åt den här vyn hämta data från böcker. Till exempel: (Användaråtkomsträttigheter till vyer tilldelas också med hjälp av kommandon.)

Från exemplet ovan är innebörden av att använda vyer ganska tydlig. Om frågor som "välj alla böcker av en given författare, anger förlag" utförs ganska ofta, skapa den presenterade tabellen böcker kommer att avsevärt minska omkostnaderna för att sammanfoga fyra basbord författare, titlar, förlag Och titelförfattare. Dessutom kan vyn presentera information som inte är explicit lagrad i någon av de underliggande tabellerna. Till exempel kan en av vykolumnerna beräknas:

Här använder vi en annan, tidigare inte beskriven, funktion - att tilldela nya namn till vyns kolumner.

I det givna exemplet skulle antalet publikationer som produceras av varje förlag lagras i en namngiven kolumn books_count. Observera att om vi vill tilldela nya namn till vykolumnerna måste vi ange namn för alla kolumner. Datatypen för en vykolumn och dess nollstatus beror alltid på hur den definierades i de underliggande tabellerna.

En fråga för att välja data för en vy ser exakt likadan ut som en fråga för alla andra tabeller. Det finns dock begränsningar för att ändra data i vyn. Kort om dem kan vi säga följande:

  • Om vyn är baserad på en enda tabell tillåts ändringar av data i den. Detta ändrar data i den associerade tabellen.
  • Om en vy är baserad på mer än en tabell, är ändringar av data i den inte tillåtna, eftersom I de flesta fall kan DBMS inte korrekt rekonstruera schemat för bastabellerna från presentationsschemat.

Att ta bort en vy görs med operatorn:

DROP VIEW<имя_представления>

4.6.13.Andra SQL-funktioner.

De funktioner som beskrivs nedan har ännu inte standardiserats, men presenteras i en eller annan grad i nästan alla moderna DBMS.

  • Lagrade procedurer. Praktisk erfarenhet av att skapa databehandlingsapplikationer visar att det är tillrådligt att flytta ett antal operationer på data som implementerar logik som är gemensam för alla användare och som inte är relaterade till användargränssnittet till servern. Men för att skriva procedurer som implementerar dessa operationer räcker det inte med standardfunktioner, eftersom operatörer för bearbetning av grenar, loopar etc. behövs här. Därför erbjuder många DBMS-leverantörer sina egna processuella tillägg (PL/SQL från Oracle, etc.). Dessa tillägg innehåller logiska operatorer (IF ... THEN ... ELSE), villkorliga övergångsoperatorer (SWITCH ... CASE ...), loopoperatorer (FOR, WHILE, TILL) och operatorer som överför kontroll till procedurer (CALL, RETURN) ). Med hjälp av dessa verktyg skapas funktionsmoduler som lagras på servern tillsammans med databasen. Vanligtvis kallas sådana moduler lagrade procedurer. De kan anropas med parametrar som skickas av alla användare som har lämpliga rättigheter. I vissa system kan lagrade procedurer även implementeras som moduler externt till DBMS i allmänna språk, som t.ex. C eller Pascal.

    SQL - UPPDATERINGSfråga

    Exempel för PostgreSQL DBMS: SKAPA FUNKTION<имя_функции> ([<тип_параметра1>,…<тип_параметра2>]) RETURNERAR &lreturn_types> AS [ | <имя_объектного_модуля>] SPRÅK 'SQL' | 'C' | 'inre' Den skapade funktionen anropas från SELECT-satsen (på samma sätt som aggregeringsfunktioner anropas). För mer information om lagrade procedurer, se artikeln av E. Eisenberg, New Standard for Stored Procedures in the SQL Language, DBMS N 5-6, 1996.

  • Utlösare. För varje tabell kan en lagrad procedur utan parametrar tilldelas, som anropas när en modifieringssats för denna tabell exekveras (INSERT, UPDATE, DELETE). Sådana lagrade procedurer kallas triggers. Triggers exekveras automatiskt, oavsett om dataändringen orsakas av en mänsklig operatörs handlingar eller ett applikationsprogram. Den "genomsnittliga" syntaxen för operatorn för att skapa trigger är: SKAPA TRIGGER<имя_триггера>PÅ<имя_таблицы>FÖR (INSERT | UPPDATERA | DELETE ) [, INFOGA | UPPDATERING | DELETE ]... SOM Nyckelordet anger namnet på tabellen för vilken utlösaren är definierad, nyckelordet anger vilka datamodifieringskommandon som aktiverar utlösaren. Påståendena efter nyckelordet beskriver de åtgärder som utlösaren utför och villkoren för att utföra dessa åtgärder. Valfritt antal uttalanden, lagrade proceduranrop etc. kan listas här. Användningen av triggers är mycket bekvämt för att utföra kontroller av integritetsbegränsningar (se kapitel 4.3).
  • Händelseövervakare. Ett antal DBMS tillåter skapandet av lagrade procedurer som kontinuerligt skannar en eller flera tabeller för att upptäcka vissa händelser (till exempel når medelvärdet för en kolumn en specificerad gräns). När en händelse inträffar kan en trigger, lagrad procedur, extern modul etc. startas. Exempel: Låt vår databas vara en del av ett automatiserat processtyrningssystem. I fältet för en av tabellerna anges avläsningarna för temperatursensorn som är installerad på svarvskäraren. När detta värde överskrider en specificerad gräns, startas ett externt program som ändrar maskinens driftsparametrar.

Frågan är gammal, men jag kände att ett bättre svar inte hade getts ännu.

Finns det en UPDATE-syntax... utan att ange kolumnnamn ?

Generell lösning med dynamisk SQL

Du behöver inte känna till kolumnnamnen, förutom några unika kolumner för att gå med (i exemplet). Fungerar bra för alla möjliga hörnfodral jag kan tänka mig.

Detta är specifikt för PostgreSQL. Jag skapar dynamisk kod baserad på schema_info, närmare bestämt en tabell, som är definierad i ANSI SQL och stöds av de flesta moderna DBMS:er (förutom Oracle). Men uttalandet med PL/pgSQL-kod som gör dynamisk SQL är helt icke-standard PostgreSQL-syntax.

SQL UPPDATERING

Förutsatt att motsvarande kolumn i för alla kolumn in, men inte vice versa.

kan ha ytterligare kolumner.

är valfritt att uppdatera endast den valda raden.

SQL fiol.

Liknande svar med fler förklaringar:

Dellösningar med enkel SQL

Med en lista över delade kolumner

Du behöver fortfarande känna till listan över kolumnnamn som båda tabellerna delar. Med en syntaxgenväg för att uppdatera flera kolumner - kortare än andra svar som erbjuds hittills i alla fall.

SQL fiol.

Denna syntax introducerades med Postgres 8.2 i december 2006, långt innan frågan ställdes.
Mer information finns i manualen och motsvarande svar på dba.SE:

Med en lista över kolumner i

Om alla kolumner är definierade (men inte obligatoriska),
Och Du du vet kolumnnamn (men inte obligatoriskt).

läggs till på raden där alla kolumner med samma namn har samma värde. Vi behöver inte uppdatera i det här fallet (ingenting ändras) och kan ta bort dessa rader i början av process().
Vi behöver fortfarande hitta den matchande strängen, så i den yttre frågan.

SQL fiol.

Detta är standard SQL, förutom klausulen.
Det fungerar oavsett vilken kolumn som faktiskt finns i, men frågan kan inte skilja mellan faktiska NULL-värden och saknade kolumner i, så det är bara tillförlitligt om alla kolumner i är definierade.

Det finns flera möjliga alternativ, beroende på vad du du vet om båda borden.

Jag har två bord:

kommer alltid att vara en delmängd (vilket betyder att alla kolumner också är med).

Jag vill uppdatera en post med en specifik in med deras data från för alla kolumner Detta finns både i och i

Finns det en syntax eller något annat sätt att göra detta utan att ange kolumnnamnen, bara säga "ställ in alla kolumner A" ?

Jag använder PostgreSQL, så det specifika icke-standardkommandot accepteras också (rekommenderas dock inte).

Dessa begrepp relaterar till databaser.

DDL - Data Definition Language. Med detta språk definieras data genom att specificera datatyp och presentationsstrukturer. Egentligen är det en del av språket. SQL. Men bara en. Det här är de operatorer som till exempel är associerade med skapande kommandon SKAPA BORD. Resultatet av dessa operationer läggs in i systemkatalogen, som lagrar information om tabellerna.

DML - Data Manipulation Language. Det är ett datahanteringsspråk som kan användas för att hämta och ändra data. Det finns två varianter av dessa språk.

Procedurmässigt processuella Icke procedurmässigt icke-procedurmässigt

Skillnaden mellan dem är inte som den verkar vid första anblicken. För en programmerare är det som att det finns procedurer, det finns inga procedurer. I verkligheten behandlar procedurspråk data sekventiellt. Det vill säga, skiva för skiva, och icke-procedurella sådana fungerar på hela uppsättningar på en gång. Och skillnaden är tydlig härifrån: på procedurspråk anges hur man skaffar data, och på icke-procedurspråk, vad vi vill ta emot. Processen på ett icke-procedurspråk berör oss inte och den är dold för utvecklaren. Det vanligaste icke-processuella språket är SQL. Och här borde det bli tydligt vad det betyder när vi inte anger vägen, utan resultatet. Operatör SQL typ VÄLJ * FRÅN TABELL talar om resultatet vi vill ha. Och i det här fallet vill vi få alla poster och kolumner från tabellen.

UPPDATERA OPERATÖREN

Det finns ett annat icke-procedurspråk QBE. Låt oss titta på det utifrån SQL. Så, SQL detta är två delar, den första delen är för att skapa objekt i databasen DDL, och den andra delen är för att manipulera data i dessa objekt DML. Varför en sådan uppdelning? Att designa en databas är inte en enkel uppgift och kräver seriöst arbete. Det finns speciella program som hjälper till att bygga en datastruktur, kontrollera anslutningar och eliminera motsägelser i designstadiet. Som ett resultat av driften av dessa program bildas en uppsättning kommandon DDL(i form av operatörer SQL) som startas på databasservern och alla strukturer är redo för arbete. Sedan börjar fyllningen, jag använder redan DML, och sedan arbeta, återigen använda DML(i form av operatörer SQL).

Föregående steg | Nästa steg | Innehållsförteckning
Författare Kaev Artem.

Denna SQL-handledning förklarar hur du använder SQL UPDATE-satsen med syntax, exempel och övningsövningar.

Syntax

Syntaxen för UPDATE-satsen vid uppdatering av en tabell i SQL är:

UPPDATERA tabell SET kolumn1 = uttryck1, kolumn2 = uttryck2, ... ;

Syntaxen för SQL UPDATE-satsen vid uppdatering av en tabell med data från en annan tabell är:

UPPDATERA tabell1 SET kolumn1 = (VÄLJ uttryck1 FRÅN tabell2 WHERE-villkor) ;

Syntaxen för SQL UPDATE-satsen vid uppdatering av flera tabeller (inte tillåtet i Oracle) är:

UPPDATERA tabell1, tabell2, ... SET kolumn1 = uttryck1, kolumn2 = uttryck2, ... WHERE table1.column = table2.column ;

Parametrar eller argument

kolumn1, kolumn2 Kolumnerna som du vill uppdatera. expression1, expression2 Dessa är de nya värdena att tilldela till, kolumn 1 kolumn 2 expression1, expression2 Dessa är de nya värdena att tilldela till . Så, kolumn 1 uttryck1 skulle tilldelas värdet av uttryck2

, och så vidare.

WHERE villkor Valfritt. Villkoren som måste uppfyllas för att uppdateringen ska köras. Om inga villkor tillhandahålls kommer alla poster i tabellen att uppdateras.

DDL/DML för exempel

Om du vill följa med i denna handledning, skaffa DDL för att skapa tabellerna och DML för att fylla i data. Prova sedan exemplen i din egen databas!

Exempel - Uppdatera en kolumn Låt oss titta på ett exempel som visar hur man använder SQL UPDATE-satsen för att uppdatera en enskild kolumn i en tabell.

kunder med följande data: kund_id efternamn
4000 förnamn favorit_webbplats Jackson
5000 Joe webbplats Smed
6000 Jane digminecraft.com Ferguson
7000 Samantha bigactivities.com Reynolds
8000 Allen checkyourmath.com NULL
9000 Andersson Paige Jackson

Låt oss nu visa hur UPDATE-satsen fungerar genom att uppdatera en kolumn i Exempel - Uppdatera en kolumn

Prova det UPPDATERA kunder SET first_name = "Judy" WHERE customer_id = 8000;

Exempel - Uppdatera en kolumn bord igen:

VÄLJ * FRÅN kunder;

kunder med följande data: kund_id efternamn
4000 förnamn favorit_webbplats Jackson
5000 Joe webbplats Smed
6000 Jane digminecraft.com Ferguson
7000 Samantha bigactivities.com Reynolds
8000 Allen Judy NULL
9000 Andersson Paige Jackson

I det här UPDATE-exemplet är kund_id fältet är satt till "Judy" i Exempel - Uppdatera en kolumn tabell där kunderär lika med 8000.

Exempel - Uppdatera flera kolumner

Låt oss titta på ett UPDATE-exempel som visar hur man uppdaterar mer än en kolumn i en tabell.

DRICKS: När du uppdaterar flera kolumner i en UPDATE-sats måste du kommaseparera kolumn/värdeparen i SET-satsen.

I det här UPDATE-exemplet har vi en tabell som heter leverantörer Låt oss titta på ett exempel som visar hur man använder SQL UPDATE-satsen för att uppdatera en enskild kolumn i en tabell.

leverantör_id leverantörsnamn stad ange
100 Microsoft Redmond Washington
200 Google Bergsutsikt Kalifornien
300 Orakel Redwood City Kalifornien
400 Kimberly-Clark Irving Texas
500 Tyson Foods Springdale Arkansas
600 SC Johnson Racine Wisconsin
700 Dole Food Company Westlake Village Kalifornien
800 Blommor Mat Thomasville Georgien
900 Electronic Arts Redwood City Kalifornien

Låt oss nu visa hur man använder UPDATE-satsen för att uppdatera mer än ett kolumnvärde samtidigt. Ange följande UPDATE-sats:

Prova det UPPDATERA leverantörer SET supplier_id = 150, supplier_name = "Apple", city = "Cupertino" WHERE supplier_name = "Google";

Det kommer att uppdateras 1 post. Välj data från leverantörer bord igen:

VÄLJ * FRÅN leverantörer;

Det här är resultaten som du bör se:

leverantör_id leverantörsnamn stad ange
100 Microsoft Redmond Washington
150 Äpple Cupertino Kalifornien
300 Orakel Redwood City Kalifornien
400 Kimberly-Clark Irving Texas
500 Tyson Foods Springdale Arkansas
600 SC Johnson Racine Wisconsin
700 Dole Food Company Westlake Village Kalifornien
800 Blommor Mat Thomasville Georgien
900 Electronic Arts Redwood City Kalifornien

Detta UPDATE-exempel skulle uppdatera leverantör_id till 150, den leverantörsnamn till "Apple" och stad till "Cupertino" där leverantörsnamnär "Google".

Exempel - Uppdatera tabell med data från en annan tabell

Låt oss titta på ett UPDATE-exempel som visar hur man uppdaterar en tabell med data från en annan tabell.

I det här UPDATE-exemplet har vi en tabell som heter produkter Låt oss titta på ett exempel som visar hur man använder SQL UPDATE-satsen för att uppdatera en enskild kolumn i en tabell.

produkt-id produktnamn kategori_id
1 Päron 50
2 Banan 50
3 Orange 50
4 Äpple 50
5 Bröd 75
6 Skivad skinka 25
7 Kleenex NULL

Och ett bord ropade summary_data Låt oss titta på ett exempel som visar hur man använder SQL UPDATE-satsen för att uppdatera en enskild kolumn i en tabell.

produkt-id aktuell_kategori
1 10
2 10
3 10
4 10
5 10
8 10

Låt oss nu uppdatera summary_data tabell med värden från produkter tabell. Ange följande UPDATE-sats:

UPPDATERA summary_data SET current_category = (VÄLJ kategori_id FRÅN produkter WHERE products.product_id = summary_data.product_id) WHERE FINNS (VÄLJ kategori_id FRÅN produkter WHERE products.product_id = summary_data.product_id);

Det kommer att uppdateras med 5 poster. Välj data från summary_data bord igen:

SELECT * FROM summary_data;

Det här är resultaten som du bör se:

produkt-id aktuell_kategori
1 50
2 50
3 50
4 50
5 75
8 10

Detta exempel skulle uppdatera aktuell_kategori fältet i summary_data bord med kategori_id från produkter tabell där produkt-id värden matchar. De första 5 skivorna i summary_data tabellen har uppdaterats.

DRICKS: Observera att vår UPDATE-sats inkluderade ett EXISTS-villkor i WHERE-satsen för att säkerställa att det fanns en matchning produkt-id i både produkter och summary_data tabell innan du uppdaterar posten.

Om vi ​​inte hade inkluderat villkoret EXISTS, skulle UPDATE-frågan ha uppdaterat aktuell_kategori fältet till NULL i den sjätte raden i summary_data bord (eftersom produkter tabellen har inte en post var produkt-id=8).

Öva övningar

Om du vill testa dina färdigheter med SQL UPDATE-satsen, prova några av våra övningar.

Dessa övningar låter dig prova dina färdigheter med UPDATE-satsen. Du kommer att få frågor som du behöver lösa. Efter varje övning tillhandahåller vi lösningen så att du kan kontrollera ditt svar. Ge det ett försök!

Vad händer om jag frågade, "Är alla uppdateringar installerade på din SQL Server?"

Hur ska man svara på en sådan fråga? Kontrollera Windows Update? Detta kommer knappast att hjälpa. Troligtvis kommer du att se något sånt här:

Men konstigt nog betyder det inte att SQL Server har de senaste uppdateringarna installerade!

För att spåra uppdateringar specifikt för SQL-servern har Microsoft skapat en speciell sida - . Bokmärk det:

Men innan vi går dit måste vi ta reda på vilken version vi har installerat just nu. Vi behöver ett exakt nummer, inklusive byggnumret. Du kan få det genom att titta på systemvariabeln @@Version:

Kom ihåg dessa siffror - endast genom dem kommer vi att kunna avgöra vilka uppdateringar vi redan har installerat och vilka vi inte har. SQL-servern, till skillnad från själva operativsystemet, informerar oss inte om varje installerad uppdatering. Därför måste du arbeta med numret @@Version.

Nu går vi till SQL Server Update Center och ser en bekväm skylt där:

Här behöver vi tre saker:

  • Låt oss först komma ihåg buildnumret som motsvarar den här uppdateringen. Efter att ha slutfört uppdateringsproceduren @@Version vår SQL-server bör ge exakt detta nummer.
  • För det andra bör du definitivt titta på historiken för byggnummer som motsvarar uppdateringar från det senaste servicepaketet. Detta är viktigt eftersom den kumulativa uppdateringen bara kommer att installeras på det service pack som föregår den.
  • Och för det tredje är det användbart att titta på listan över korrigeringar som finns i det samlade paketet. Administratören måste vara medveten om ändringarna som införs av detta paket.

Om vi ​​tittar på byggsiffrorna för tidigare uppdateringar kommer vi att se att gapet i siffrorna jämfört med vår nuvarande version är misstänkt stort:

Detta beror på att vi inte har SP1 installerat. Du måste installera den först.

Och nu har vi en handlingsplan:

  1. Installera servicepaket SP1.
  2. Installera det kumulativa uppdateringspaketet CU4.

Låt oss agera! Kontrollera numret efter att du har installerat SP1 @@Version. Från den ursprungliga 2100,60 ökade den till 3000,0.



Om du upptäcker ett fel markerar du ett textstycke och trycker på Ctrl+Enter
DELA: