|
Программирование >> Руководство по sql
Полученные результаты показывают, что оба новых имени выровнены по левому краю (ведущие пробелы отсутствуют): SQL: select au fname, phone, address, city, state, zip from authors where au id like 123% Результат: au fname phone address city state zip Amelia NULL NULL NULL NULL NULL J. NULL NULL NULL NULL NULL A вот как можно было бы скомбинировать операции избавления значимых данных от излищних пробелов и преобразования пустых строк в нули: SQL: update authors set au fname = rtrim(ltrim (au fname)), phone = rtrim(ltrim (phone)), address = rtrim(ltrim (address)), city = rtrim(ltrim (city)), state = rtrim(ltrim (state)), zip = rtrim(ltrim (zip)) Прежде чем продолжить работу, удалите две строки, которые вы добавили в таблицу authors, с помощью оператора DELETE: SQL: delete authors where au id like 123% ПОИСК ДАННЫХ С помощью сложных ОБЪЕДИНЕНИЙ И ПОДЗАПРОСОВ в этом разделе вы найдете другие рекомендации по составлению запросов, общей темой которых является использование более сложных объединений и подзапросов. Здесь вы найдете коды для рещения следующих задач. Сопоставление пар полей в разных таблицах (с помощью внещнего объединения или подзапроса). Нахождение строк в определенном диапазоне, когда вам неизвестно ни верхнее, ни нижнее значение (с подзапросами и без них). Отображение данных в формате электронной таблицы (с помощью коррелированных подзапросов в предложении SELECT). Сопоставление пар столбцов в разных таблицах Если у вас есть две таблицы с подобными данными (например, поля city и state в таблицах authors и publishers), то как выяснить, встречаются ли одинаковые пары значений в обеих таблицах? Этим кодом удобно пользоваться при выполнении проверок на целостность данных после их копирования из одной таблицы в другую и в тех случаях, когда вы храните подмножества большой таблицы в отдельных, более мелких таблицах с целью повышения эффективности операций поиска. Ниже изложен метод, в котором используется внешнее объединение. Как вы, наверное, помните, внешнее объединение может быть левым (*=) или правым (=*). Левое внешнее объединение отображает все вьщеленные поля в первой таблице объединения и только совпадаюшие поля - во второй. Правое внешнее объединение выполняет обратную операцию: оно отображает совпадаюшие поля в первой таблице и все вьщеленные поля - во второй. Проще всего запомнить это по тому, что символ звездочка (*) обозначает все . Поэтому таблица со стороны звездочки в объединении (правом или левом) является таблицей, даюшей полные результаты. Результаты внешнего объединения очень удобно анализировать визуально. SQL: select authors.city acity, authors.state astate, publishers.city pcity, publishers.state pstate from authors, publishers where authors.city *= publishers.city and authors.state *= publishers.state
Другой метод, основанный на использовании ключевого слова EXISTS, позволяет найти ту же информацию: какие пары city/state из таблицы authors встречаются и в таблице pubhshers? SQL: select authors.city, authors.state from authors where exists (select * from publishers where publishers.city = authors.city and publishers.state = authors.state) Результат: city state Berkeley CA Berkeley CA Если вы хотите увидеть пары из таблицы authors, которые не встречаются в таблице publishers, используйте конструкцию NOT EXISTS. Поиск данных в определенном диапазоне, если вам не известны точные значения Чтобы найти все книги с ценами между $7.00 и $10.95, можно выполнить запрос, подобный следующему: SQL: select title, titlejd, price from titles where price between $7.00 and $10.95 Результат: title title id price Emotional Security: A New Algorithm PS7777 7.99 Is Anger the Enemy? PS2091 10.95 Life Without Fear PS2106 7 Если вы хотите увидеть все книги с ценами, находящимися в диапазоне между ценами каких-то двух конкретных книг, но вам не известны цены этих книг, попробуйте выполнить следующий запрос: SQL: select title, title id, price from titles where price between (select price from titles where title like Life Without*) (select price from titles where title like Is Anger%) Пока вы помещаете книгу с более низкой ценой сначала в предложение BETWEEN, все будет нормально. Но если вы разместите их в убывающей последовательности (поскольку не знаете их настоящих цен), то получите в результате нулевые строки или сообщение об ошибке. Одним из способов избежать этой ситуации является использование оператора OR и включение обеих комбинаций: SQL: select title, title id, price from titles where price between (select price from titles where title like Life Without*) (select price
|
© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |