Where d что это

100+ английских сокращений в переписке, или WUCIWUG, BRO!

Такие переписки в телефоне и социальных сетях уже никого не удивят. Но сокращения в английском языке пошли еще дальше наших: аббревиатурой становятся целые предложения!

Пример: MYOB = mind your own business (занимайтесь своим делом)

Ниже ты найдешь целый список английских сокращений (в смс, социальных сетях, форумах). Досконально изучи его, чтобы понимать, чего от тебя хотят англоговорящие собеседники.

Where d что это. angliyskie sokrasheniya sms. Where d что это фото. Where d что это-angliyskie sokrasheniya sms. картинка Where d что это. картинка angliyskie sokrasheniya sms

В качестве предисловия: разговорные сокращения в английском языке

Разумеется, сокращения английских слов желательно использовать только в неформальной переписке (личные сообщения, чаты). При этом известен случай, когда 13-летняя девочка написала школьное сочинение, почти целиком построенное на аббревиатурах английского языка. Вот отрывок из него, попробуй прочитать и понять смысл написанного:

My smmr hols wr CWOT. B4, we used 2go2 NY 2C my bro, his GF & thr 3 :- kids FTF. ILNY, it’s a gr8 plc.

Получилось? А теперь прочитай “перевод”:

My summer hols (сокращенное – holidays) were a complete waste of time. Before, we used to go to NY (New York) to see my brother, his girlfriend and their 3 kids face to face. I love New York, it’s a great place.

Как видишь, английские сокращения на письме построены:

Итак, переходим к нашему словарю английских сокращений.

Его Величество Сленг: расшифровка английских сокращений

В статье будет указан перевод сокращений с английского на русский. Но там, где потребуются дополнительные разъяснения, мы дадим и их. Enjoy!

2 = two, to, too (два, предлог to, тоже)

2DAY = today (сегодня)

2MORO / 2MROW = tomorrow (завтра)

2NITE / 2NYT = tonight (сегодня ночью, сегодня вечером)

4U = for you (для тебя)

4E = forever (навсегда)

AFAIK= as far as I know (насколько мне известно)

ASAP = as soon as possible (при первой возможности, как только – так сразу)

ATB = all the best (всего наилучшего)

B4 = before (до, прежде чем)

B4N = bye for now (пока, до встречи)

BAU = business as usual (идиома, означающая, что дела продолжают идти, как обычно, несмотря на сложную ситуацию)

BBL = to be back later (вернуться позже, быть позже)

BC = because (потому что)

BF = boyfriend (молодой человек, парень, бойфренд)

BK = back (назад, обратно)

BRB = to be right back (скоро вернуться). Например, ты “чатишься” с кем-то, но вынужден ненадолго отойти. BRB (скоро вернусь), – пишешь ты, и идешь по своим делам.

BTW = by the way (кстати, между прочим)

BYOB / BYO = to bring your own booze, to bring your own bottle (“со своим алкоголем”). Указывается на приглашении в том случае, когда хозяин вечеринки не будет предоставлять выпивку для гостей. Кстати, у группы System Of A Down есть песня B.Y.O.B. (Bring Your Own Bombs вместо Bottle).

CIAO = goodbye (до свидания, пока). Это сокращение для переписки в английском языке образовалось от итальянского Ciao (и произносится оно именно так – чао).

COS / CUZ = because (потому что)

CUL8R = call you later / see you later (позвоню тебе позже / увидимся позже)

CUL = see you later (увидимся позже)

CWOT = complete waste of time (пустая трата времени)

D8 = date (дата, свидание)

EOD = end of debate (конец дискуссии). Используется во время спора, когда хочется его прекратить: That’s it, EOD! (Все, прекратим спор!)

EZ = easy (легко, просто, удобно)

F2F / FTF = face to face (лицом к лицу)

FYI = for your information (к твоему сведению)

GF = girlfriend (девушка, герлфренд)

GMTA = great minds think alike (поговорка “Великие умы мыслят одинаково”). Что-то вроде нашего “у дураков мысли сходятся” только наоборот 🙂

GR8 = great (замечательно, отлично и т.д.)

GTG = got to go (должен идти)

HAND = have a nice day (хорошего дня)

HB2U = happy birthday to you (с днем рождения)

HOLS = holidays (каникулы, отпуск)

HRU = how are you (как ты? как дела?)

ICBW = it could be worse (могло быть хуже)

IDK = I dont know (я не знаю)

IDTS = I don’t think so (я так не думаю, не думаю, не согласен)

ILU / Luv U = I love you (я люблю тебя)

IMHO = in my humble opinion (по моему скромному мнению). Выражение уже давно перекочевало в наш интернет в виде транслитерации ИМХО.

IYKWIM = if you know what I mean (если ты понимаешь, о чем я)

JK = just kidding (просто шучу, это шутка)

KIT = to keep in touch (оставаться на связи)

KOTC = kiss on the cheek (поцелуй в щеку)

L8 = late (поздно, недавно, за последнее время)

LMAO = laughing my ass out (так смешно, что пятую точку себе “отсмеял”).

LOL = laughing out loud (значение идентично предыдущему). Это популярное английское сокращение тоже позаимствовано нашим интернетным сленгом в виде транслитерации ЛОЛ.

LSKOL = long slow kiss on the lips (французский поцелуй)

LTNS = long time no see (давно не виделись)

Where d что это. long time no see. Where d что это фото. Where d что это-long time no see. картинка Where d что это. картинка long time no see
Пример из стикеров для Viber

Luv U2 = I love you too (тоже люблю тебя)

M8 = mate (приятель, друг, чувак). Сленговое слово mate – примерно то же самое, что dude (чувак, пацан и т.д.): Hey, mate, what’s up? (Эй, чувак, как оно?)

MON = the middle of nowhere (идиома, означающая “очень далеко, у черта на куличках”)

MSG = message (сообщение, послание)

MTE = my thoughts exactly (ты читаешь мои мысли, я думаю точно так же)

MU = I miss you (скучаю по тебе)

MUSM = I miss you so much (скучаю по тебе очень сильно)

MYOB = mind your own business (занимайся своим делом, не лезь в чужие дела)

N2S = needless to say (само собой разумеется, очевидно что…)

NE1 = anyone (кто угодно, любой)

NP = no problem (без проблем, не проблема)

OIC = oh, I see (понятно; вот оно что). Используется в ситуации, когда ты хочешь показать собеседнику, что тебе понятен предмет разговора.

Where d что это. oh i see. Where d что это фото. Where d что это-oh i see. картинка Where d что это. картинка oh i see

PC&QT – peace and quiet (тишина и покой). Идиома, которая чаще всего используется в контексте желания более спокойной жизни: All I want is a little peace and quiet (Все, что я хочу – немного тишины и покоя).

PCM = please call me (пожалуйста, позвони мне)

PLS = please (пожалуйста)

PS = parents (родители)

R = are (форма глаголы to be)

ROFL / ROTFL = rolling of the floor laughing (катаюсь по полу от смеха)

RUOK = are you ok? (ты в порядке? все хорошо?)

SIS = sister (сестра)

SKOOL = school (школа)

SOB = stressed out bad (чувствовать сильный стресс)

По ссылке это видео с субтитрами.

SOM1 = someone (кто-то)

TGIF = thank God it’s Friday (Слава Богу, сегодня пятница)

THX = thanks (спасибо)

THNQ = thank you (спасибо тебе)

TTYL = talk to you later (поговорим позже)

WAN2 = to want to (хотеть)

WKND = weekend (выходные)

WR = were (форма глагола to be)

WUCIWUG = what you see is what you get (что видишь, то и получишь)

Where d что это. WYSIWYG. Where d что это фото. Where d что это-WYSIWYG. картинка Where d что это. картинка WYSIWYG
Фраза была использована для креативных постеров кетчупа Heinz

Выражение имеет несколько значений:

Может использоваться, как определение честного и открытого человека:

He is a what-you-see-is-what-you-get kind of person. (Он относится к типу человека “что видишь, то и получишь”)

Также идиомой могут пользоваться, например, продавцы в магазине, когда уверяют нас, что товар, который мы купим, выглядит так же, как и на витрине:

The product you are looking at is exactly what you get if you buy it. What you see is what you get. The ones in the box are just like this one. (Если Вы купите этот продукт, то получите именно то, что видите сейчас. Единицы товара, которые в коробках, точно такие же, как эта).

XLNT = excellent (отлично, превосходно)

XOXO = hugs and kisses (объятия и поцелуи). Точнее сказать “обнимашки и целовашки”, если следовать интернет-трендам 🙂

Where d что это. obnimashki. Where d что это фото. Where d что это-obnimashki. картинка Where d что это. картинка obnimashki

YR = your / you’re (твой / ты + форма глагола to be)

ZZZ.. = to sleep (спать) Сокращение используется, когда человек хочет показать собеседнику, что он уже вовсю спит / засыпает.

Напоследок: как понимать современные сокращения в английском языке

Как видишь, все английские сокращения в интернете поддаются определенной логике, принципы которой мы разобрали еще в начале статьи. Поэтому достаточно несколько раз “пробежаться по ним глазами”, и ты легко сможешь использовать и, главное – понимать их. CUL8R, M8 🙂

Источник

Сокращения в английском языке. Сontracted forms in English

Where d что это. ecc9162e4ad2bbdffbe4d74bc6a1f31b. Where d что это фото. Where d что это-ecc9162e4ad2bbdffbe4d74bc6a1f31b. картинка Where d что это. картинка ecc9162e4ad2bbdffbe4d74bc6a1f31b

Сокращение (contraction) – это два или даже три слова, объединенные в одно, укороченное слово, причем некоторые буквы выбрасываются. На письме вместо выброшенных букв ставится апостроф. В английском языке сокращения используются очень часто, в основном в разговорной речи. Сокращению подвергаются в основном вспомогательные глаголы и отрицательная частица not, так как в предложении они безударные. Кроме того, существует много сокращений с модальными глаголами.

Рассмотрим основные сокращения английского языка:

I had, I would, I should

we had, we should, we would

they had; they would

there is, there has

there had, there would

Cокращения бывают глагольные (когда сокращается сам глагол) и отрицательные (в которых сокращению подвергается частица not).

Некоторые отрицательные сокращения могут иметь две формы:

he had not = he’d not = he hadn’t
she will not = she’ll not = she won’t
it is not = it’s not = it isn’t

Сокращения с n’t (hadn’t, won’t) более типичны для английского языка. Исключение составляет глагол is, потому что в британском варианте английского допустимы оба варианта. В американском английском используют фoрмы с not: she’s not.

В разделительных вопросах am not имеет сокращение aren’t I:

Обратите внимание на различие в произношении: can’t: British English [kɑːnt] в American English [kæ̱nt].

Некоторые сокращения могут подразумевать разные глаголы, например сокращение ’s может обозначать и is и has. Как отличить? Отличаем по контексту. После is используется либо глагол с окончанием ing, либо прилагательное или существительное:

После hasдолжен идти глагол в третьей форме:

Сокращение ‘d может «скрывать» had, would, should. После had используем третью форму глагола:

Иногда сокращение используется для конструкции had better:

Следом за would часто стоит like to :

C should обычно используется глагол в первой форме без частицы to (выражение совета):

Не путайте сокращенную форму it’s и притяжательное прилагательное its.

Использование сокращений на письме.

Употребление сокращенных форм на письме определяется характером письма. Сокращений следует избегать в официальных документах, формальной переписке, научных работах, однако в неофициальных письмах, блогах, статьях употребление сокращений допускается и даже приветствуется. Сокращения придают более неформальный и легкий тон, а полные формы, в свою очередь, указывают на серьезность и официальность. Прежде чем использовать сокращения в письменной речи, подумайте о характере, цели и адресате своего письма.

При употреблении сокращенных форм в письменной речи следует помнить несколько правил.

Краткая форма ‘s (is, has)может использоваться на письме с личными местоимениями, существительными, вопросительными словами, словами there[hɪəz]) и (now’s [nauz]):

Краткие формы ‘ll (will), ‘d (had, should, would) и ‘re (are) употребляются в письменной речи после местоимений и слова there, но в других случаях пишутся полные формы, даже если произносятся сокращенные:

Источник

Учебник по языку SQL (DDL, DML) на примере диалекта MS SQL Server. Часть четвертая

Предыдущие части

В данной части мы рассмотрим

Добавим немного новых данных

Для демонстрационных целей добавим несколько отделов и должностей:

JOIN-соединения – операции горизонтального соединения данных

Здесь нам очень пригодится знание структуры БД, т.е. какие в ней есть таблицы, какие данные хранятся в этих таблицах и по каким полям таблицы связаны между собой. Первым делом всегда досконально изучайте структуру БД, т.к. нормальный запрос можно написать только тогда, когда ты знаешь, что откуда берется. У нас структура состоит из 3-х таблиц Employees, Departments и Positions. Приведу здесь диаграмму из первой части:

Where d что это. image loader. Where d что это фото. Where d что это-image loader. картинка Where d что это. картинка image loader

Если суть РДБ – разделяй и властвуй, то суть операций объединений снова склеить разбитые по таблицам данные, т.е. привести их обратно в человеческий вид.

Если говорить просто, то операции горизонтального соединения таблицы с другими таблицами используются для того, чтобы получить из них недостающие данные. Вспомните пример с еженедельным отчетом для директора, когда при запросе из таблицы Employees, нам для получения окончательного результата недоставало поля «Название отдела», которое находится в таблице Departments.

Понимание каждого вида соединения очень важно, т.к. от применения того или иного вида, результат запроса может отличаться. Сравните результаты одного и того же запроса с применением разного типа соединения, попробуйте пока просто увидеть разницу и идите дальше (мы сюда еще вернемся):

IDNameDepartmentIDIDName
1000Иванов И.И.11Администрация
1001Петров П.П.33ИТ
1002Сидоров С.С.22Бухгалтерия
1003Андреев А.А.33ИТ
1004Николаев Н.Н.33ИТ
IDNameDepartmentIDIDName
1000Иванов И.И.11Администрация
1001Петров П.П.33ИТ
1002Сидоров С.С.22Бухгалтерия
1003Андреев А.А.33ИТ
1004Николаев Н.Н.33ИТ
1005Александров А.А.NULLNULLNULL
IDNameDepartmentIDIDName
1000Иванов И.И.11Администрация
1002Сидоров С.С.22Бухгалтерия
1001Петров П.П.33ИТ
1003Андреев А.А.33ИТ
1004Николаев Н.Н.33ИТ
NULLNULLNULL4Маркетинг и реклама
NULLNULLNULL5Логистика
IDNameDepartmentIDIDName
1000Иванов И.И.11Администрация
1001Петров П.П.33ИТ
1002Сидоров С.С.22Бухгалтерия
1003Андреев А.А.33ИТ
1004Николаев Н.Н.33ИТ
1005Александров А.А.NULLNULLNULL
NULLNULLNULL4Маркетинг и реклама
NULLNULLNULL5Логистика
IDNameDepartmentIDIDName
1000Иванов И.И.11Администрация
1001Петров П.П.31Администрация
1002Сидоров С.С.21Администрация
1003Андреев А.А.31Администрация
1004Николаев Н.Н.31Администрация
1005Александров А.А.NULL1Администрация
1000Иванов И.И.12Бухгалтерия
1001Петров П.П.32Бухгалтерия
1002Сидоров С.С.22Бухгалтерия
1003Андреев А.А.32Бухгалтерия
1004Николаев Н.Н.32Бухгалтерия
1005Александров А.А.NULL2Бухгалтерия
1000Иванов И.И.13ИТ
1001Петров П.П.33ИТ
1002Сидоров С.С.23ИТ
1003Андреев А.А.33ИТ
1004Николаев Н.Н.33ИТ
1005Александров А.А.NULL3ИТ
1000Иванов И.И.14Маркетинг и реклама
1001Петров П.П.34Маркетинг и реклама
1002Сидоров С.С.24Маркетинг и реклама
1003Андреев А.А.34Маркетинг и реклама
1004Николаев Н.Н.34Маркетинг и реклама
1005Александров А.А.NULL4Маркетинг и реклама
1000Иванов И.И.15Логистика
1001Петров П.П.35Логистика
1002Сидоров С.С.25Логистика
1003Андреев А.А.35Логистика
1004Николаев Н.Н.35Логистика
1005Александров А.А.NULL5Логистика

Настало время вспомнить про псевдонимы таблиц

Пришло время вспомнить про псевдонимы таблиц, о которых я рассказывал в начале второй части.

В многотабличных запросах, псевдоним помогает нам явно указать из какой именно таблицы берется поле. Посмотрим на пример:

В нем поля с именами ID и Name есть в обоих таблицах и в Employees, и в Departments. И чтобы их различать, мы предваряем имя поля псевдонимом и точкой, т.е. «emp.ID», «emp.Name», «dep.ID», «dep.Name».

Вспоминаем почему удобнее пользоваться именно короткими псевдонимами – потому что, без псевдонимов наш запрос бы выглядел следующим образом:

По мне, стало очень длинно и хуже читаемо, т.к. имена полей визуально потерялись среди повторяющихся имен таблиц.

В многотабличных запросах, хоть и можно указать имя без псевдонима, в случае если имя не дублируется во второй таблице, но я бы рекомендовал всегда использовать псевдонимы в случае соединения, т.к. никто не гарантирует, что поле с таким же именем со временем не добавят во вторую таблицу, а тогда ваш запрос просто сломается, ругаясь на то что он не может понять к какой таблице относится данное поле.

Только используя псевдонимы, мы сможем осуществить соединения таблицы самой с собой. Предположим встала задача, получить для каждого сотрудника, данные сотрудника, который был принят прямо до него (табельный номер отличается на единицу меньше). Допустим, что у нас табельные номера выдаются последовательно и без дырок, тогда мы можем это сделать примерно следующим образом:

Т.е. здесь одной таблице Employees, мы дали псевдоним «e1», а второй «e2».

Разбираем каждый вид горизонтального соединения

Для этой цели рассмотрим 2 небольшие абстрактные таблицы, которые так и назовем LeftTable и RightTable:

Посмотрим, что в этих таблицах:

LCodeLDescr
1L-1
2L-2
3L-3
5L-5
RCodeRDescr
2B-2
3B-3
4B-4
LCodeLDescrRCodeRDescr
2L-22B-2
3L-33B-3

Здесь были возвращены объединения строк для которых выполнилось условие (l.LCode=r.RCode)

Where d что это. image loader. Where d что это фото. Where d что это-image loader. картинка Where d что это. картинка image loader

LEFT JOIN

LCodeLDescrRCodeRDescr
1L-1NULLNULL
2L-22B-2
3L-33B-3
5L-5NULLNULL

Здесь были возвращены все строки LeftTable, которые были дополнены данными строк из RightTable, для которых выполнилось условие (l.LCode=r.RCode)

Where d что это. image loader. Where d что это фото. Where d что это-image loader. картинка Where d что это. картинка image loader

RIGHT JOIN

LCodeLDescrRCodeRDescr
2L-22B-2
3L-33B-3
NULLNULL4B-4

Здесь были возвращены все строки RightTable, которые были дополнены данными строк из LeftTable, для которых выполнилось условие (l.LCode=r.RCode)

Where d что это. image loader. Where d что это фото. Where d что это-image loader. картинка Where d что это. картинка image loader

По сути если мы переставим LeftTable и RightTable местами, то аналогичный результат мы получим при помощи левого соединения:

LCodeLDescrRCodeRDescr
2L-22B-2
3L-33B-3
NULLNULL4B-4

Я за собой заметил, что я чаще применяю именно LEFT JOIN, т.е. я сначала думаю, данные какой таблицы мне важны, а потом думаю, какая таблица/таблицы будет играть роль дополняющей таблицы.

FULL JOIN – это по сути одновременный LEFT JOIN + RIGHT JOIN

LCodeLDescrRCodeRDescr
1L-1NULLNULL
2L-22B-2
3L-33B-3
5L-5NULLNULL
NULLNULL4B-4

Вернулись все строки из LeftTable и RightTable. Строки для которых выполнилось условие (l.LCode=r.RCode) были объединены в одну строку. Отсутствующие в строке данные с левой или правой стороны заполняются NULL-значениями.

Where d что это. image loader. Where d что это фото. Where d что это-image loader. картинка Where d что это. картинка image loader

CROSS JOIN

LCodeLDescrRCodeRDescr
1L-12B-2
2L-22B-2
3L-32B-2
5L-52B-2
1L-13B-3
2L-23B-3
3L-33B-3
5L-53B-3
1L-14B-4
2L-24B-4
3L-34B-4
5L-54B-4

Каждая строка LeftTable соединяется с данными всех строк RightTable.

Where d что это. image loader. Where d что это фото. Where d что это-image loader. картинка Where d что это. картинка image loader

Возвращаемся к таблицам Employees и Departments

Надеюсь вы поняли принцип работы горизонтальных соединений. Если это так, то возвратитесь на начало раздела «JOIN-соединения – операции горизонтального соединения данных» и попробуйте самостоятельно понять примеры с объединением таблиц Employees и Departments, а потом снова возвращайтесь сюда, обсудим это вместе.

Давайте попробуем вместе подвести резюме для каждого запроса:

ЗапросРезюме
По сути данный запрос вернет только сотрудников, у которых указано значение DepartmentID.
Т.е. мы можем использовать данное соединение, в случае, когда нам нужны данные по сотрудникам числящихся за каким-нибудь отделом (без учета внештаткиков).
Вернет всех сотрудников. Для тех сотрудников у которых не указан DepartmentID, поля «dep.ID» и «dep.Name» будут содержать NULL.
Вспоминайте, что NULL значения в случае необходимости можно обработать, например, при помощи ISNULL(dep.Name,’вне штата’).
Этот вид соединения можно использовать, когда нам важно получить данные по всем сотрудникам, например, чтобы получить список для начисления ЗП.
Здесь мы получили дырки слева, т.е. отдел есть, но сотрудников в этом отделе нет.
Такое соединение можно использовать, например, когда нужно выяснить, какие отделы и кем у нас заняты, а какие еще не сформированы. Эту информацию можно использовать для поиска и приема новых работников из которых будет формироваться отдел.
Этот запрос важен, когда нам нужно получить все данные по сотрудникам и все данные по имеющимся отделам. Соответственно получаем дырки (NULL-значения) либо по сотрудникам, либо по отделам (внештатники).
Данный запрос, например, может использоваться в целях проверки, все ли сотрудники сидят в правильных отделах, т.к. может у некоторых сотрудников, которые числятся как внештатники, просто забыли указать отдел.
В таком виде даже сложно придумать где это можно применить, поэтому пример с CROSS JOIN я покажу ниже.

Обратите внимание, что в случае повторения значений DepartmentID в таблице Employees, произошло соединение каждой такой строки со строкой из таблицы Departments с таким же ID, то есть данные Departments объединились со всеми записями для которых выполнилось условие (emp.DepartmentID=dep.ID):

Where d что это. image loader. Where d что это фото. Where d что это-image loader. картинка Where d что это. картинка image loader

В нашем случае все получилось правильно, т.е. мы дополнили таблицу Employees, данными таблицы Departments. Я специально заострил на этом внимание, т.к. бывают случаи, когда такое поведение нам не нужно. Для демонстрации поставим задачу – для каждого отдела вывести последнего принятого сотрудника, если сотрудников нет, то просто вывести название отдела. Возможно напрашивается такое решение – просто взять предыдущий запрос и поменять условие соединение на RIGHT JOIN, плюс переставить поля местами:

IDNameIDName
1Администрация1000Иванов И.И.
2Бухгалтерия1002Сидоров С.С.
3ИТ1001Петров П.П.
3ИТ1003Андреев А.А.
3ИТ1004Николаев Н.Н.
4Маркетинг и рекламаNULLNULL
5ЛогистикаNULLNULL

Но мы для ИТ-отдела получили три строчки, когда нам нужна была только строчка с последним принятым сотрудником, т.е. Николаевым Н.Н.

Задачу такого рода, можно решить, например, при помощи использования подзапроса:

IDNameIDName
1Администрация1000Иванов И.И.
2Бухгалтерия1002Сидоров С.С.
3ИТ1004Николаев Н.Н.
4Маркетинг и рекламаNULLNULL
5ЛогистикаNULLNULL

При помощи предварительного объединения Employees с данными подзапроса, мы смогли оставить только нужных нам для соединения с Departments сотрудников.

Здесь мы плавно переходим к использованию подзапросов. Я думаю использование их в таком виде должно быть для вас понятно на интуитивном уровне. То есть подзапрос подставляется на место таблицы и играет ее роль, ничего сложного. К теме подзапросов мы еще вернемся отдельно.

Посмотрите отдельно, что возвращает подзапрос:

MaxEmployeeID
1005
1000
1002
1004

Т.е. он вернул только идентификаторы последних принятых сотрудников, в разрезе отделов.

Соединения выполняются последовательно сверху-вниз, наращиваясь как снежный ком, который катится с горы. Сначала происходит соединение «Employees emp JOIN (Подзапрос) lastEmp», формируя новый выходной набор:

Where d что это. image loader. Where d что это фото. Where d что это-image loader. картинка Where d что это. картинка image loader

Потом идет объединение набора, полученного «Employees emp JOIN (Подзапрос) lastEmp» (назовем его условно «ПоследнийРезультат») с Departments, т.е. «ПоследнийРезультат RIGHT JOIN Departments dep»:

Where d что это. image loader. Where d что это фото. Where d что это-image loader. картинка Where d что это. картинка image loader

Самостоятельная работа для закрепления материала

Если вы новичок, то вам обязательно нужно прорабатывать каждую JOIN-конструкцию, до тех пор, пока вы на 100% не будете понимать, как работает каждый вид соединения и правильно представлять результат какого вида будет получен в итоге.

Для закрепления материала про JOIN-соединения сделаем следующее:

Посмотрим, что в таблицах:

LCodeLDescr
1L-1
2L-2a
2L-2b
3L-3
5L-5
RCodeRDescr
2B-2a
2B-2b
3B-3
4B-4

А теперь попытайтесь сами разобрать, каким образом получилась каждая строчка запроса с каждым видом соединения (Excel вам в помощь):

LCodeLDescrRCodeRDescr
2L-2a2B-2a
2L-2a2B-2b
2L-2b2B-2a
2L-2b2B-2b
3L-33B-3

LCodeLDescrRCodeRDescr
1L-1NULLNULL
2L-2a2B-2a
2L-2a2B-2b
2L-2b2B-2a
2L-2b2B-2b
3L-33B-3
5L-5NULLNULL

LCodeLDescrRCodeRDescr
2L-2a2B-2a
2L-2b2B-2a
2L-2a2B-2b
2L-2b2B-2b
3L-33B-3
NULLNULL4B-4

LCodeLDescrRCodeRDescr
1L-1NULLNULL
2L-2a2B-2a
2L-2a2B-2b
2L-2b2B-2a
2L-2b2B-2b
3L-33B-3
5L-5NULLNULL
NULLNULL4B-4

LCodeLDescrRCodeRDescr
1L-12B-2a
2L-2a2B-2a
2L-2b2B-2a
3L-32B-2a
5L-52B-2a
1L-12B-2b
2L-2a2B-2b
2L-2b2B-2b
3L-32B-2b
5L-52B-2b
1L-13B-3
2L-2a3B-3
2L-2b3B-3
3L-33B-3
5L-53B-3
1L-14B-4
2L-2a4B-4
2L-2b4B-4
3L-34B-4
5L-54B-4

Еще раз про JOIN-соединения

Еще один пример с использованием нескольких последовательных операций соединении. Здесь повтор получился не специально, так получилось – не выбрасывать же материал. 😉 Но ничего «повторение – мать учения».

Если используется несколько операций соединения, то в таком случае они применяются последовательно сверху-вниз. Грубо говоря, после каждого соединения создается новый набор и следующее соединение уже происходит с этим расширенным набором. Рассмотрим простой пример:

Первым делом выбрались все записи таблицы Employees:

Дальше произошло соединение с таблицей Departments:

Дальше уже идет соединение этого набора с таблицей Positions:

Т.е. это выглядит примерно так:

Where d что это. image loader. Where d что это фото. Where d что это-image loader. картинка Where d что это. картинка image loader

И в последнюю очередь идет возврат тех данных, которые мы просим вывести:

Соответственно, ко всему этому полученному набору можно применить фильтр WHERE и сортировку ORDER BY:

IDEmployeeNamePositionNameDepartmentName
1004Николаев Н.Н.ПрограммистИТ
1001Петров П.П.ПрограммистИТ

То есть последний полученный набор – представляет собой такую же таблицу, над которой можно выполнять базовый запрос:

То есть если раньше в роли источника выступала только одна таблица, то теперь на это место мы просто подставляем наше выражение:

В результате чего получаем тот же самый базовый запрос:

А теперь, применим группировку:

Видите, мы все так же крутимся вокруг да около базовых конструкций, теперь надеюсь понятно, почему очень важно в первую очередь хорошо понять их.

И как мы увидели, в запросе на месте любой таблицы может стоять подзапрос. В свою очередь подзапросы могут быть вложены в подзапросы. И все эти подзапросы тоже представляют из себя базовые конструкции. То есть базовая конструкция, это кирпичики, из которых строится любой запрос.

Обещанный пример с CROSS JOIN

Давайте используем соединение CROSS JOIN, чтобы подсчитать сколько сотрудников, в каком отделе и на каких должностях числится. Для каждого отдела перечислим все существующие должности:

Where d что это. image loader. Where d что это фото. Where d что это-image loader. картинка Where d что это. картинка image loader

В данном случае сначала выполнилось соединение при помощи CROSS JOIN, а затем к полученному набору сделалось соединение с данными из подзапроса при помощи LEFT JOIN. Вместо таблицы в LEFT JOIN мы использовали подзапрос.

Подзапрос заключается в скобки и ему присваивается псевдоним, в данном случае это «e». То есть в данном случае объединение происходит не с таблицей, а с результатом следующего запроса:

DepartmentIDPositionIDEmplCount
NULLNULL1
211
121
332
341

Вместе с псевдонимом «e» мы можем использовать имена DepartmentID, PositionID и EmplCount. По сути дальше подзапрос ведет себя так же, как если на его месте стояла таблица. Соответственно, как и у таблицы,
все имена колонок, которые возвращает подзапрос, должны быть заданы явно и не должны повторяться.

Связь при помощи WHERE-условия

Для примера перепишем следующий запрос с JOIN-соединением:

Через WHERE-условие он примет следующую форму:

Здесь плохо то, что происходит смешивание условий соединения таблиц (emp.DepartmentID=dep.ID) с условием фильтрации (emp.DepartmentID=3).

Теперь посмотрим, как сделать CROSS JOIN:

Через WHERE-условие он примет следующую форму:

Т.е. в этом случае мы просто не указали условие соединения таблиц Employees и Departments. Чем плох этот запрос? Представьте, что кто-то другой смотрит на ваш запрос и думает «кажется тот, кто писал запрос забыл здесь дописать условие (emp.DepartmentID=dep.ID)» и с радостью, что обнаружил косяк, дописывает это условие. В результате чего задуманное вами может сломаться, т.к. вы подразумевали CROSS JOIN. Так что, если вы делаете декартово соединение, то лучше явно укажите, что это именно оно, используя конструкцию CROSS JOIN.

Для оптимизатора запроса может быть и без разницы как вы реализуете соединение (при помощи WHERE или JOIN), он их может выполнить абсолютно одинаково. Но из соображения понимаемости кода, я бы рекомендовал в современных СУБД стараться никогда не делать соединение таблиц при помощи WHERE-условия. Использовать WHERE-условия для соединения, в том случае, если в СУБД реализованы конструкции JOIN, я бы назвал сейчас моветоном. WHERE-условия служат для фильтрации набора, и не нужно перемешивать условия служащие для соединения, с условиями отвечающими за фильтрацию. Но если вы пришли к выводу, что без реализации соединения через WHERE не обойтись, то конечно приоритет за решеной задачей и «к черту все устои».

UNION-объединения – операции вертикального объединения результатов запросов

Я специально использую словосочетания горизонтальное соединение и вертикальное объединение, т.к. заметил, что новички часто недопонимают и путают суть этих операций.

Давайте первым делом вспомним как мы делали первую версию отчета для директора:

Так вот, если бы мы не знали, что существует операция группировки, но знали бы, что существует операция объединения результатов запроса при помощи UNION ALL, то мы могли бы склеить все эти запросы следующим образом:

Where d что это. image loader. Where d что это фото. Where d что это-image loader. картинка Where d что это. картинка image loader

Т.е. UNION ALL позволяет склеить результаты, полученные разными запросами в один общий результат.

Соответственно количество колонок в каждом запросе должно быть одинаковым, а также должны быть совместимыми и типы этих колонок, т.е. строка под строкой, число под числом, дата под датой и т.п.

Немного теории

В MS SQL реализованы следующие виды вертикального объединения:

ОперацияОписание
UNION ALLВ результат включаются все строки из обоих наборов. (A+B)
UNIONВ результат включаются только уникальные строки двух наборов. DISTINCT(A+B)
EXCEPTВ результат попадают уникальные строки верхнего набора, которые отсутствуют в нижнем наборе. Разница 2-х множеств. DISTINCT(A-B)
INTERSECTВ результат включаются только уникальные строки, присутствующие в обоих наборах. Пересечение 2-х множеств. DISTINCT(A&B)

Все это проще понять на наглядном примере.

Создадим 2 таблицы и наполним их данными:

Посмотрим на содержимое:

T1T2
1Text 1
1Text 1
2Text 2
3Text 3
4Text 4
5Text 5
B1B2
2Text 2
3Text 3
6Text 6
6Text 6

UNION ALL

Where d что это. image loader. Where d что это фото. Where d что это-image loader. картинка Where d что это. картинка image loader

UNION

По сути UNION можно представить, как UNION ALL, к которому применена операция DISTINCT:

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *