Select from where select sql: SQL Subquery | Nested query
Содержание
Как использовать оператор SQL IF в SELECT? [РЕШЕНО]
Содержание
Объявление
Различные методы использования оператора SQL IF в SELECT
В SQL IF.. THAN оператор условия используется для выполнения различных действий на основе условий, определенных в операторе. С помощью SQL Server мы можем выполнять программную логику в реальном времени для значений в запросе и генерировать значения на основе этих логических оценок с помощью оператора IF..THAN.
SQL Server не поддерживает оператор IF..THAN внутри оператора выбора SQL, чтобы получить набор результатов на основе этого условия с оператором выбора SQL, мы можем использовать любой из следующих методов.
Существует два метода выполнения IF…THEN в SQL SELECT
- CASE .. WHEN
- Функция IIF
Лабораторная среда
Рассмотрите базу данных управления результатами учащихся для выполнения практических примеров в CASE. 002
Способ 1: Использование инструкции CASE.
.WHEN
Оператор SQL CASE..WHEN работает аналогично оператору IF…THAN логики программирования. CASE WHEN проверит условие, такое как IF, вернет значение, если условие TRUE, и оператор, написанный после THAN, будет выполнен. Если ни одно из условий не выполняется, возвращается значение в предложении ELSE.
ТАКЖЕ ПРОЧИТАЙТЕ: Объяснение функций ранжирования SQL [Практические примеры]
Синтаксис
Реклама
Имя столбца CASE, выражение
КОГДА условие1, ТОГДА true_statement1
КОГДА условие2 ТО истинное_утверждение2
КОГДА условие3 ТО истинное_утверждение3
ЕЩЕ
Else_statement
КОНЕЦ
Псевдоним AS
ОТ имя_таблицы
Имя_столбца/выражение: Указанное имя столбца или выражение для сравнения со всеми, когда условие, если оно соответствует условию первого предложения WHEN, пропускает все последующие условия WHEN и THEN и возвращает оператор_1 в результате.
Else : Если никакое условие не соответствует выражению, элемент управления автоматически переходит к части ELSE и возвращает свой результат. В синтаксисе CASE часть ELSE необязательна.
В синтаксисе CASE и END являются наиболее важными ключевыми словами, которые показывают начало и завершение оператора CASE.
Пример 1. Использование инструкции CASE.. WHEN с одной таблицей
Напишите запрос SQL для получения информации о результатах учащегося с оценкой и присвойте значение примечаний на основе значения оценки
ВЫБРАТЬ student_id AS 'ID студента', название экзамена, CASE класс КОГДА «А+», ТОГДА «Отлично» КОГДА «А», ТОГДА «Хорошо» КОГДА «В», ТОГДА «Среднее» КОГДА «С», ТОГДА «Плохо» КОГДА 'D', ТО 'Неудача' ИНАЧЕ 'Н/Д' ЗАКАНЧИВАТЬСЯ КАК "Оценка" ИЗ таблицы результатов
- В приведенном выше SQL-запросе мы получаем информацию о результатах учащихся с оценкой, а также присваиваем значение примечания на основе условия
- Имя столбца оценки, указанное с регистром, в качестве выражения для сравнения с параметром WHEN.
- Для каждой записи в таблице результатов значение столбца оценки будет сравниваться со значением примечаний к результату.
- ЕСЛИ ни одно из значений оценки не соответствует какой-либо записи, будет возвращено значение ELSE «Н/Д».
.
ТАКЖЕ ЧИТАЙТЕ: Как использовать удаление SQL с помощью JOIN? [РЕШЕНО]
ВЫВОД:
Пример 2: Использование оператора CASE.. WHEN с несколькими таблицами ДЕЛО .. WHEN условие
ВЫБЕРИТЕ tblresult.student_id AS 'ID студента', tblstudent.studentname, tblstudent.email, tblstudent.city, tblresult.examname, tblresult.percentage, tblresult.grade, CASE название экзамена КОГДА «sem1», ТОГДА «2021» КОГДА «sem3», ТОГДА «2020» КОГДА 'sem5' ТОГДА '2019' ЗАКАНЧИВАТЬСЯ КАК "Год приема" FROM tblresult LEFT OUTER JOIN tblstudent ON tblstudent.student_id = tblresult.student_id
- В приведенном выше SQL-запросе мы получили личную информацию о студенте и информацию о результатах, используя SQL LEFT OUTER JOIN, а также отобразили год поступления на основе значения семестра
- столбец имя_экзамена, указанный с регистром в качестве выражения для сравнения с параметром WHEN.
- Для каждой записи в таблице результатов значение столбца имя экзамена будет сравниваться и отображать год поступления на основе значения
- ЕСЛИ для какой-либо записи в результирующем наборе название семестра не совпадает, то эта запись не будет содержать значение в столбце года поступления
.
ВЫВОД:
Метод-2: Использование функции IIF
Функция SQL IIF поддерживается в SQL Server 2012 и более поздних версиях. то же самое. Функция SQL IIF является сокращенной формой написания логики оператора CASE или логики IF-ELSE.
ТАКЖЕ ПРОЧИТАЙТЕ: SQL RIGHT OUTER JOIN Объяснение [Практические примеры]
IIF — это сокращенный способ написания выражения CASE. Вычисляя логическое выражение, переданное в качестве первого аргумента, он может вернуть любой из двух других аргументов
Синтаксис
IIF(имя_столбца/выражение, истинное_значение, ложное_значение) из имя_таблицы;
Имя_столбца/выражение : Указанное имя столбца или выражение для сравнения в качестве условия, если условие истинно, то значение второго аргумента будет истинным, иначе будет возвращено значение третьего аргумента.
Пример 1. Использование функции IIF с одной таблицей
iif(оценка=’A+’,’отлично’,iif(оценка=’A’,’хорошо’,iif(оценка=’B’,’средняя’,iif(оценка=’C’,’плохо’,iif( Оценка=’D’,’Неудачно’,’Н/Д’))))) AS ‘Оценка’
ИЗ таблицы результатов;
- В приведенном выше запросе мы использовали вложенную функцию IIF для условного выбора примечания к оценке.
- Первая внешняя функция IIF будет оцениваться, если первое условие, то есть если значение столбца оценки равно «A+», чем назначить примечание «Отлично», и если первое условие равно FALSE, оно проверит следующее условие во вложенной функции IIF.
ВЫВОД:
Пример 2. Использование функции IIF с несколькими таблицами0003
ВЫБЕРИТЕ tblresult.student_id AS «ID учащегося», tblstudent.studentname, tblstudent.email, tblstudent.city, tblresult.examname, tblresult.percentage, tblresult.grade, IIF (имя экзамена = 'sem1', '2021', IIF (имя экзамена = 'sem3', '2020', IIF (имя экзамена = 'sem5', '2019', '2018'))) AS «Год поступления» FROM tblresult LEFT OUTER JOIN tblstudent ON tblstudent. student_id = tblresult.student_id
- В приведенном выше запросе мы использовали функцию SQL IIF для условного получения года поступления на основе семестра.
- Вложенная функция IIF используется для проверки более чем одного условия.
- Для каждой записи результирующего набора записей запроса выбора левого соединения он будет проверять, выполнено ли первое условие, а затем будет печатать 2021 в качестве лет приема, в противном случае он будет проверять условие вложенной функции IIF.
- SQL LEFT OUTER JOIN используется для извлечения данных из более чем одной таблицы
ТАКЖЕ ПРОЧИТАЙТЕ: объяснение ограничения отбрасывания SQL [Практические примеры]
ВЫВОД:
Резюме
В этой статье об операторе select if в SQL рассматриваются обзоры операторов select SQL с условиями If и перечисляются два способа выполнения IF..THAN в операторах select SQL. Первый — оператор CASE..WHEN, а второй — функция IIF, а также практические примеры использования одной таблицы и нескольких таблиц с использованием SQL LEFT JOIN.
Ссылки
SQL LEFT JOIN
Выбор SQL
Подробнее
CASE (Transact-SQL)
Как выполнить IF…THEN в SQL SELECT?
1. Извлечение записей — SQL Cookbook [Книга]
Глава 1. Извлечение записей
В этой главе основное внимание уделяется очень простым операторам SELECT. Это
важно иметь четкое представление об основах, так как многие из
затронутые здесь темы присутствуют не только в более сложных рецептах, но и
также встречаются в повседневном SQL.
1.1. Извлечение всех строк и столбцов из таблицы
Проблема
У вас есть таблица, и вы хотите просмотреть все содержащиеся в ней данные.
Решение
Используйте специальный символ «*» и выполните SELECT для
Таблица:
1 выбор * 2 из emp
Обсуждение
Символ «*» имеет особое значение в SQL. Использование этого
вернуть каждый столбец для указанной таблицы. Так как нет ГДЕ
указано, каждая строка также будет возвращена. Альтернатива
было бы перечислить каждый столбец отдельно:
выберите empno,ename,job,sal,mgr,hiredate,comm,deptno from emp
В специальных запросах, которые вы выполняете в интерактивном режиме, проще
используйте ВЫБРАТЬ *. Однако при написании программного кода лучше
указать каждый столбец отдельно. Спектакль будет тот же
но, будучи явным, вы всегда будете знать, какие столбцы вы
возврат из запроса. Кроме того, такие запросы легче
понимают люди, кроме вас самих (которые могут знать или не знать все
столбцы в таблицах запроса).
1.2. Извлечение подмножества строк из таблицы
Проблема
У вас есть таблица, и вы хотите просмотреть только те строки, которые удовлетворяют
конкретное состояние.
Решение
Используйте предложение WHERE, чтобы указать, какие строки следует сохранить. Например,
для просмотра всех сотрудников, закрепленных за отделом номер 10:
1 выберите * 2 из эмп 3 где deptno = 10
Обсуждение
Предложение WHERE позволяет получить только те строки, которые вы
интересует. Если выражение в предложении WHERE верно для любого
row, то эта строка возвращается.
Большинство поставщиков поддерживают общие операторы, такие как: =, <, >,
<=, >=, !, <>. Кроме того, вам могут понадобиться строки, которые
удовлетворить несколько условий; это можно сделать, указав И, ИЛИ,
и скобки, как показано в следующем рецепте.
1.3. Поиск строк, удовлетворяющих нескольким условиям
Задача
Вы хотите получить строки, удовлетворяющие нескольким условиям.
Раствор
Используйте предложение WHERE вместе с предложениями OR и AND. Для
Например, если вы хотите найти всех сотрудников отдела 10,
вместе с любыми сотрудниками, которые получают комиссионные, вместе с любым
сотрудники отдела 20, которые зарабатывают не более $2000:
1 выберите * 2 из эмп 3, где отдел = 10 4 или comm не равно null 5 или sal <= 2000 и deptno=20
Обсуждение
Вы можете использовать комбинацию AND, OR и круглых скобок для возврата
строки, удовлетворяющие нескольким условиям. В примере решения
Предложение WHERE находит такие строки, что:
номер DEPTNO равен 10, или
COMM не равен NULL, или
зарплата любого сотрудника в DEPTNO составляет 2000 долларов США или меньше
20.
Наличие скобок приводит к тому, что условия внутри них
оценивали вместе.
Например, рассмотрим, как изменится набор результатов, если запрос
был написан со скобками, как показано ниже:
select * из эмп где (дептно = 10 или comm не является нулевым или сал <= 2000 ) и отдел=20 EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ----- ------ ----- ----- ----------- ----- ---------- --- --- 7369СЛУЖАЩИЙ КУЗНЕЦА 7902 17 декабря 1980 800 20 7876 АДАМС КЛЕРК 7788 12 января 1983 1100 20
1.4. Извлечение подмножества столбцов из таблицы
Проблема
У вас есть таблица, и вы хотите увидеть значения для определенных столбцов, а не для всех столбцов.
Решение
Укажите интересующие вас столбцы. Например, чтобы увидеть
только имя, номер отдела и зарплата для сотрудников:
1 выберите ename,deptno,sal 2 from emp
Обсуждение
Указав столбцы в предложении SELECT, вы гарантируете, что
никакие посторонние данные не возвращаются. Это может быть особенно важно, когда
получение данных по сети, поскольку это позволяет избежать пустой траты времени
присущие извлечению данных, которые вам не нужны.
1.5. Предоставление осмысленных имен для столбцов
Проблема
Вы хотите изменить имена столбцов, которые
возвращенные вашим запросом, чтобы они были более читабельными и понятными.
Рассмотрим этот запрос, который возвращает зарплаты и комиссионные для каждого
сотрудник:
1 выберите сал, связь 2 из emp
Что такое «сал»? Это сокращение от "продажа"? Это чье-то имя?
Что такое «комм»? Это общение? Вы хотите, чтобы результаты были более
значащие метки.
Решение
Чтобы изменить имена результатов вашего запроса, используйте ключевое слово AS в форме: исходное_имя AS
. Некоторые базы данных не требуют AS, но все
новое_имя
примите это:
1 выберите зарплату как зарплату, comm как комиссию
2 от эмп
ЗАРПЛАТА КОМИССИЯ ------- ---------- 800 1600 300 1250 500 2975 1250 1400 2850 2450 3000 5000 1500 0 1100 950 3000 1300
Обсуждение
Использование ключевого слова AS для присвоения новых имен столбцам, возвращаемым
ваш запрос известен как с псевдонимом этих столбцов.
Новые имена, которые вы даете, известны как псевдонимы .
Создание хороших псевдонимов может иметь большое значение для создания запроса и его
результаты понятны другим.
1.6. Ссылка на столбец с псевдонимом в предложении WHERE
для вашего набора результатов и хотел бы исключить некоторые строки, используя
предложение WHERE.
Однако ваша попытка ссылаться на псевдонимы в
предложение WHERE не выполняется:
выберите Sal как зарплату, comm как комиссию из эмп где зарплата < 5000
Решение
Обернув запрос как встроенное представление, вы можете ссылаться на
столбцы с псевдонимами:
1 выберите * 2 из ( 3 выберите Sal как зарплату, comm как комиссию 4 из эмп 5 ) х 6 где зарплата < 5000
Обсуждение
В этом простом примере можно избежать встроенного представления и
ссылайтесь на COMM или SAL непосредственно в предложении WHERE для достижения того же результата. Это решение
знакомит вас с тем, что вам нужно будет сделать, пытаясь
ссылаться на любое из следующего в предложении WHERE: 9Скалярные подзапросы 16
Размещение вашего запроса, дающего псевдонимы, во встроенном представлении
дает вам возможность ссылаться на столбцы с псевдонимами во внешнем запросе. Зачем вам это нужно?
Предложение WHERE оценивается перед SELECT, поэтому SALARY и
COMMISSION еще не существует, когда предложение WHERE запроса «Проблема»
оценивается. Эти псевдонимы не применяются до тех пор, пока не будет указано предложение WHERE.
обработка завершена. Однако предложение FROM оценивается до
ГДЕ. Поместив исходный запрос в предложение FROM, результаты
из этого запроса генерируются перед самым внешним предложением WHERE, и
ваше внешнее предложение WHERE «видит» псевдонимы. Эта техника
особенно полезно, когда столбцы в таблице не имеют конкретных имен
хорошо.
Совет
Встроенный вид в этом решении имеет псевдоним X. Не все
базы данных требуют явного псевдонима встроенного представления, но некоторые
делать. Все они это принимают.
1.7. Объединение значений столбцов
Проблема
Вы хотите вернуть значения в нескольких столбцах как один столбец. Для
например, вы хотели бы получить этот набор результатов из запроса
против таблицы EMP:
КЛАРК РАБОТАЕТ МЕНЕДЖЕРОМ КОРОЛЬ РАБОТАЕТ ПРЕЗИДЕНТОМ МИЛЛЕР РАБОТАЕТ КЛЕРОМ
Однако данные, необходимые для создания этого результирующего набора
происходит из двух разных столбцов, столбцов ENAME и JOB в EMP.
таблица:
выберите имя, задание
от эмп
, где отдел = 10
ПЕРЕИМЕНОВАТЬ ЗАДАНИЕ ---------- --------- КЛАРК МЕНЕДЖЕР КОРОЛЬ ПРЕЗИДЕНТ MILLER CLERK
Solution
Найдите и используйте встроенную функцию вашей СУБД для
объединить значения из нескольких столбцов.
DB2, Oracle, PostgreSQL
Эти базы данных используют двойную вертикальную черту в качестве
оператор конкатенации:
1 выберите имя||' РАБОТАЕТ КАК '|| работа как msg 2 из эмп 3 где deptno=10
Эта база данных поддерживает функцию CONCAT:
1 выберите concat(ename, 'WORKS AS A',job) as msg 2 из эмп 3 где deptno=10
SQL Server
Используйте оператор "+" для объединения:
1 выберите ename + 'WORKS AS A' + job as msg 2 из эмп 3 где deptno=10
Обсуждение
Используйте функцию CONCAT для объединения значений из нескольких
столбцы. || это ярлык для функции CONCAT в DB2, Oracle,
и PostgreSQL, а + — это ярлык для SQL Server.
1.8. Использование условной логики в инструкции SELECT
Проблема
Вы хотите выполнять операции IF-ELSE со значениями в инструкции SELECT.
Например, вы хотели бы получить результирующий набор таким образом, что если
сотрудник получает 2000 долларов или меньше, возвращается сообщение «НЕДОПЛАТИТ»,
если сотруднику платят 4000 долларов или более, появляется сообщение «ПЕРЕПЛАТИТ».
возвращается, если они делают где-то посередине, то возвращается «ОК».
Набор результатов должен выглядеть так:
СОСТОЯНИЕ ENAME SAL ---------- ---------- --------- СМИТ 800 НЕДОПЛАТИТ ALLEN 1600 НЕДОПЛАТИТ ОТДЕЛЕНИЕ 1250 НИЖЕОПЛАЧИВАЕМОЕ ДЖОНС 2975 ОК МАРТИН 1250 НЕДОПЛАТИТ БЛЕЙК 2850 ОК КЛАРК 2450 ОК СКОТТ 3000 ОК КОРОЛЬ 5000 ПЕРЕПЛАТИЛ ТЕРНЕР 1500 НЕДОПЛАТИТ АДАМС 1100 НЕДОПЛАТИТ ДЖЕЙМС 950 НЕДОПЛАТИТ ФОРД 3000 ОК МИЛЛЕР 1300 НЕДОПЛАТИТ
Решение
Используйте выражение CASE для выполнения условной логики непосредственно в
ваш оператор SELECT:
1 выберите ename,sal, 2 случай, когда сал <= 2000, тогда «НЕДОПЛАТИТ» 3 когда сал >= 4000, то "ПЕРЕПЛАТИТ" 4 еще "ОК" 5 конец как статус 6 from emp
Обсуждение
Выражение CASE позволяет выполнять логику условия на
значения, возвращаемые запросом. Вы можете указать псевдоним для CASE
выражение, чтобы вернуть более читаемый набор результатов. В решении
вы увидите псевдоним STATUS, присвоенный результату CASE
выражение. Предложение ELSE является необязательным. Опустите ELSE и CASE
выражение вернет NULL для любой строки, которая не удовлетворяет тесту
состояние.
1.9. Ограничение количества возвращаемых строк
Проблема
Вы хотите ограничить количество строк, возвращаемых в вашем запросе. Ты
не заботятся о порядке; любые n строк будут
делать.
Решение
Используйте встроенную функцию вашей базы данных для управления
количество возвращенных строк.
В DB2 используйте предложение FETCH FIRST:
1 выберите * 2 из emp получить только первые 5 строк
MySQL и PostgreSQL
Сделайте то же самое в MySQL и PostgreSQL, используя LIMIT:
1 select * 2 from emp limit 5
Oracle
В Oracle установите ограничение на количество возвращаемых строк
путем ограничения ROWNUM в предложении WHERE:
1 выберите * 2 из эмп 3 где rownum <= 5
SQL Server
Используйте ключевое слово TOP, чтобы ограничить количество строк
возвращено:
1 выбрать верхние 5 * 2 из emp
Обсуждение
Многие поставщики предоставляют такие пункты, как FETCH FIRST и LIMIT, которые
позволяет указать количество строк, которые должны быть возвращены из запроса. Оракул
отличается тем, что вы должны использовать функцию ROWNUM
который возвращает число для каждой возвращаемой строки (возрастающее значение
начиная с 1).
Вот что происходит, когда вы используете ROWNUM <= 5 для возврата первые пять рядов:
Oracle выполняет ваш запрос.
Oracle извлекает первую строку и называет ее номером строки
1.Мы уже прошли пятую строку? Если нет, то Оракл
возвращает строку, поскольку она соответствует критериям нумерации
меньше или равно 5. Если да, то Oracle не возвращает
ряд.Oracle выбирает следующую строку и продвигает номер строки (к
2, потом 3, потом 4 и так далее).Перейдите к шагу 3.
Как показывает этот процесс, присваиваются значения из Oracle ROWNUM.
после извлекается каждая строка. Это очень
важный и ключевой момент. Многие разработчики Oracle пытаются вернуться
только, скажем, пятая строка, возвращаемая запросом при указании ROWNUM =
5.
Использование условия равенства в сочетании с ROWNUM — это плохо.
идея. Вот что происходит, когда вы пытаетесь вернуть, скажем, пятую строку
используя ROWNUM = 5:
Oracle выполняет ваш запрос.
Oracle извлекает первую строку и называет ее номером строки
1.Мы уже добрались до строки номер 5? Если нет, то Оракл
отбрасывает строку, поскольку она не соответствует критериям. Если да,
затем Oracle возвращает строку. Но ответа никогда не будет
да!Oracle выбирает следующую строку и называет ее строкой номер 1. Это
потому что первая строка, которая должна быть возвращена из запроса, должна быть
под номером 1.Перейдите к шагу 3.
Внимательно изучите этот процесс, и вы поймете, почему использование
ROWNUM = 5 для возврата пятой строки не удается. У вас не может быть пятого ряда
если вы сначала не вернете строки с первой по четвертую!
Вы можете заметить, что ROWNUM = 1 фактически возвращает
первой строке, что может показаться противоречащим объяснению до сих пор.
Причина, по которой ROWNUM = 1 работает для возврата первой строки, заключается в том, чтобы определить
независимо от того, есть ли какие-либо строки в таблице, Oracle должен попытаться
получить хотя бы один раз. Внимательно прочитайте предыдущий процесс,
подставив 1 вместо 5, и вы поймете, почему указывать можно
ROWNUM = 1 как условие (для возврата одной строки).
1.10. Возврат
n случайных записей из
Таблица
Проблема
Вы хотите получить определенное количество случайных записей из таблицы. Вы хотите изменить
следующий оператор, так что последовательные выполнения будут производить
другой набор из пяти строк:
выберите ename, job from emp
Solution
Возьмите любую встроенную функцию, поддерживаемую вашей СУБД, для возврата
случайные значения. Используйте эту функцию в предложении ORDER BY
сортировать строки случайным образом. Затем используйте технику предыдущего рецепта, чтобы
ограничить количество возвращаемых случайным образом отсортированных строк.
Используйте встроенную функцию RAND в сочетании с ORDER BY
и FETCH:
1 выберите ename,job 2 из эмп 3 порядок с помощью rand() выборка только первых 5 строк
Используйте встроенную функцию RAND в сочетании с LIMIT и
ЗАКАЗАТЬ ПО:
1 выберите ename,job 2 из эмп 3 порядок по rand() limit 5
PostgreSQL
Использовать встроенную функцию RANDOM в сочетании с LIMIT и ORDER
BY:
1 выберите ename,job 2 из эмп 3 порядок случайным() ограничение 5
Oracle
Использовать встроенную функцию ЗНАЧЕНИЕ, найденную во встроенном пакете
DBMS_RANDOM в сочетании с ORDER BY и встроенным
функция ROWNUM:
1 выбор * 2 из ( 3 выбрать имя, задание 4 из эмп 6 порядок по dbms_random. value() 7 ) 8 где rownum <= 5
SQL Server
Используйте встроенную функцию NEWID в сочетании с TOP и
ORDER BY, чтобы вернуть случайный набор результатов:
1 выбрать 5 лучших ename,job 2 из эмп 3 order by newid()
Обсуждение
Предложение ORDER BY может принимать возвращаемое функцией значение и
используйте его, чтобы изменить порядок результирующего набора. Решение запрашивает все
ограничить количество строк, чтобы вернуть после
функция в предложении ORDER BY выполняется. Пользователи, не использующие Oracle, могут найти
полезно посмотреть на решение Oracle, как оно показано (концептуально)
что происходит под обложками других решений.
Важно, чтобы вы не перепутали использование функции в
Предложение ORDER BY с использованием числовой константы. При указании
числовая константа в предложении ORDER BY, вы запрашиваете, чтобы
сортировать по столбцу в этом порядковом положении в
ВЫБРАТЬ список. Когда вы указываете функцию в предложении ORDER BY,
сортировка выполняется по результату функции по мере ее оценки
для каждой строки.
1.11. Поиск нулевых значений
Проблема
Вы хотите найти все строки, которые пусты для определенного
столбец.
Решение
Чтобы определить, является ли значение нулевым, необходимо использовать IS NULL:
1 select * 2 из эмп 3 где comm равно null
Discussion
NULL никогда не равен/не равен чему-либо, даже самому себе,
поэтому вы не можете использовать = или != для проверки того, является ли столбец NULL.
Чтобы определить, имеет ли строка значения NULL, вы должны использовать IS
НУЛЕВОЙ. Вы также можете использовать IS NOT NULL для поиска строк без нуля в массиве.
данный столбец.
1.12. Преобразование пустых значений в действительные значения
Проблема
У вас есть строки, содержащие пустые значения, которые вы хотите вернуть
ненулевые значения вместо этих нулей.
Решение
Используйте функцию ОБЪЕДИНЕНИЕ для подстановки реальных значений вместо
нули:
1 выберите объединение (comm, 0) 2 from emp
Обсуждение
Функция ОБЪЕДИНЕНИЕ принимает одно или несколько значений в качестве аргументов.
Функция возвращает первое ненулевое значение в списке. в
решение, значение COMM возвращается всякий раз, когда COMM не равен нулю.
В противном случае возвращается ноль.
При работе с нулями лучше воспользоваться
встроенный функционал, предоставляемый вашей СУБД; во многих случаях вы будете
найдите несколько функций, которые одинаково хорошо подходят для этой задачи. СЛИЯТЬСЯ
оказывается, работает для всех СУБД. Кроме того, CASE можно использовать для всех
СУБД тоже:
выбор регистра когда comm не равно нулю, тогда comm иначе 0 конец from emp
Хотя вы можете использовать CASE для преобразования нулей в значения, вы можете
видите, что использовать COALESCE намного проще и лаконичнее.
1.13. Поиск шаблонов
Проблема
Вы хотите вернуть строки, соответствующие определенной подстроке или
шаблон. Рассмотрим следующий запрос и набор результатов:
select ename, job
от эмп
где отдел в (10,20)
ПЕРЕИМЕНОВАТЬ ЗАДАНИЕ ---------- --------- СМИТ Клерк ДЖОНС МЕНЕДЖЕР КЛАРК МЕНЕДЖЕР СКОТТ АНАЛИТИК КОРОЛЬ ПРЕЗИДЕНТ АДАМС Клерк ФОРД АНАЛИТИК МИЛЛЕР Клерк
Из сотрудников отделов 10 и 20 вы хотите вернуть
только те, у кого где-то есть "я" в имени или работа
название, оканчивающееся на «ER»:
ENAME JOB ---------- --------- СМИТ Клерк ДЖОНС МЕНЕДЖЕР КЛАРК МЕНЕДЖЕР КОРОЛЬ ПРЕЗИДЕНТ MILLER CLERK
Solution
Используйте оператор LIKE в сочетании с оператором подстановки SQL («%»):
1 выберите имя, задание 2 из эмп 3 где дептно в (10,20) 4 и (имя как '%I%' или задание как '%ER')
Обсуждение
При использовании в операции сопоставления шаблона LIKE процент («%»)
оператор соответствует любой последовательности символов.