Мартин Грубер - Понимание SQL (Мартин Грубер. Понимание SQL), страница 6
Описание файла
PDF-файл из архива "Мартин Грубер. Понимание SQL", который расположен в категории "". Всё это находится в предмете "информационные технологии в материаловедении" из 9 семестр (1 семестр магистратуры), которые можно найти в файловом архиве НИУ «МЭИ» . Не смотря на прямую связь этого архива с НИУ «МЭИ» , его также можно найти и в других разделах. Архив можно найти в разделе "книги и методические указания", в предмете "информационные технологии в материаловедении" в общих файлах.
Просмотр PDF-файла онлайн
Текст 6 страницы из PDF
Это — полезный способ избежать избыточности данных, но важно что бы при этом вы понимали что вы делаете. Если вы не хотите потерять некоторые данные, вы не должны безоглядно использовать DISTINCT,потому что это может скрыть какую-то проблему или какие-то важные данные. Например, вы могли бы предположить что имена всех ваших заказчиков различны. Если ктото помещает второго Clemens в таблицу Заказчиков, а вы используете SELECTDISTINCT cname, вы не будете даже знать о существовании двойника.
Вы можете получить не того Clemens и даже не знать об этом. Так как вы не ожидаете избыточности, в этом случае вы не должны использовать DISTINCT.ПАРАМЕТРЫ DISTINCTDISTINCT может указываться только один раз в данном предложении SELECT.Если предложение выбирает многочисленные поля, DISTINCT опускает строки, гдевсе выбранные поля идентичны. Строки, в которых некоторые значения одинаковы анекоторые различны — будут сохранены. DISTINCT, фактически, приводит к показувсей строки вывода, не указывая полей (за исключением, когда он используется внутри агрегатных функций, как описано в Главе 6), так что нет никакого смысла чтобы егоповторять.=============== SQL Execution Log ============| SELECT DISTINCT snum|| FROM Orders;|| ============================================= ||snum|| ------||1001||1002||1003||1004||1007|===============================================Рисунок 3.5: SELECT без дублированияDISTINCT ВМЕСТО ALLВместо DISTINCT, вы можете указать — ALL.
Это будет иметь противоположныйэффект, дублирование строк вывода сохранится. Так как это — тот же самый случайкогда вы не указываете ни DISTINCT ни ALL, то ALL — по существу скорее пояснительный, а не действующий аргумент.КВАЛИФИЦИРОВАННЫЙ ВЫБОР ПРИ ИСПОЛЬЗОВАНИИПРЕДЛОЖЕНИЙТаблицы имеют тенденцию становиться очень большими, поскольку с течениемвремени, все большее и большее количество строк в нее добавляется. Посколькуобычно из них только определенные строки интересуют вас в данное время, SQL даетвозможность вам устанавливать критерии, чтобы определить, какие строки будут выбраны для вывода.WHERE — предложение команды SELECT, которое позволяет вам устанавливать предикаты, условие которых может быть или верным или неверным для любойстроки таблицы.
Команда извлекает только те строки из таблицы, для которых такоеутверждение верно. Например, предположим вы хотите видеть имена и комиссионныевсех продавцов в Лондоне. Вы можете ввести такую команду:SELECT sname, cityFROM SalespeopleWHERE city = "LONDON";Когда предложение WHERE представлено, программа базы данных просматривает всю таблицу по одной строке и исследует каждую строку, чтобы определить верно ли утверждение. Следовательно, для записи Peel, программа рассмотрит текущеезначение столбца city, определит что оно равно "London", и включит эту строку в вы-вод. Запись для Serres не будет включена, и так далее. Вывод для вышеупомянутогозапроса показан в Рисунке 3.6.=============== SQL Execution Log ============| SELECT sname, city|| FROM Salespeople|| WHERE city = 'London'|| ============================================= ||snamecity|| ---------------||PeelLondon||MotikaLondon|===============================================Рисунок 3.6: SELECT c предложением WHEREДавайте попробуем пример с числовым полем в предложении WHERE.
Полеrating таблицы Заказчиков предназначено, чтобы разделять заказчиков на группы, основанные на некоторых критериях, которые могут быть получены в итоге через этотномер. Возможно это — форма оценки кредита или оценки основанные на опыте предыдущих приобретений. Такие числовые коды могут быть полезны в реляционных базах данных как способ подведения итогов сложной информации. Мы можем выбратьвсех заказчиков с рейтингом 100, следующим образом:SELECT *FROM CustomersWHERE rating = 100;Одиночные кавычки не используются здесь потому, что оценка — это числовоеполе. Результаты запроса показаны в Рисунке 3.7.Предложение WHERE совместимо с предыдущим материалом в этой главе.Другими словами, вы можете использовать номера столбцов, устранять дубликаты,или переупорядочивать столбцы в команде SELECT которая использует WHERE.
Однако, вы можете изменять порядок столбцов для имен только в предложении SELECT,но не в предложении WHERE.=============== SQL Execution Log ============| SELECT *|| FROM Customers|| WHERE rating = 100;|| ============================================= ||сnumcnamecityratingsnum|| ------------- -------------||2001Hoffman London1001001||2006Clemens London1001001||2007Pereira Rome1001001|===============================================Рисунок 3.7:SELECT с числовым полем в предикатеРЕЗЮМЕТеперь вы знаете несколько способов заставить таблицу давать вам ту информацию, какую вы хотите, а не просто выбрасывать наружу все ее содержание. Вы можете переупорядочивать столбцы таблицы или устранять любую из них.
Вы можетерешать, хотите вы видеть дублированные значения или нет.Наиболее важно то, что вы можете устанавливать условие называемое предикатом, которое определяет или не определяет указанную строку таблицы из тысячтаких же строк, будет ли она выбрана для вывода.Предикаты могут становиться очень сложными, предоставляя вам высокую точность в решении, какие строки вам выбирать с помощью запроса. Именно эта способность решать точно, что вы хотите видеть, делает запросы SQL такими мощными.Следующие несколько глав будут посвещены, в большей мере, особенностям,которые расширяют мощность предикатов.
В Главе 4 вам будут представлены операторы иные чем те, которые используются в условиях предиката, а также способы объединения многочисленых условий в единый предикат.РАБОТА С SQL1. Напишите команду SELECT которая бы вывела номер порядка, сумму, и дату длявсех строк из таблицы Порядков.2.
Напишите запрос который вывел бы все строки из таблицы Заказчиков, для которых номер продавца = 1001.3. Напишите запрос который вывел бы таблицу со столбцами в следующем порядке:city, sname, snum, comm.4. Напишите команду SELECT которая вывела бы оценку (rating), сопровождаемуюименем каждого заказчика в San Jose.5.
Напишите запрос, который вывел бы значения snum всех продавцов в текущем порядке из таблицы Порядков без каких бы то ни было повторений.(См. Приложение A для ответов.)4ИСПОЛЬЗОВАНИЕРЕЛЯЦИОННЫХ ИБУЛЕВЫХ ОПЕРАТОРОВДЛЯ СОЗДАНИЯ БОЛЕЕИЗОЩРЕННЫХПРЕДИКАТОВВ ГЛАВЕ 3, ВЫ УЗНАЛИ ЧТО ПРЕДИКАТЫ МОГУТ оценивать равенство оператора как верного или неверного. Они могут также оценивать другие виды связей кромеравенств. Эта глава будет исследовать другие реляционные операторы используемые в SQL. Вы также узнаете как использовать операторы Буля, чтобы изменять иобъединять значения предиката. С помощью операторов Буля (или проще говоря логических операторов), одиночный предикат может содержать любое число условий.Это позволяет вам создавать очень сложные предикаты. Использование круглых скобок в структуре этих сложных предикатов будет также объясняться.РЕЛЯЦИОННЫЕ ОПЕРАТОРЫРеляционный оператор — математический символ, который указывает на определенный тип сравнения между двумя значениями.
Вы уже видели как используютсяравенства, такие как 2 + 3 = 5 или city = "London". Но также имеются другие реляционные операторы. Предположим что вы хотите видеть всех Продавцов с их комиссионными выше определенного значения. Вы можете использовать тип сравнения"больше чем" — (>).Реляционные операторы которыми распологает SQL :=Равный>Больше чем<Меньше чем>=Больше чем или равно<=Меньше чем или равно<>Не равноЭти операторы имеют стандартные значения для числовых значений. Для значения символа, их определение зависит от формата преобразования, ASCII илиEBCDIC, который вы используете.SQL сравнивает символьные значения в терминах основных номеров как определено в формате преобразования. Даже значение символа, такого как "1", которыйпредставляет номер, не обязательно равняется номеру, который он представляет.
Выможете использовать реляционные операторы, чтобы установить алфавитный порядок — например, "a" < "n" где средство a первое в алфавитном порядке — но все этоограничивается с помощью параметра преобразования формата.И в ASCII и в EBCDIC, символы — по значению: меньше чем все другие символыкоторым они предшествуют в алфавитном порядке и имеют один вариант (верхнийили нижний).
В ASCII, все символы верхнего регистра — меньше чем все символынижнего регистра, поэтому "Z" < "a", а все номера — меньше чем все символы, поэтому "1" < "Z". То же относится и к EBCDIC. Чтобы сохранить обсуждение более простым, мы допустим что вы будете использовать текстовый формат ASCII.Проконсультируйтесь с вашей документацией системы если вы неуверены какойформат вы используете или как он работает.Значения сравниваемые здесь называются — скалярными значениями.
Скалярные значения производяться скалярными выражениями; 1 + 2 — это скалярное выражение которое производит скалярное значение 3. Скалярное значение может бытьсимволом или числом, хотя очевидно что только номера используются с арифметическими операторами, такими как + (плюс) или * (звезда).Предикаты обычно сравнивают значения скалярных величин, используя или реляционные операторы или специальные операторы SQL чтобы увидеть верно ли этосравнение. Некоторые операторы SQL описаны в Главе 5.Предположим что вы хотите увидеть всех заказчиков с оценкой (rating) выше200.