Kontakty

Vymazanie záznamov z databázy SQL. Oracle - Odstrániť - Vymazať Duplikáty SQL Partition sekcie

Odstránenie záznamov

Ak chcete odstrániť záznamy z tabuľky, použije sa operátor Odstránenie:

Vymazať z názvoublitsu, kde podmienka;

Tento operátor odstráni záznam zo zadanej tabuľky (a nie samostatné hodnoty stĺpca), ktoré spĺňajú špecifikovanú podmienku. Podmienkou je logickým výrazom, ktorých rôzne návrhy boli zvažované v predchádzajúcich laboratórnych triedach.

Nasledujúci dotaz vymaže záznam zo zákazníckej tabuľky, v ktorom je hodnota stĺpca LNAME "IVANOV":

Odstrániť od zákazníka.

Kde lname \u003d "Ivanov"

Ak tabuľka obsahuje informácie o niekoľkých klientoch s priezviskom Ivanov, potom budú všetky odstránené.

V prípade vyhlásenia, môže to byť subkeristické pre vzorku údajov (výber). Podkladie v odstraňovaní operátora pracuje rovnakým spôsobom ako vo výbere. Nasledujúca požiadavka vymaže všetkých zákazníkov z mesta Moskvy, zatiaľ čo jedinečný identifikátor mesta sa vráti pomocou poddotazosti.

Odstrániť od zákazníka.

Tam, kde ide o IdentCity z mesta, kde CityName \u003d "Moskva")

Transact-SQL rozširuje štandardný SQL, ktorý vám umožní používať vo vyhlásení o odstránení iného z jedného. Toto rozšírenie, v ktorom je spojenie nastavené, je možné použiť namiesto investovaného dotazu v položke, kde sa uvediete odnímateľné čiary. Umožňuje vám špecifikovať údaje z druhej z druhej z a odstrániť zodpovedajúce riadky z tabuľky v prvej ponuke. Predchádzajúca žiadosť môže byť prepísaná takto.

Odstrániť od zákazníka.

Od zákazníka k vnútornému pripojiť

Prevádzka odstránenia záznamov z tabuľky je nebezpečná v zmysle, ktorá je spojená s rizikom ireverzibilnej straty dát v prípade sémantických (ale nie syntaktických) chýb v znení výrazu SQL výrazu. Aby ste sa vyhli problémom, odporúča sa najprv vykonať príslušnú žiadosť o výber, aby sa zobrazil, ktoré záznamy budú vymazané. Napríklad, pred vykonaním predtým zváženého, \u200b\u200bpožiadavka na vymazanie nebráni príslušnej žiadosti o výber.

Vyberte *

Od zákazníka k vnútornému pripojiť

Mesto c na k.idcity \u003d c.idcity a c.cityname \u003d "Moskva"

Ak chcete odstrániť všetky záznamy z tabuľky, stačí použiť príkaz na odstránenie bez kľúčového slova, kde. Zároveň tabuľka so všetkými stĺpcami definovanými v IT zostáva a je pripravená vložiť nové záznamy. Napríklad ďalšia požiadavka vymaže záznamy o všetkom tovare.

Vymazať z produktu

Úloha nezávislej práce: Formulovať v jazykovom jazyku SQL na odstránenie všetkých objednávok, ktoré nemajú žiadny produkt (t.j. všetky prázdne objednávky).



Odstránenie opakovaných čiar z tabuľky v Oracle (14)

Riešenie 1)

Vymazať z EMP, kde Rowid nie (vyberte MAX (Rowid) z EMP skupiny EMPNO);

Riešenie 2)

Vymazať z EMP, kde ROWID Rowid Rid, Row_number od EMPNO) RN z EMP), kde RN\u003e 1);

Riešenie 3)

Otestujem niečo v Oracle a vyplňte tabuľku niekoľkými príkladmi údajov, ale v procese som náhodou načítal duplikáty záznamov, takže teraz nemôžem vytvoriť primárny kľúč pomocou niektorých stĺpcov.

Ako odstrániť všetky opakované čiary a ponechať len jeden z nich?

Pre lepší výkon, to je to, čo som napísal:
(Pozri Plán vykonania)

Vymazať z your_Table, kde Rowid (SELECT T1.ROWID z your_table T1 vľavo vonkajšieho pripojenia (vyberte položku Min (Rowid) ako Rowid, Column1, Column2, Column3, stĺpec3) CO1 na (T1.ROWID \u003d CO1. Rowid), kde je CO1.ROWID NULL);

Skontrolujte pod skriptmi -

Vytvorte test tabuľky (ID INT, SAL INT);

Vložte do skúšobných hodnôt (1 100); Vložte do skúšobných hodnôt (1 100); Vložte do skúšobných hodnôt (2 200); Vložte do skúšobných hodnôt (2 200); Vložte do skúšobných hodnôt (3 300); Vložte do skúšobných hodnôt (3 300); Spáchať;

Vyberte * z testu;

Uvidíte tu 6 záznamov.
4.Run pod dotazom -

Vymazať zo skúšky, kde Rowid IN (SELECT ROWID z (SELECT ROWID ROW_NUMBER () nad (oddiel podľa objednávky podľa SAL) DUP z testu), kde DUP\u003e 1)

  1. vyberte * z testu;

Uvidíte, že duplikáty záznamov boli odstránené.
Dúfam, že to rieši vašu požiadavku. Vďaka :)

Ak chcete vybrať duplikáty, môže byť iba formát požiadavky:

Vyberte Groupfunkciu (stĺpec1), Skupina (stĺpec2), ..., COUNT (stĺpec1), stĺpec1, stĺpec2 ... z SHOP_TABLY GROUP podľa stĺpca1, stĺpec2, stĺpec3 ... s počtom (stĺpec1)\u003e 1

Správna požiadavka na iný návrh:

Odstrániť z TableName A kde A.RECId\u003e ľubovoľné (vyberte B.Rowid z Tabname B, kde A.Fieldame \u003d B.Fieldame a A.Fieldame2 \u003d B.Fieldame2 a .... Takže na identifikáciu duplicitných riadkov. ..)

Tento dotaz uloží najstarší záznam v databáze pre kritériá vybraté v klauzule, kde sa nachádza.

Oracle Certified Associate (2008)

Nevidel som odpovede, ktoré používajú všeobecné výrazy tabuľky a funkcie okien. To je to, čo mi uľahčí prácu.

Vymazať od starostlivosti, kde Rowid in (s duplikátmi ako (vyberte ROWID RID, ROW_NUMBER () Over (oddiel od First_name, Last_name, Birth_Date) ako RN súčet (1) nad (oddiel od First_name, Last_name, Birth_Date Objednávka ROWID ROWID A neviazané nasledujúce) ako CNT od starostlivosti, kde je load_date null) vyberte RID z duplikátov, kde RN\u003e 1);

Čo treba poznamenať:

1) Skontrolujeme iba duplicitné polia v sekcii.

2) Ak máte dôvod vybrať si jeden duplikát nad ostatnými, môžete použiť objednávku podľa ponuky tak, aby tento riadok mohol mať Row_Number () \u003d 1

3) Duplikát vášho čísla môžete zmeniť zmenou záverečnej ponuky, kde "kde rn\u003e n" s n\u003e \u003d 1 (Myslel som, že n \u003d 0 vymaže všetky riadky s duplikátov, ale jednoducho odstrániť všetky riadky ),

4) Pridaná súčet sekcie poľa, CT dotaz, ktorý sa ožení s každým číslom FOW v skupine. Preto vyberte rady s duplikátmi, vrátane prvého prvku, používania "Kde CNT\u003e 1".

1. dopyt

Vymazať z EMP, kde Rowid nie (vyberte MAX (Rowid) z EMP skupiny EMPNO);

2. SLOKTION

Vymazať z EMP, kde ROWID Rowid Rid, Row_number od EMPNO) RN od EMP), kde RN\u003e 1);

3.

Vymazať z EMP E1, kde Rowid nie (vyberte MAX (ROGHID) z EMP E2, kde E1.EMPNO \u003d E2.EPNO);

4. dopyt

Vymazať z EMP, kde Rowid Rowid RID, DESTE_RANK () (oddiel EMPNO objednávke podľa ROWID) RN od EMP), kde RN\u003e 1);

Vytvorenie alebo výmena postup DELETE_DUPLICE_ENQ as Kurzor C1 je Select * z dotazu; Začnite pre z v C1 Loop Delete Dopyt, kde Enquiry.enquiryno \u003d Z.enquiryno a Rowid\u003e Any (vyberte RowID z dopytu, kde Enquiry.enquiryno \u003d z.enquiryno); Koncová slučka; End delete_duplicate_enq;

Vytvorenie tabuľky ABCD (ID číslo (10), názov VARCHAR2 (20)) Vložte do ABCD hodnoty (1, "ABC") vložte do hodnôt ABCD (2, "PQR") vložku do hodnôt ABCD (3, "XYZ") Do ABCD hodnoty (1, "ABC") vložte do ABCD hodnôt (2, "PQR") vložte do ABCD hodnôt (3, "XYZ") Vybrať * z ABCD ID NÁZOV 1 ABC 2 PQR 3 XYZ 1 ABC 2 PQR 3 XYZ Vymazanie duplicitného záznamu, ale uchovávajte odlišný záznam v tabuľke Odstránenie z ABCD A kde Rowid\u003e (vyberte Min (Rowid) z ABCD B, kde B.id \u003d A.ID); Spustite vyššie uvedený dotaz 3 riadky Delete Select * z ABCD ID NÁZVU 1 ABC 2 PQR 3 XYZ



odstránenie ROWID ORACLE (14)

Otestujem niečo v Oracle a vyplňte tabuľku niekoľkými príkladmi údajov, ale v procese som náhodou načítal duplikáty záznamov, takže teraz nemôžem vytvoriť primárny kľúč pomocou niektorých stĺpcov.

Ako odstrániť všetky opakované čiary a ponechať len jeden z nich?

Riešenie 1)

Vymazať z EMP, kde Rowid nie (vyberte MAX (Rowid) z EMP skupiny EMPNO);

Riešenie 2)

Vymazať z EMP, kde ROWID Rowid Rid, Row_number od EMPNO) RN z EMP), kde RN\u003e 1);

Riešenie 3)

Pre lepší výkon, to je to, čo som napísal:
(Pozri Plán vykonania)

Vymazať z your_Table, kde Rowid (SELECT T1.ROWID z your_table T1 vľavo vonkajšieho pripojenia (vyberte položku Min (Rowid) ako Rowid, Column1, Column2, Column3, stĺpec3) CO1 na (T1.ROWID \u003d CO1. Rowid), kde je CO1.ROWID NULL);

Skontrolujte pod skriptmi -

Vytvorte test tabuľky (ID INT, SAL INT);

Vložte do skúšobných hodnôt (1 100); Vložte do skúšobných hodnôt (1 100); Vložte do skúšobných hodnôt (2 200); Vložte do skúšobných hodnôt (2 200); Vložte do skúšobných hodnôt (3 300); Vložte do skúšobných hodnôt (3 300); Spáchať;

Vyberte * z testu;

Uvidíte tu 6 záznamov.
4.Run pod dotazom -

Vymazať zo skúšky, kde Rowid IN (SELECT ROWID z (SELECT ROWID ROW_NUMBER () nad (oddiel podľa objednávky podľa SAL) DUP z testu), kde DUP\u003e 1)

  1. vyberte * z testu;

Uvidíte, že duplikáty záznamov boli odstránené.
Dúfam, že to rieši vašu požiadavku. Vďaka :)

Ak chcete vybrať duplikáty, môže byť iba formát požiadavky:

Vyberte Groupfunkciu (stĺpec1), Skupina (stĺpec2), ..., COUNT (stĺpec1), stĺpec1, stĺpec2 ... z SHOP_TABLY GROUP podľa stĺpca1, stĺpec2, stĺpec3 ... s počtom (stĺpec1)\u003e 1

Správna požiadavka na iný návrh:

Odstrániť z TableName A kde A.RECId\u003e ľubovoľné (vyberte B.Rowid z Tabname B, kde A.Fieldame \u003d B.Fieldame a A.Fieldame2 \u003d B.Fieldame2 a .... Takže na identifikáciu duplicitných riadkov. ..)

Tento dotaz uloží najstarší záznam v databáze pre kritériá vybraté v klauzule, kde sa nachádza.

Oracle Certified Associate (2008)

Nevidel som odpovede, ktoré používajú všeobecné výrazy tabuľky a funkcie okien. To je to, čo mi uľahčí prácu.

Vymazať od starostlivosti, kde Rowid in (s duplikátmi ako (vyberte ROWID RID, ROW_NUMBER () Over (oddiel od First_name, Last_name, Birth_Date) ako RN súčet (1) nad (oddiel od First_name, Last_name, Birth_Date Objednávka ROWID ROWID A neviazané nasledujúce) ako CNT od starostlivosti, kde je load_date null) vyberte RID z duplikátov, kde RN\u003e 1);

Čo treba poznamenať:

1) Skontrolujeme iba duplicitné polia v sekcii.

2) Ak máte dôvod vybrať si jeden duplikát nad ostatnými, môžete použiť objednávku podľa ponuky tak, aby tento riadok mohol mať Row_Number () \u003d 1

3) Duplikát vášho čísla môžete zmeniť zmenou záverečnej ponuky, kde "kde rn\u003e n" s n\u003e \u003d 1 (Myslel som, že n \u003d 0 vymaže všetky riadky s duplikátov, ale jednoducho odstrániť všetky riadky ),

4) Pridaná súčet sekcie poľa, CT dotaz, ktorý sa ožení s každým číslom FOW v skupine. Preto vyberte rady s duplikátmi, vrátane prvého prvku, používania "Kde CNT\u003e 1".

1. dopyt

Vymazať z EMP, kde Rowid nie (vyberte MAX (Rowid) z EMP skupiny EMPNO);

2. SLOKTION

Vymazať z EMP, kde ROWID Rowid Rid, Row_number od EMPNO) RN od EMP), kde RN\u003e 1);

3.

Vymazať z EMP E1, kde Rowid nie (vyberte MAX (ROGHID) z EMP E2, kde E1.EMPNO \u003d E2.EPNO);

4. dopyt

Vymazať z EMP, kde Rowid Rowid RID, DESTE_RANK () (oddiel EMPNO objednávke podľa ROWID) RN od EMP), kde RN\u003e 1);

Vytvorenie alebo výmena postup DELETE_DUPLICE_ENQ as Kurzor C1 je Select * z dotazu; Začnite pre z v C1 Loop Delete Dopyt, kde Enquiry.enquiryno \u003d Z.enquiryno a Rowid\u003e Any (vyberte RowID z dopytu, kde Enquiry.enquiryno \u003d z.enquiryno); Koncová slučka; End delete_duplicate_enq;

Vytvorenie tabuľky ABCD (ID číslo (10), názov VARCHAR2 (20)) Vložte do ABCD hodnoty (1, "ABC") vložte do hodnôt ABCD (2, "PQR") vložku do hodnôt ABCD (3, "XYZ") Do ABCD hodnoty (1, "ABC") vložte do ABCD hodnôt (2, "PQR") vložte do ABCD hodnôt (3, "XYZ") Vybrať * z ABCD ID NÁZOV 1 ABC 2 PQR 3 XYZ 1 ABC 2 PQR 3 XYZ Vymazanie duplicitného záznamu, ale uchovávajte odlišný záznam v tabuľke Odstránenie z ABCD A kde Rowid\u003e (vyberte Min (Rowid) z ABCD B, kde B.id \u003d A.ID); Spustite vyššie uvedený dotaz 3 riadky Delete Select * z ABCD ID NÁZVU 1 ABC 2 PQR 3 XYZ

Oracle vám umožňuje vymazať riadky z tabuliek, pohľady, vybavenia reprezentácií, podkokerovacích a rozdelených pohľadov a tabuliek nasledovne.

(Menovky | iba (name_table)) [pseudonym] [(oddiel) subprava

(meno)))] (poddotaz)]) Tabuľka (expression_lit_collection) [(+)])

Do premennej [, ...]]

Parametre sú uvedené nižšie.

name_Table [pseudonym]

Určuje tabuľku, reprezentáciu, zobrazenie materializovaného alebo rozdeleného stola alebo zobrazenia, z miesta, kde sa záznamy vymažú. Ak si želáte, môžete pred mene_table zadať schému alebo zadať po názve pripojenia tabuľky k databáze. V opačnom prípade bude systém Oracle použije aktuálny diagram a lokálny databázový server. Ak si želáte, môžete priradiť niektoré pseudonym. Pseudonym je potrebný, ak sa tabuľka vzťahuje na spôsob atribútu alebo typu objektu.

Sekcia názvu oddielu

Prevádzka vymazania sa vzťahuje na zadaný oddiel, a nie na celú tabuľku. Keď odstránite z rozdelenej tabuľky, nie je potrebné špecifikovať názov oddielu, ale v mnohých prípadoch pomáha znížiť komplexnosť ponuky ponuky.

SubPARTION)

Odstránenie sa vzťahuje na určenú pododdiel, a nie na celú tabuľku.

(poddotaz)])

Uvádza sa, že účel prevádzky odstraňovania je vnorené poddotaz, a nie tabuľka, reprezentácia alebo iný objekt databázy. Parametre tohto návrhu sú nasledovné.

podplatný

ZAPOJENIE VYHLÁSENIA JE URČENANÉ, KTORÉ JE POTREBNÉ. Môžete vytvoriť všetky štandardné poddotaz, ale nemôže obsahovať objednávku podľa ponúk.

Len s čítaním

Uvádza sa, že poddotaz nie je možné aktualizovať.

S možnosťou kontroly

Systém Oracle vyrazí akékoľvek zmeny na vzdialenej tabuľke, ktoré nie sú viditeľné vo výslednej sade svetelných údajov.

Obmedzenie NÁZVY_NAME

Systém Oracle obmedzí zmeny vykonané na základe obmedzenia názvom name_Name.

Tabuľka (výraz na valcovanie) [(+)]

Systém Oracle bude spracovať výrazy rôznorodého ako tabuľky, hoci v skutočnosti to môže byť poddotaz, funkcia alebo iný konštruktor zberu. V každom prípade by hodnota vrátená výrazom pre valcovanie by mala byť vnorená tabuľka alebo varray.

Vrátenie výrazu

Riadky ovplyvnené príkazom, kde príkaz Delete zvyčajne vracia len počet vzdialených reťazcov. Návrh návratu možno použiť, ak je cieľom príkazu tabuľka, zrekonštruovaný pohľad alebo reprezentácia jedným základným tabuľkou. Ak sa ponuka používa pri vymazaní jedného riadku, potom hodnoty zo vzdialeného reťazca, ktoré sú definované výrazom, sú uložené v premenných PL / SQL a premenné viažu (premenné viažu). Ak sa návrh používa pri odstraňovaní mnohých riadkov, potom hodnoty z diaľkových reťazcov, ktoré sú určené poľnohospodárskymi a m, sú uložené v poliach BIND (Bind Bind).

Premenlivý

Uveďte premenné, v ktorých sa hodnoty vrátia v dôsledku návrhu návratu.

Pri spustení príkazu na odstránenie Oracle vráti miesto späť na tabuľku alebo index, kde boli údaje uložené v tabuľke (alebo základná tabuľka).

Ak sa údaje vymažú z prezentácie, pohľad nemôže obsahovať operácie nad súpravami, zreteľné kľúčové slovo, pripojenia, agregátová funkcia, analytická funkcia, podkokerovarenstvo Select, ponúka skupinu, ponúka objednávku podľa, ponúka sa, že sa spoja alebo spustí.

Nižšie je uvedený príklad, v ktorom vymažeme údaje zo vzdialeného servera.

Odstráňte zo Scott. [Chránené e-mail];

V nasledujúcom príklade

odstránime údaje z tabuľky uvedenej vo výraze pre zber.

Vymazať tabuľku (vyberte ContactName od zákazníkov

s kde C.Customerid \u003d "Bottm") s. Región je null alebo s.country \u003d "Mexiko";

Ale príklad vymazania z časti.

Odstráňte z oddielu predaja (SALES_Q3_1997), kde je počet\u003e 10000;

Nakoniec, v nasledujúcom príklade, použijeme návratový návrh na zobrazenie vzdialených hodnôt.

Odstrániť od zamestnanca, kde JOB_ID \u003d 13

A hire_date + tokyminterval ("01-06") \u003d.

V predchádzajúcom príklade sa vymažú položky z tabuľky zamestnancov a hodnoty J Obi VL sa vrátia do vopred určenej premennej: Intol.



Páči sa vám článok? Zdieľaj to