Программирование >>  Руководство по sql 

1 ... 75 76 77 [ 78 ] 79 80 81 ... 105


Полученные результаты показывают, что оба новых имени выровнены по левому краю (ведущие пробелы отсутствуют):

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

Результат:

acity

astate

pcity

pstate

Menlo Pare

NULL

NULL

Berkeley

Berkeley

Berkeley

Berkeley

Oakland

NULL

NULL

Oakland

NULL

NULL

Oakland

NULL

NULL

Salt Lake City

NULL

NULL

Salt Lake City

NULL

NULL

Gary

NULL

NULL

Rockville

NULL

NULL

Vacaville

NULL

NULL

Oakland

NULL

NULL

Palo Alto

NULL

NULL

Palo Alto

NULL

NULL

Walnut Creek

NULL

NULL

San Jose

NULL

NULL

Covelo

NULL

NULL

Nashville

NULL

NULL

Ann Arbor

NULL

NULL

San Francisco

NULL

NULL

Corvallis

NULL

NULL

Lawrence

NULL

NULL

Другой метод, основанный на использовании ключевого слова 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



1 ... 75 76 77 [ 78 ] 79 80 81 ... 105

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика