Odlišné příklady sql. KDE – podmínka pro výběr řádků. Nastavení aliasů pro sloupce dotazu
Často když pomocí SQL pro získávání informací z tabulek dostává uživatel redundantní data skládající se z absolutně identických opakujících se řádků. Chcete-li se této situaci vyhnout, použijte odlišný argument SQL v klauzuli Select. Tento článek se bude zabývat příklady použití tohoto argumentu a také situacemi, ve kterých je lepší odmítnout použití argumentu.
Než se pustíme do konkrétních příkladů, vytvořte si v databázi pár potřebných tabulek.
Příprava stolůPředstavme si, že máme informace o tapetě uložené v naší databázi, prezentované ve dvou tabulkách. Jedná se o tabulku Oboi s poli id (jedinečný identifikátor), typem (typ tapety - papír, vinyl atd.), barvou (barva), strukturou (strukturou) a cenou (cenou). A tabulka Ostatki (zůstává) s poli id_oboi (odkaz na jedinečný identifikátor v tabulce Oboi) a count (počet rolí na skladě).
Naplňme tabulky daty. Přidejme 9 položek do tabulky tapet:
Papír | Vícebarevné | Reliéfní | ||
Papír dvouvrstvý | ||||
Vinyl | Reliéfní | |||
Netkané | Reliéfní | |||
Papír dvouvrstvý | ||||
Papír | Vícebarevné | |||
Vinyl | Hnědý | |||
Netkané | Reliéfní | |||
Tkanina |
V tabulce je také devět položek se zůstatky:
Začněme popisem toho, jak používat odlišné v SQL.
Místo zřetele v klauzuli SelectOdlišný argument by měl být v dotazech umístěn bezprostředně za klíčové slovo Select. Platí pro všechny sloupce uvedené v klauzuli Select najednou, protože z konečného výsledku dotazu vyloučí absolutně identické řádky. Při psaní tedy stačí uvést jednou SQL dotaz"vybrat odlišné". Výjimkou je použití odlišných v rámci agregačních funkcí, na které se podíváme o něco později.
Je třeba si uvědomit, že většina DBMS nerozpozná váš dotaz, jako je:
SELECT odlišné Ostatki.Count, odlišné Oboi.* VNITŘNÍ PŘIPOJENÍ Ostatki NA Wallpaper.id = Ostatki.id_oboi |
Zde je příslušný argument specifikován několikrát nebo uveden jednou, ale před druhým, třetím nebo jiným vybraným sloupcem. Zobrazí se chyba uvádějící nepřesnosti v syntaxi.
Použití odlišné ve standardních dotazechJe zřejmé, že při správné konstrukci struktury tabulek a jejich naplnění jsou vyloučeny situace, kdy se v rámci jedné tabulky vyskytují naprosto shodné řádky. Proto je spouštění dotazu „Vybrat odlišné *“, který vybírá z jedné tabulky, nepraktické.
Představme si situaci, kdy potřebujeme zjistit, jaký typ tapety máme pro pohodlí, okamžitě seřaďme podle typu:
Jak vidíte, v tabulce jsou duplicitní řádky. Pokud do klauzule přidáme Select different:
Pokud tedy byly údaje do tabulek správně zaneseny, pak ihned na zavolání či žádost zákazníků budeme schopni odpovědět, že tekuté tapety, skleněné tapety a akrylové tapety nejsou na prodejně dostupné. Vzhledem k tomu, že sortiment v obchodech není obvykle omezen na sto tapet, bylo by procházení seznamu neojedinělých typů značně pracné.
Použití odlišných vnitřních agregačních funkcíArgument lze použít s libovolnou agregační funkcí. U Min a Max se ale jeho použití nijak neprojeví a při výpočtu součtu či průměrné hodnoty si lze jen málokdy představit situaci, kdy by nebylo potřeba brát ohled na opakování.
Řekněme, že chceme vědět, jak je náš sklad plný, a za tímto účelem odešleme požadavek, který vypočítá celkový počet rolí ve skladu:
pak dostaneme jen 119, protože tapety pod čísly artiklu 3 a 7 jsou na skladě ve stejném množství. Je však zřejmé, že tato odpověď je nesprávná.
Nejběžnější použití výrazu v SQL je s funkcí Count. Můžeme tedy snadno zjistit, kolik jedinečných typů tapet máme:
VYBERTE počet (různý typ tapety) |
A získáte výsledek 5 - běžný a dvouvrstvý papír, vinyl, tkanina a netkaná textilie. Každý jistě viděl reklamu typu: „Jen my máme více než 20 druhů různých tapet!“, což znamená, že v tomto obchodě není pár desítek rolí všeho možného, ale tapety široké škály moderních typů.
Zajímavé je, že v jednom požadavku můžete zadat více funkcí Count, buď s nebo bez odlišného atributu. To znamená, že toto je jediná situace, kdy může být rozdíl v Select přítomen několikrát.
Kdy opustit argumentMěli byste se vyhnout použití odlišného argumentu SQL v jednom ze dvou případů:
Řekněme, že váš šéf vás požádá, abyste uvedli tapetu, kterou máte, pouze ve dvou sloupcích – typ a barva. Ze zvyku zadáte odlišný argument:
Může se zdát, že máme pouze jeden typ papírové tapety (běžnou a dvouvrstvou), i když ve skutečnosti i v naší malé tabulce jsou každý dva články (výsledek bez rozdílu):
Proto, stejně jako při psaní jakéhokoli dotazu, musíte být opatrní s odlišným argumentem a kompetentně vyřešit problém jeho použití v závislosti na úkolu.
Alternativa k odlišnémuOpakem odlišného argumentu je argument Vše. Při jeho použití se uloží duplicitní řádky. Ale protože ve výchozím nastavení si DBMS myslí, že by měly být vytištěny všechny hodnoty, argument All je spíše kvalifikátorem než skutečným funkčním argumentem.
Doufáme, že nyní chápete, kdy se používá odlišný (SQL). Popis vám dal úplné informace o vhodnost použití tohoto argumentu při rozhodování různé úkoly. Ostatně, jak se ukázalo, i takto jednoduchý argument v jeho aplikaci skrývá velmi hmatatelnou pravděpodobnost ztráty některých dat a zobrazení nepřesných informací.
VYBRATZáklady SELECT dotazů v Oracle SQL, základní syntaxe dotazů, seznam sloupců, aliasy a literály, operátor q", klíčové slovo ODLIŠNÝ
Hlavním prostředkem pro získávání informací z databáze jsou dotazy, tedy příkaz SELECT. Základní možnosti tohoto příkazu budou probrány v této části, o dalších, složitějších možnostech bude řeč v následujících částech. Každá část zdůrazní, jak se srovnává s podobnými funkcemi v Microsoft SQL Server.
Protože všechny hlavní databáze podporují standard ANSI SQL, základní schopnosti jak v Oracle, tak v jiných databázích (Microsoft SQL Server, IBM DB 2, Informix, Sybase, Microsoft Access) budou podobné. Rozdíly jsou v detailech, které standard SQL nedefinuje, ale které jsou poměrně značné a mohou způsobit potíže uživatelům, kteří jsou zvyklí dotazovat se v jiných databázích.
Základní syntaxe SELECT příkazy v Oracle to vypadá takto:
SELECT [ DISTINCT ] column_list FROM source WHERE filter ORDER BY sort_expression
Zde je příklad takového požadavku:
SELECT zaměstnanec_id, jméno, příjmení, datum_náboru FROM hr.employees WHERE datum_náboru< "01.01.2000" ORDER BY last_name
Jak vidíme, v žádosti zatím nejsou použity speciální funkce, vypadá naprosto standardně a je zcela identický s podobnými dotazy například v SQL Serveru. Pokud potřebujeme vybrat všechny sloupce z databáze nebo pohledu, můžeme místo seznamu sloupců zadat hvězdičku:
VYBERTE * FROM hr.employees WHERE datum_náboru< "01.01.2000" ORDER BY last_name
Zobrazovaný název sloupce lze změnit pomocí aliasu. Chcete-li to provést, jednoduše napište název aliasu bezprostředně za název sloupce nebo použijte klíčové slovo AS (obě syntaxe jsou zcela ekvivalentní):
SELECT last_name Příjmení FROM hr.employees
SELECT last_name AS Příjmení FROM hr.employees
Obzvláště vhodné je použít aliasy pro počítané sloupce, které zpočátku nemají název:
SELECT last_name AS Příjmení, plat*12 AS "Plat za rok" OD hr.zaměstnanců
Pokud alias používá mezery nebo nějaký druh servisních znaků, musí být takový alias umístěn v uvozovkách.
Všimněme si také některých funkcí spojených se seznamem sloupců v Oracle. Zatímco v SQL Serveru mohou být názvy sloupců (s mezerami a vyhrazenými slovy) umístěny v hranatých závorkách (a obvykle ve dvojitých uvozovkách - v závislosti na nastavení relace), v Oracle obě možnosti způsobí chybu.
Literály můžete zahrnout do seznamu sloupců v Oracle. Literál je jakákoli řetězcová hodnota, datum nebo číslo, které se vejde do seznamu sloupců a není ani názvem sloupce, ani aliasem. Literály se budou opakovat pro každý vrácený sloupec. Obvykle se používají k vytváření anotací ve vrácené sadě výsledků:
SELECT last_name AS Příjmení, "Plat za rok: " , plat*12 OD hr.zaměstnanců
V tomto příkladu "Plat za rok: " je literál, který bude vydán pro každý záznam.
Řetězcové literály a literály data musí být uzavřeny v jednoduchých uvozovkách. Literály ve formě číselných hodnot nejsou umístěny v uvozovkách.
Všimněte si, že literály jsou ve výstupu často kombinovány s hodnotami vrácenými z databáze pomocí operátoru zřetězení (||). Operátoři Oracle budou diskutováni v částech 2.2, 2.3,.
Problém, který někdy nastává při práci s literály, je ten, že samotný literál může obsahovat vyhrazený znak, například jednoduché uvozovky. Oracle, na rozdíl například od SQL Serveru, umožňuje uživateli nezávisle definovat znak, který bude použit jako uvozovky. Tato redefinice může vypadat takto. například takto:
vyberte jméno _ oddělení , q " [ Je přiřazeno ID manažera : ] " , ID _ manažera z oddělení
Pokus o použití běžných jednoduchých uvozovek na literál bude mít za následek chybu, protože uvozovka se vyskytuje uvnitř hodnoty znaku samotného literálu. Proto v tomto příkladu fungují hranaté závorky jako uvozovky.
Všimněme si některých vlastností použití operátoru q ":
- lze použít jako malé písmeno q a kapitál (Q);
- po q by měl být pravidelný jediný citát. Další jednoduchá uvozovka ukončuje rozsah operátoru q;
- Bezprostředně za jednoduchými uvozovkami musí být znak zvolený uživatelem, který má být použit jako uvozovky. Tímto znakem může být cokoliv kromě mezery, nového řádku nebo tabulátoru (včetně jednoduchých uvozovek). Pokud uživatel zvolil znak (, (, [ nebo . V ostatních případech se uzavírání uvozovek provádí pomocí stejného znaku, který byl použit k jejich otevření.
Poslední bod týkající se základní syntaxe dotazu. Ve výchozím nastavení dotaz vrátí všechny hodnoty z databáze, které odpovídají parametrům dotazu, i když některé z vrácených hodnot jsou úplně stejné. Například žádost
VÝBĚR mzdy OD hod. zaměstnanci
vrátí 107 řádků, přestože se značná část hodnot bude opakovat.
Chcete-li vrátit pouze jedinečné hodnoty (nebo sady hodnot, pokud je vráceno více sloupců), můžete v dotazu použít klíčové slovo DISTINCT:
VYBERTE ODLIŠITOU mzdu OD hr.zaměstnanců
Takový dotaz vrátí 57 hodnot a všechny hodnoty budou jedinečné.
Jedinečnou vlastností Oracle je, že můžete použít klíčové slovo UNIQUE namísto DISTINCT. SQL Server to neumožňuje.
V prvním díle jsme se již trochu dotkli jazyka DML, a to pomocí téměř celé sady jeho příkazů, s výjimkou příkazu MERGE.Budu mluvit o DML podle své sekvence vyvinuté na osobní zkušenost. Po cestě se také pokusím mluvit o „kluzkých“ místech, na která stojí za to se zaměřit;
Protože učebnice je věnována širokému okruhu čtenářů (nejen programátorům), pak bude výklad někdy vhodný, tzn. dlouhé a nudné. To je moje vize materiálu, který jsem získal především v praxi jako výsledek odborné činnosti.
Hlavním cílem tohoto tutoriálu, krok za krokem, je rozvinout úplné pochopení podstaty jazyka SQL a naučit vás, jak správně aplikovat jeho konstrukce. Prolistování tohoto materiálu by mohlo zajímat i profesionály v této oblasti, možná se budou moci dozvědět něco nového pro sebe, nebo možná bude jen užitečné si jej přečíst, aby si osvěžili paměť. Doufám, že to bude pro každého zajímavé.
Protože DML v dialektu databáze MS SQL velmi úzce souvisí se syntaxí konstruktu SELECT, takže o DML začnu mluvit s ním. Podle mého názoru je konstrukt SELECT nejdůležitějším konstruktem v jazyce DML, protože díky němu nebo jeho částem jsou potřebná data načtena z databáze.
Jazyk DML obsahuje následující konstrukce:
- SELECT – výběr dat
- INSERT – vložení nových údajů
- UPDATE – aktualizace dat
- DELETE – smazání dat
- MERGE – slučování dat
V tomto díle se podíváme pouze na základní syntaxi příkazu SELECT, která vypadá takto:
SELECT seznam_sloupců nebo * FROM zdroj WHERE filtr ORDER BY řazení_výrazu
Téma příkazu SELECT je velmi široké, proto se v této části zaměřím pouze na jeho základní struktury. Věřím, že bez znalosti základů nemůžete začít studovat složitější struktury, protože pak se vše bude točit kolem tohoto základního designu (poddotazy, spojení atd.).
Také v rámci tohoto dílu budu mluvit i o TOP nabídce. Záměrně jsem tuto větu neuvedl v základní syntaxi, protože... je implementován odlišně v různých dialektech SQL.
Pokud je jazyk DDL více statický, tzn. s jeho pomocí se vytvářejí rigidní struktury (tabulky, vztahy atd.), pak je jazyk DML dynamický, zde můžete různými způsoby získat správné výsledky.
Trénink bude pokračovat i v režimu Krok za krokem, tzn. Při čtení byste se měli okamžitě pokusit dokončit příklad vlastníma rukama. Poté analyzujete získaný výsledek a snažíte se jej intuitivně pochopit. Zůstane-li něco nejasné, například význam funkce, obraťte se o pomoc na internet.
Příklady budou ukázány v databázi Test, která byla vytvořena pomocí DDL+DML v první části.
Pro ty, kteří nevytvářeli databázi v první části (protože ne každého může zajímat jazyk DDL), mohou použít následující skript:
Testovací skript pro vytvoření databáze
Vytvoření databáze CREATE DATABASE Test GO -- udělejte testovací databázi aktuální USE Test GO -- vytvořte referenční tabulky CREATE TABLE Positions(ID int IDENTITY(1,1) NENÍ NULL OMEZENÍ PK_Positions PRIMÁRNÍ KLÍČ, název nvarchar(30) NOT NULL) CREATE TABLE Departments(ID int IDENTITY(1,1) NOT NULL CONSTRAINT PK_Departments PRIMÁRNÍ KLÍČ, název nvarchar(30) NOT NULL) GO -- vyplňte referenční tabulky sadou dat IDENTITY_INSERT Pozice ON INSERT Pozice(ID,Název)VALUES (1,N"Účetní"), (2,N"Ředitel"), (3,N"Programátor"), (4,N"Senior programátor") SET IDENTITY_INSERT Pozice OFF GO SET IDENTITY_INSERT Departments ON INSERT Departments(ID,Name)VALUES (1,N"Administration"), (2,N"Accounting"), (3,N"IT") NASTAVIT IDENTITY_INSERT Oddělení OFF GO -- vytvořit tabulku se zaměstnanci CREATE TABLE Zaměstnanci(ID int NOT NULL, jméno nvarchar(30), datum narození, e-mail nvarchar(30), PositionID int, DepartmentID int, datum náboru NOT NULL CONSTRAINT DF_Employees_HireDate DEFAULT SYSploDATETIME(), ManagerID INT. (ID) , CONSTRAINT FK_Employees_DepartmentID FOREIGN KEY(DepartmentID) REFERENCES Departments(ID), CONSTRAINT FK_Employees_PositionID FOREIGN KEY(PositionID) REFERENCES Positions(ID), CONSTRAINT FK_Employees_Manager (ID_klíče FOREI.CONSTRAINT)Manager ID_klíče UCON mp loyees_Email UNIQUE (E-mail) , CONSTRAINT CK_Employees_ID CHECK (ID BETWEEN 1000 AND 1999), INDEX IDX_Employees_Name(Jméno)) GO -- vyplňte jej údaji INSERT Zaměstnanci (ID,Jméno,Narozeniny,E-mail,ID pozice,ID)00 VALUEIDENS.1.IManager ", "19550219"," [e-mail chráněný]",2,1,NULL), (1001,N"Petrov P.P.","19831203"," [e-mail chráněný]",3,3,1003), (1002,N"Sidorov S.S.","19760607"," [e-mail chráněný]",1,2,1000), (1003,N"Andreev A.A.","19820417"," [e-mail chráněný]",4,3,1000)
To je vše, nyní jsme připraveni začít se učit jazyk DML.
SELECT – operátor vzorkování dat Nejprve u aktivního editoru dotazů otestujme aktuální databázi výběrem v rozevíracím seznamu nebo pomocí příkazu „USE Test“.Začněme nejzákladnější formou SELECT:
VYBERTE * OD zaměstnanců
V tomto dotazu požadujeme vrátit všechny sloupce (označené "*") z tabulky Zaměstnanci - můžete to číst jako "VYBRAT všechna_pole Z tabulky zaměstnanců." Pokud existuje seskupený index, vrácená data budou s největší pravděpodobností setříděna podle něj, v v tomto případě podle sloupce ID (ale to není důležité, protože ve většině případů uvedeme řazení v výslovně sami pomocí ORDER BY ...):
1000 | Ivanov I.I. | 1955-02-19 | [e-mail chráněný] | 2 | 1 | 2015-04-08 | NULL |
1001 | Petrov P.P. | 1983-12-03 | [e-mail chráněný] | 3 | 3 | 2015-04-08 | 1003 |
1002 | Sidorov S.S. | 1976-06-07 | [e-mail chráněný] | 1 | 2 | 2015-04-08 | 1000 |
1003 | Andreev A.A. | 1982-04-17 | [e-mail chráněný] | 4 | 3 | 2015-04-08 | 1000 |
Obecně stojí za to říci, že v dialektu MS SQL nejjednodušší forma SELECT dotazu nemusí obsahovat blok FROM, v takovém případě jej můžete použít k získání některých hodnot:
SELECT 5550/100*15, SYSDATETIME(), -- získání databázového systému data SIN(0)+COS(0)
825 | 2015-04-11 12:12:36.0406743 | 1 |
Vezměte prosím na vědomí, že výraz (5550/100*15) dal výsledek 825, i když pokud počítáme na kalkulačce, bude hodnota (832,5). Výsledek 825 byl získán z toho důvodu, že v našem výrazu jsou všechna čísla celá čísla, proto je výsledkem celé číslo, tzn. (5550/100) nám dává 55, nikoli (55,5).
Pamatujte, že v MS SQL funguje následující logika:
- Celek / Celek = Celek (tj. v tomto případě existuje celočíselné dělení)
- Skutečné / Celé číslo = Skutečné
- Celé číslo / Skutečné = Skutečné
SELECT 123/10, -- 12 123./10, -- 12,3 123/10. -- 12.3
Zde (123.) = (123.0) jde jen o to, že v tomto případě lze zahodit 0 a ponechat pouze bod.
S ostatními aritmetické operace Platí stejná logika, jen v případě rozdělení je tato nuance relevantnější.
Pozor tedy na datový typ číselné sloupce. Pokud je to celé číslo a potřebujete získat skutečný výsledek, použijte transformaci nebo jednoduše vložte tečku za číslo označené jako konstanta (123.).
K převodu polí můžete použít funkci CAST nebo CONVERT. Použijme například pole ID, je typu int:
SELECT ID, ID/100, -- zde dojde k dělení celým číslem CAST(ID AS float)/100, -- pomocí funkce CAST převedete na typ float CONVERT(float,ID)/100, -- použijete funkci CONVERT převést na typ float ID/100. -- použijte transformaci zadáním, že jmenovatelem je skutečné číslo OD Zaměstnanců
1000 | 10 | 10 | 10 | 10.000000 |
1001 | 10 | 10.01 | 10.01 | 10.010000 |
1002 | 10 | 10.02 | 10.02 | 10.020000 |
1003 | 10 | 10.03 | 10.03 | 10.030000 |
Jen poznámka.
V databázi ORACLE je syntaxe bez bloku FROM nepřijatelná, k tomuto účelu se používá systémová tabulka DUAL, která obsahuje jeden řádek:
SELECT 5550/100*15, -- a v ORACLE bude výsledek roven 832,5 sysdate, sin(0)+cos(0) FROM DUAL
Poznámka. Před názvem tabulky v mnoha RDB může předcházet název schématu:
Schéma je logická jednotka databáze, která má své jméno a umožňuje v sobě seskupovat databázové objekty, jako jsou tabulky, pohledy atd.
Definice schématu v různých databázích se může v některých případech lišit, schéma přímo souvisí s uživatelem databáze, tzn. v tomto případě můžeme říci, že schéma a uživatel jsou synonyma a všechny objekty vytvořené ve schématu jsou v podstatě objekty daný uživatel. V M.S. SQL schéma je nezávislá logická jednotka, kterou lze vytvořit samostatně (viz VYTVOŘENÍ SCHÉMATU).
Standardně se v databázi MS SQL vytvoří jedno schéma s názvem dbo (Database Owner) a je to. vytvořené objekty ve výchozím nastavení jsou vytvořeny v tomto schématu. Pokud tedy jednoduše zadáme název tabulky v dotazu, bude prohledávána ve schématu dbo aktuální databáze. Pokud chceme vytvořit objekt v konkrétním schématu, budeme muset před název objektu přidat název schématu, například „CREATE TABLE název_schématu.název_tabulky(...)“.
V případě čs Název SQL schématu může také předcházet název databáze, ve které se schéma nachází:
SELECT * FROM Test.dbo.Employees -- název_databáze.název_schematu.tabulka
Toto objasnění může být užitečné, například pokud:
- v jednom požadavku přistupujeme k objektům umístěným v různých schématech nebo databázích
- potřebujete přenést data z jednoho schématu nebo databáze do jiného
- pokud jste v jedné databázi, musíte si vyžádat data z jiné databáze
- atd.
Nezapomeňte také, že v textu požadavku můžeme použít jak jednořádkové komentáře „-- ...“, tak víceřádkové „/* ... */“. Pokud je požadavek velký a složitý, pak komentáře mohou vám nebo někomu jinému po chvíli velmi pomoci zapamatovat si nebo pochopit jeho strukturu.
Pokud je v tabulce mnoho sloupců a zejména pokud je v tabulce stále mnoho řádků, plus pokud provádíme dotazy do databáze přes síť, pak by bylo vhodnější vybrat s přímým výpisem pole, která potřebujete, oddělená čárkami:
SELECT ID,Jméno FROM Zaměstnanci
Tito. zde říkáme, že potřebujeme vrátit pouze pole ID a Name z tabulky. Výsledek bude následující (mimochodem, optimalizátor se zde rozhodl použít index vytvořený polem Name):
1003 | Andreev A.A. |
1000 | Ivanov I.I. |
1001 | Petrov P.P. |
1002 | Sidorov S.S. |
Jen poznámka.
Někdy je užitečné podívat se, jak se data načítají, například zjistit, které indexy se používají. To lze provést kliknutím na tlačítko „Zobrazit odhadovaný plán provedení“ nebo nastavením „Zahrnout skutečný plán provedení – do výsledku zahrnout skutečný plán provedení dotazu“ (v tomto případě budeme moci vidět skutečný plán, resp. po provedení požadavku):
Analýza prováděcího plánu je velmi užitečná při optimalizaci dotazu, umožňuje zjistit, které indexy chybí nebo které indexy nejsou vůbec použity a lze je odstranit.
Nastavení aliasů pro tabulky Při výpisu sloupců jim může předcházet název tabulky umístěné v bloku FROM:
SELECT Employees.ID,Employees.Name FROM Employees
Ale použití této syntaxe je obvykle nepohodlné, protože název tabulky může být dlouhý. Pro tyto účely se obvykle uvádějí a používají kratší názvy - aliasy:
VYBERTE ID zam.,jméno zam. FROM Zaměstnanci JAKO zam
nebo
SELECT emp.ID,emp.Name FROM Zaměstnanci emp -- klíčové slovo AS lze vynechat (preferuji tuto možnost)
Zde emp je alias pro tabulku Zaměstnanci, který lze použít v kontextu tohoto příkazu SELECT. Tito. můžeme říci, že v kontextu tohoto příkazu SELECT dáváme tabulce nový název.
Jen poznámka.V ORACLE je povolena pouze možnost zadat alias tabulky bez klíčového slova AS.
DISTINCT – vyřazení duplicitních řádků Klíčové slovo DISTINCT se používá k vyřazení duplicitních řádků z výsledku dotazu. Zhruba řečeno, představte si, že nejprve provedete dotaz bez možnosti DISTINCT a poté z výsledku zahodíte všechny duplikáty. Ukažme si to pro větší názornost na příkladu:
Vytvořme dočasnou tabulku pro ukázku CREATE TABLE #Trash(ID int NOT NULL PRIMARY KEY, Col1 varchar(10), Col2 varchar(10), Col3 varchar(10)) -- vyplňte tuto tabulku nejrůznějšími odpadky INSERT #Trash (ID,Sloupec1, Sloupec2,Sloupec3)HODNOTY (1,"A","A","A"), (2,"A","B","C"), (3,"C"," A","B"), (4,"A","A","B"), (5,"B","B","B"), (6,"A","A" "B"), (7,"A","A","A"), (8,"C","A","B"), (9,"C","A"," B"), ( 10,"A","A","B"), (11,"A",NULL,"B"), (12,"A",NULL,"B") - podívejme se co požadavek vrátí bez možnosti DISTINCT SELECT Col1,Col2,Col3 FROM #Trash -- podívejme se, co dotaz vrátí s volbou DISTINCT SELECT DISTINCT Col1,Col2,Col3 FROM #Trash -- smažte dočasnou tabulku DROP TABLE #Trash
Vizuálně to bude vypadat takto (všechny duplikáty jsou označeny stejnou barvou): Nyní se podívejme, kde to lze použít, na praktičtějším příkladu - vrátíme se pouze jedinečné identifikátory
oddělení (tzn. zjistíme ID oddělení, ve kterých jsou zaměstnanci registrováni):
VYBERTE DISTINCT ID oddělení OD zaměstnanců
Vytváříme nové sloupce ALTER TABLE Zaměstnanci PŘIDAT Příjmení nvarchar(30), -- příjmení Jméno nvarchar(30), -- jméno Prostřední jméno nvarchar(30), -- prostřední jméno Plovoucí plat, -- a samozřejmě plat v některých jednotkách BonusPercent float -- procento pro výpočet bonusu ze mzdy GO -- vyplňte je údaji (některé údaje jsou záměrně vynechány) AKTUALIZACE Zaměstnanci SET Příjmení=N"Ivanov", Jméno=N"Ivan", Prostřední jméno=N"Ivanovich", Plat=5000,BonusPercent= 50 KDE ID=1000 -- Ivanov I.I. AKTUALIZACE Zaměstnanci SET Příjmení=N"Petrov",Jméno=N"Petr",MiddleName=N"Petrovich", Plat=1500,BonusPercent= 15 WHERE ID=1001 -- Petrov P.P. AKTUALIZACE Zaměstnanci SET Příjmení=N"Sidor",Jméno=N"Sidor",MiddleName=NULL, Plat=2500,BonusPercent=NULL WHERE ID=1002 -- Sidorov S.S. AKTUALIZACE Zaměstnanci SET Příjmení=N"Andreev",Jméno=N"Andrey",MiddleName=NULL, Plat=2000,BonusPercent= 30 WHERE ID=1003 -- Andreev A.A.
Ujistíme se, že data byla úspěšně aktualizována:
VYBERTE * OD zaměstnanců
1000 | Ivanov I.I. | Ivanov | Ivane | Ivanovič | 5000 | 50 | |
1001 | Petrov P.P. | Petrov | Petr | Petrovič | 1500 | 15 | |
1002 | Sidorov S.S. | Sidorov | Sidor | NULL | 2500 | NULL | |
1003 | Andreev A.A. | Andrejev | Andrey | NULL | 2000 | 30 |
SELECT -- pojmenujte vypočítaný sloupec Příjmení+" "+Jméno+" "+MiddleName AS Celé jméno, -- použití dvojité uvozovky, protože místo se používá HireDate AS "Datum přijetí", -- použití hranaté závorky, protože místo je využito Narozeniny AS [ Datum narození], -- slovo AS není nutné Mzda ZP OD Zaměstn
Ivanov Ivan Ivanovič | 2015-04-08 | 1955-02-19 | 5000 |
Petrov Petr Petrovič | 2015-04-08 | 1983-12-03 | 1500 |
NULL | 2015-04-08 | 1976-06-07 | 2500 |
NULL | 2015-04-08 | 1982-04-17 | 2000 |
Jak vidíme, námi zadané aliasy sloupců se projeví v záhlaví výsledné tabulky. Ve skutečnosti je to hlavní účel aliasů sloupců.
Vezměte prosím na vědomí, protože poslední 2 zaměstnanci neměli zadané prostřední jméno (hodnota NULL), pak nám výsledek výrazu „Příjmení+“ „+Jméno+“ „+MiddleName“ také vrátil NULL.
Pro spojení (přidání, zřetězení) řetězců v MS SQL se používá symbol „+“.
Pamatujte, že všechny výrazy, které obsahují hodnotu NULL (například dělení hodnotou NULL, sčítání s hodnotou NULL), vrátí hodnotu NULL.
Jen poznámka.V případě ORACLE se ke zřetězení řetězců používá operátor „||“. a zřetězení by vypadalo jako "Příjmení||" "||Jméno||" "||MiddleName". Pro ORACLE stojí za zmínku, že má výjimku pro typy řetězců, pro ně jsou NULL a prázdný řetězec "" totéž, takže v ORACLE se takový výraz vrátí pro poslední 2 zaměstnance "Sidorov Sidor" a "Andrey Andrejev“. V době ORACLE 12c, pokud vím, neexistuje žádná možnost, která by toto chování změnila (pokud se mýlím, opravte mě). Tady je pro mě těžké posoudit, jestli je to dobře nebo špatně, protože... V některých případech je chování NULL řetězce pohodlnější, jako v MS SQL, a v jiných, jako v ORACLE.
V ORACLE jsou také platné všechny aliasy sloupců uvedené výše, kromě [...].
Abychom neoplotili stavbu pomocí funkce ISNULL, v MS SQL můžeme použít funkci CONCAT. Zvažme a porovnejme 3 možnosti:
SELECT LastName+" "+FirstName+" "+MiddleName FullName1, -- 2 možnosti pro nahrazení NULL prázdnéřádky "" (dostaneme chování jako v ORACLE) ISNULL(Příjmení,"")+" "+ISNULL(Jméno,"")+" "+ISNULL(MiddleName,"") CeléJméno2, CONCAT(Příjmení," ", Jméno ," ",MiddleName) CeléJméno3 OD Zaměstnanců
Ivanov Ivan Ivanovič | Ivanov Ivan Ivanovič | Ivanov Ivan Ivanovič |
Petrov Petr Petrovič | Petrov Petr Petrovič | Petrov Petr Petrovič |
NULL | Sidorov Sidor | Sidorov Sidor |
NULL | Andrejev Andrej | Andrejev Andrej |
V MS SQL lze aliasy zadat také pomocí rovnítka:
SELECT "Datum přijetí"=Datum přijetí, -- kromě "..." a […] můžete použít "..." [Datum narození]=Narozeniny, ZP=Plat OD zaměstnanců
Použití klíčového slova AS nebo rovnítka k určení aliasu je pravděpodobně spíše věcí vkusu. Ale při analýze požadavků jiných lidí mohou být tyto znalosti užitečné.
Nakonec řeknu, že je lepší nastavit jména pro aliasy pouze pomocí latinských znaků a čísel, vyhnout se použití „…“, „…“ a […], tedy použít stejná pravidla, která jsme použili při pojmenovávání tabulek. . Dále v příkladech budu používat pouze taková jména a žádné „…“, „…“ a […].
Základní SQL aritmetické operátoryPriorita provedení aritmetické operátory stejně jako v matematice. V případě potřeby lze změnit pořadí aplikace operátorů pomocí závorek - (a+b)*(x/(y-z)).
A ještě jednou zopakuji, že jakákoli operace s NULL vygeneruje NULL, například: 10+NULL, NULL*15/3, 100/NULL - z toho všeho bude NULL. Tito. jednoduše řečeno, nedefinovaná hodnota nemůže přinést jednoznačný výsledek. Vezměte to v úvahu při sestavování dotazu a v případě potřeby zpracujte hodnoty NULL pomocí funkcí ISNULL a COALESCE:
SELECT ID,Jméno, Plat/100*BonusPercent AS Výsledek1, -- bez zpracování hodnot NULL Mzda/100*ISNULL(BonusPercent,0) AS Výsledek2, -- použijte funkci ISNULL Plat/100*COALESCE(BonusPercent,0) AS Výsledek3 - - použijte funkci COALESCE FROM Zaměstnanců
Řeknu vám něco o funkci COALESCE:
COALESCE (expr1, expr2, ..., exprn) - Vrátí první neNULL hodnotu ze seznamu hodnot.
SELECT COALESCE(f1, f1*f2, f2*f3) val -- v tomto případě bude vrácena třetí hodnota FROM (SELECT null f1, 2 f2, 3 f3) q
Většinou se zaměřím na povídání o konstrukcích DML a z větší části nebudu mluvit o funkcích, které se objeví v příkladech. Pokud nerozumíte, co konkrétní funkce dělá, vyhledejte si její popis na internetu, můžete dokonce vyhledávat informace podle skupiny funkcí najednou, například dotazem v vyhledávání Google"PANÍ. SQL řetězce funkce", "matematické funkce MS SQL" nebo "funkce zpracování NULL MS SQL". Existuje mnoho informací o funkcích a můžete je snadno najít. Například v knihovně MSDN se můžete dozvědět více o funkci COALESCE:
Výňatek z MSDN srovnání COALESCE a CASEVýraz COALESCE je syntaktická zkratka pro výraz CASE. To znamená, že kód COALESCE(výraz1,...n) je přepsán optimalizátorem dotazů jako další výraz VĚC:
CASE WHEN (výraz1 NENÍ NULL) THEN výraz1 WHEN (výraz2 NENÍ NULL) THEN výraz2 ... ELSE výrazN END
Podívejme se například, jak můžete použít zbytek dělení (%). Tento operátor velmi užitečné, když potřebujete rozdělit záznamy do skupin. Vytáhněte například všechny zaměstnance, kteří mají sudá osobní čísla (ID), tzn. ta ID, která jsou dělitelná 2:
VYBERTE ID,Jméno FROM Zaměstnanci WHERE ID%2=0 -- zbytek po vydělení 2 je 0
VYBERTE Příjmení, Jméno, Plat OD zaměstnanců ORDER BY LastName,FirstName -- výsledek seřaďte podle 2 sloupců - podle příjmení a poté podle jména
Existuje klíčové slovo ASC pro řazení ve vzestupném pořadí, ale protože vzestupné řazení je výchozí, můžete na tuto možnost zapomenout (nepamatuji si, kdy jsem tuto možnost použil). Stojí za zmínku, že v BY lze použít i pro pole, která nejsou uvedena v klauzuli SELECT (kromě případu, kdy je použit DISTINCT, kterému se budu věnovat níže). Jako příklad trochu předběhnu pomocí možnosti TOP a ukážu, jak si například můžete vybrat 3 zaměstnance, kteří mají nejvyšší plat, s ohledem na to, že z důvodu zachování důvěrnosti bych neměl ukazovat samotný plat:
SELECT TOP 3 -- vrátit pouze první 3 záznamy z celého výsledku ID,Příjmení,Jméno FROM Zaměstnanci ORDER BY Plat DESC -- seřadit výsledek v sestupném pořadí Plat
1000 | Ivanov | Ivane |
1002 | Sidorov | Sidor |
Samozřejmě zde nastává případ, že více zaměstnanců může mít stejný plat a je těžké říci, kterým třem zaměstnancům se tento požadavek vrátí, to je nutné řešit s vedoucím úkolu. Řekněme, že po projednání tohoto úkolu s vedoucím jste souhlasili a rozhodli jste se využít následující možnost - provést dodatečné třídění podle pole data narození (tj. vážíme si mladých lidí), a pokud se datum narození více zaměstnanců může shodovat (ostatně to také není vyloučeno), pak můžete provést třetí řazení v sestupném pořadí hodnot ID (poslední ve vzorku budou ti s nejvyšším ID - například ti, kteří byli přijati jako poslední, řekněme personální čísla jsou vydávána postupně):
SELECT TOP 3 -- vrátit pouze první 3 záznamy z celého výsledku ID,Příjmení,Jméno FROM Zaměstnanci ORDER BY Plat DESC, -- 1. Seřadit výsledek v sestupném pořadí podle Narozeniny platu, -- 2. poté podle Datum narození ID DESC -- 3 a pro úplnou přehlednost výsledku přidáváme řazení podle ID.
Tito. měli byste se snažit, aby byl výsledek žádosti předvídatelný, abyste v případě debriefingu mohli vysvětlit, proč byli tito konkrétní lidé zařazeni na „černou listinu“, tzn. vše bylo vybráno poctivě, podle stanovených pravidel.
Můžete také třídit pomocí různých výrazů v klauzuli ORDER BY:
SELECT LastName,FirstName FROM Zaměstnanci ORDER BY CONCAT(LastName," ",FirstName) -- použijte výraz
Můžete také použít aliasy určené pro sloupce v ORDER BY:
SELECT CONCAT(LastName," ",FirstName) fi FROM Zaměstnanci ORDER BY fi -- použijte alias
Stojí za zmínku, že při použití klauzule DISTINCT lze v klauzuli ORDER BY použít pouze sloupce uvedené v bloku SELECT. Tito. po aplikaci operace DISTINCT dostaneme nová sada data s novou sadou sloupců. Z tohoto důvodu nebude následující příklad fungovat:
SELECT DISTINCT Příjmení,Jméno,Plat OD Zaměstnanci ORDER BY ID -- ID není ve výsledné sadě, kterou jsme získali pomocí DISTINCT
Tito. klauzule ORDER BY je aplikována na výslednou sadu předtím, než je výsledek vrácen uživateli.
Poznámka 1. Můžete také použít čísla sloupců uvedených v SELECT v klauzuli ORDER BY:VYBERTE Příjmení,Jméno,Plat FROM Zaměstnanci ORDER BY -- řazení v pořadí 3 DESC, -- 1. sestupně Plat 1, -- 2. podle příjmení 2 -- 3. podle jména
Pro začátečníky to vypadá pohodlně a lákavě, ale je lepší zapomenout a nikdy tuto možnost třídění nepoužívat.
Pokud je v tomto případě (když jsou pole explicitně uvedena), tato možnost stále přijatelná, pak v případě použití „*“ je lepší tuto možnost nikdy nepoužívat. Proč - protože pokud někdo například změní pořadí sloupců v tabulce, nebo sloupce smaže (a to je normální situace), váš dotaz může stále fungovat, ale špatně, protože třídění již lze provádět podle jiných sloupců, a to je záludné, protože tato chyba nemusí být odhaleno velmi brzy.
Pokud by byly pilíře výslovně uvedeny, pak by ve výše uvedené situaci dotaz buď nadále fungoval, ale také správně (protože je vše explicitně definováno), nebo by jednoduše vyhodilo chybu, že tohoto sloupce neexistuje.
Na řazení podle čísel sloupců tak můžete klidně zapomenout.
V MS SQL se při vzestupném řazení nejprve zobrazí hodnoty NULL.
VYBERTE procento bonusu OD zaměstnanců OBJEDNEJTE PODLE procenta bonusu
Při použití DESC tedy budou na konci
VYBERTE procento bonusu OD zaměstnanců OBJEDNEJTE PODLE BonusPercent DESC
Pokud potřebujete změnit logiku pro řazení hodnot NULL, použijte výrazy, například:
VYBERTE procento bonusu od zaměstnanců ORDER BY ISNULL(procento bonusu,100)
ORACLE poskytuje pro tento účel dvě možnosti: NULLS FIRST a NULLS LAST (používá se ve výchozím nastavení). Například:
VYBERTE procento bonusu OD zaměstnanců OBJEDNEJTE PODLE BonusPercent DESC NULLS LAST
Věnujte tomu pozornost při přechodu na konkrétní databázi.
TOP – Omezuje počet řádků vrácených v sadě výsledků dotazu na zadaný počet nebo procento. Když je klauzule TOP použita ve spojení s klauzulí ORDER BY, je výsledná sada omezena na prvních N řádků seřazeného výsledku. V opačném případě bude prvních N řádků vráceno v nespecifikovaném pořadí. Obvykle se používá s klauzulí ORDER BY a již jsme se podívali na příklady, kdy bylo nutné vrátit prvních N řádků z výsledné sady.
Obvykle bez ORDER BY tento návrh používá se, když se potřebujeme jen podívat na nám neznámou tabulku, která může mít hodně záznamů, v tomto případě můžeme například požádat o vrácení pouze prvních 10 řádků, ale pro přehlednost řekneme jen 2:
VYBERTE NEJLEPŠÍ 2 * ZE ZAMĚSTNANCŮ
Můžete také zadat slovo PERCENT, abyste vrátili odpovídající procento řádků ze sady výsledků:
VYBERTE NEJLEPŠÍCH 25 PROCENT * ZE ZAMĚSTNANCŮ
V mé praxi se nejčastěji používá vzorkování podle počtu řádků.
Můžete také použít možnost S TIES s TOP, která pomůže vrátit všechny řádky v případě nejednoznačného řazení, tzn. tato věta vrátí všechny řádky, které se svým složením shodují s řádky, které spadají do výběru TOP N, v důsledku toho lze vybrat více než N řádků pro ukázku:
INSERT Zaměstnanci(ID,Jméno,E-mail,ID pozice,ID oddělení,ID manažera,Plat) VALUES(1004,N"Nikolaev N.N."," [e-mail chráněný]",3,3,1003,1500)
A přidáme dalšího zaměstnance bez uvedení pozice a oddělení s platem 2000:
INSERT Zaměstnanci(ID,Jméno,E-mail,ID pozice,ID oddělení,ID manažera,Plat) VALUES(1005,N"Alexandrov A.A."," [e-mail chráněný]",NULL,NULL,1000,2000)
Nyní vybereme pomocí možnosti S VAZBAMI všechny zaměstnance, jejichž mzda se shoduje s platy 3 zaměstnanců, s nejnižší mzdou (doufám, že bude dále jasné, o co mi jde):
VYBERTE NEJLEPŠÍ 3 S VAZBAMI ID,Jméno,Mzda OD Zaměstnanců OBJEDNÁVKA PODLE Mzd
Zde, ačkoli je uvedeno TOP 3, požadavek vrátil 4 záznamy, protože hodnota platu, která vrátila TOP 3 (1500 a 2000) byla zjištěna u 4 zaměstnanců. Vizuálně to funguje asi takto:
Jen poznámka.TOP je implementován v různých databázích různými způsoby, v MySQL je na to klauzule LIMIT, ve které lze dodatečně nastavit počáteční offset.
V ORACLE 12c také představili svůj vlastní analog, kombinující funkcionalitu TOP a LIMIT - hledejte slova „ORACLE OFFSET FETCH“. Před verzí 12c se pro tento účel obvykle používal pseudosloupec ROWNUM.
Co se stane, když použijete klauzule DISTINCT a TOP současně? Takové otázky lze snadno zodpovědět prováděním experimentů. Obecně se nebojte a nebuďte líní experimentovat, protože... většina se učí praxí. Slovosled v příkazu SELECT je následující: DISTINCT je na prvním místě, následuje TOP, tzn. Pokud uvažujete logicky a čtete zleva doprava, použije se první, kdo zahodí duplikáty, a poté se na základě této sady vytvoří TOP. No, podívejme se a ujistěte se, že je to tento případ:
VYBERTE ODLIŠIT TOP 2 Mzda OD Zaměstnanců ŘADÍTE PODLE Mzd
1500 |
2000 |
Tito. v důsledku toho jsme dostali 2 nejmenší platy ze všech. Samozřejmě může nastat případ, že mzda u některých zaměstnanců nemusí být uvedena (NULL), protože Schéma nám to umožňuje. Proto se v závislosti na úloze rozhodneme buď zpracovat hodnoty NULL v klauzuli ORDER BY, nebo jednoduše vyřadit všechny záznamy, pro které je Plat NULL, a k tomu přistoupíme ke studiu klauzule WHERE.WHERE - podmínka pro výběr řádků Tato klauzule se používá k filtrování záznamů podle dané podmínky. Vyberme například všechny zaměstnance pracující v oddělení „IT“ (jeho ID=3):
VYBERTE ID,Příjmení,Jméno,Plat od zaměstnanců WHERE DepartmentID=3 -- IT ORDER BY LastName,FirstName
1004 | NULL | NULL | 1500 |
1003 | Andrejev | Andrey | 2000 |
1001 | Petrov | Petr | 1500 |
Klauzule WHERE se zapisuje před příkaz ORDER BY.
Pořadí použití příkazů na počáteční sadu Zaměstnanci je následující:
Pro názornost se podívejme na příklad:
VYBERTE DISTINCT TOP 1 Mzda OD Zaměstnanců KDE ID oddělení=3 OBJEDNAT PODLE Mzdy
Vizuálně to bude vypadat takto:
Za zmínku stojí, že kontrola NULL se neprovádí se znaménkem rovná se, ale pomocí operátorů IS NULL a IS NOT NULL. Pamatujte, že nemůžete porovnávat hodnotu NULL pomocí operátoru „=“ (rovná se), protože výsledek výrazu bude také roven NULL.
Vyberme například všechny zaměstnance, kteří nemají zadané oddělení (tj. DepartmentID IS NULL):
VYBERTE ID,Jméno FROM Zaměstnanci WHERE DepartmentID JE NULL
Nyní jako příklad vypočítejme bonus pro všechny zaměstnance, kteří mají zadanou hodnotu BonusPercent (tj. BonusPercent NENÍ NULL):
VYBERTE ID,Jméno,Plat/100*Procento bonusu JAKO Bonus OD ZAMĚSTNANCŮ, KDE BonusPercent NENÍ NULL
Ano, mimochodem, pokud se nad tím zamyslíte, hodnota BonusPercent se může rovnat nule (0) a hodnotu lze zadat i se znaménkem mínus, protože jsme tomuto poli neuložili žádná omezení.
Když jsme o problému řekli, bylo nám prozatím řečeno, abychom zvážili, že pokud (BonusPercent0
Booleovské operátory a jednoduché porovnávací operátory Ano, bez matematiky se zde neobejdete, pojďme si tedy udělat krátkou exkurzi do booleovských a jednoduchých porovnávacích operátorů.V SQL jsou pouze 3 booleovské operátory - AND, OR a NOT:
Pro každý booleovský operátor můžete poskytnout pravdivostní tabulky, které navíc ukazují, jaký bude výsledek, když podmínky mohou být NULL:
K vytvoření podmínek se používají následující jednoduché porovnávací operátory:
Navíc existují 2 operátory pro kontrolu hodnoty/výrazu pro NULL:
Testování rovnosti NULL |
Testování NULL nerovnosti |
Priorita: 1) Všechny operátory porovnání; 2) NE; 3) AND; 4) NEBO.
Při konstrukci složitých logických výrazů se používají závorky:
((podmínka1 AND podmínka2) NEBO NE(podmínka3 AND podmínka4 AND podmínka5)) NEBO (…)
Můžete také změnit pomocí závorek standardní sekvence výpočty.
Zde jsem se pokusil poskytnout představu o Booleově algebře v objemu dostatečném pro práci. Jak vidíte, pro psaní složitějších podmínek se bez logiky neobejdete, ale moc jí tu není (AND, OR a NE) a vymysleli ji lidé, takže je vše celkem logické.
Přejděme na konec druhé části Jak vidíte, i o základní syntaxi příkazu SELECT se dá mluvit velmi dlouho, ale abychom zůstali v rozsahu článku, nakonec ukážu. další logické operátory– BETWEEN, IN a LIKE.BETWEEN – kontrola zařazení do rozsahuTest_value BETWEEN počáteční_hodnota A koncová_hodnota
Výrazy mohou fungovat jako hodnoty.
Podívejme se na příklad:
VYBERTE ID,Jméno,Plat od zaměstnanců, KDE Mzda MEZI 2000 A 3000 -- kdo má plat v rozmezí 2000-3000
BETWEEN je ve skutečnosti zjednodušený zápis formuláře:
VYBERTE ID,Jméno,Mzda FROM Zaměstnanci WHERE Plat>=2000 AND Plat=2000 A Mzda SET ( | ) .,.< COLUMN name> = < VALUE expresslon>.< predlcate>[KDE< cursor name>|
Využití WordPressu, nastavení: v tabulce wp_posts smažte všechny výskyty řádku
UPDATE wp_posts SET post_content = REPLACE (post_content, "" , "" );ODSTRANIT Z