основы sql. Основы языка sql аннотация
Скачать 88.91 Kb.
|
SELECT name, name LIKE '%alu%', density FROM materials; +--------------+-------------------+---------+ | name | name LIKE '%alu%' | density | +--------------+-------------------+---------+ | steel | 0 | 7.80 | | aluminium | 1 | 2.70 | | concrete | 0 | 5.60 | | duraluminium | 1 | 2.80 | | titanium | 0 | 4.50 | | brass | 0 | 8.50 | +--------------+-------------------+---------+ Пример Пусть необходимо для каждого конечного элемента определить наибольшее значение разности идентификаторов узлов, являющихся вершинами этого конечного элемента. Данная задача может быть решена следующим оператором SELECT id, n1, n2, n3, MAX(ABS(n1-n2),ABS(n1-n3),ABS(n2-n3)) FROM elements; +----+----+----+----+---------------------------------------+ | id | n1 | n2 | n3 | MAX(ABS(n1-n2),ABS(n1-n3),ABS(n2-n3)) | +----+----+----+----+---------------------------------------+ | 29 | 24 | 26 | 25 | 2 | | 30 | 24 | 25 | 23 | 2 | | 31 | 22 | 26 | 24 | 4 | | 1 | 2 | 3 | 5 | &nbs p; 3 | | 2 | 1 | 2 | 4 | &nbs p; 3 | | 3 | 2 | 5 | 4 | &nbs p; 3 | | 4 | 4 | 5 | 6 | &nbs p; 2 | | 25 | 24 | 23 | 21 | 3 | | 20 | 20 | 19 | 17 | 3 | | 21 | 21 | 19 | 20 | 2 | | 22 | 21 | 23 | 19 | 4 | | 12 | 12 | 14 | 13 | 2 | | 13 | 12 | 15 | 14 | 3 | | 14 | 13 | 14 | 18 | 5 | | 26 | 28 | 27 | 22 | 6 | | 7 | 7 | 8 | 9 | &nbs p; 2 | | 8 | 8 | 10 | 9 | 2 | | 9 | 9 | 10 | 11 | 2 | | 10 | 10 | 12 | 11 | 2 | | 11 | 11 | 12 | 13 | 2 | | 16 | 16 | 17 | 14 | 3 | | 17 | 18 | 17 | 14 | 4 | | 18 | 16 | 20 | 17 | 4 | | 19 | 19 | 18 | 17 | 2 | | 15 | 15 | 16 | 14 | 2 | | 27 | 27 | 29 | 26 | 3 | | 28 | 22 | 27 | 26 | 5 | | 5 | 5 | 7 | 6 | &nbs p; 2 | | 6 | 5 | 8 | 7 | &nbs p; 3 | | 23 | 20 | 22 | 21 | 2 | | 24 | 24 | 21 | 22 | 3 | +----+----+----+----+---------------------------------------+ 4. В общем случае в_выражение допускает использование агрегативных (называемых также групповыми) функций, принимающих в качестве своего единственного аргумента значения всех ячеек указанного столбца результирующей таблицы. Основные такие функции представлены в таблице 4. Таблица 4. Агрегативные функции
Примечание. Функции MAX(...) и MIN(...) с одним аргументом являются агрегативными функциями, они же с двумя и более аргументами - обычные функции (см. таблицу 1). Пример Для отыскания наибольшего значения модуля Юнга для материалов, имеющихся в таблице materials, можно использовать следующий оператор SELECT MAX(elastics) FROM materials; +---------------+ | MAX(elastics) | +---------------+ | 200.00 | +---------------+ Пример Следующий оператор SELECT позволяет определить общее количество конечных элементов в КЭ-сетке из нашего примера. SELECT COUNT(*) FROM elements; +----------+ | COUNT(*) | +----------+ | 31 | +----------+ Описание критерия выборки содержимого строк результирующей матрицы В качестве критерия выбора информации из таблиц списка FROM оператора SELECT выступает сложн_условие, записываемое после ключевого слова WHERE и имеющее следующий вид: прост_условие или прост_условие AND сложн_условие или прост_условие OR сложн_условие Типичными вариантами прост_условие являются следующие. Сравнение полн_имя_столбца @ полн_имя_столбца_или_константа где @ - один из операторов сравнения: ? (?больше?), ? (?меньше?), ?= (? не меньше?), ?= (?не больше?), = (?равно?), ?? (?не равно?), а полное_имя_столбца - имя столбца, конкретизированное при необходимости именем или синонимом имени таблицы, как это было описано выше. Сопоставление с образцом полн_имя_столбца [NOT] LIKE образец где образец имеет вид, описанный в таблице 3. Проверка на ?пустое? значение в ячейке стодбца полн_имя_столбца IS [NOT] NULL При конструировании сложн_условие допустимо использование круглых скобок для управления порядком вычисления условий. Примечание. Обратите внимание, что синтаксис сложн_условие существенно ?беднее? синтаксиса в_выражение. Дело в том, что сложн_условие используется (в том числе и на физическом уровне организации БД) на этапе выборки из исходной (возможно, очень большой) таблицы (таблиц) необходимых строк в результирующую. Для сокращения времени прямого доступа к строкам таблиц они (таблицы) снабжаются ключами и индексами. Реальный эффект от использования ключей и индексов может быть достигнут только при условии, что запросы на поиск в таблицах используют в качестве критерия поиска только значения ячеек столбцов в ?чистом? виде, а не в виде их комбинации в сложном выражении. Конструкция же в_выражение применяется, по сути дела, к значениям столбцов уже результирующей таблицы, поэтому сложность в_выражение на эффективность выполнения запроса практически никакого влияния не оказывает. Пример Для определения координат местоположения узла 11 может использоваться следующий оператор: SELECT * FROM nodes WHERE id = 11; +----+--------+--------+ | id | x | y | +----+--------+--------+ | 11 | -35.00 | -10.00 | +----+--------+--------+ Пример Пусть необходимо определить идентификаторы всех конечных элементов, имеющих в качестве одной из своих вершин узел 20. Эта задача может быть решена следующим оператором SELECT SELECT id FROM elements WHERE n1 = 20 OR n2 = 20 OR n3 = 20; +----+ | id | +----+ | 20 | | 21 | | 18 | | 23 | +----+ Пример Для определения идентификаторов узлов КЭ-сетки, расположенных в первом квадранте системы координат можно использовать следующий оператор SELECT * FROM nodes WHERE x ?= 0 AND y ?= 0; +----+-------+-------+ | id | x | y | +----+-------+-------+ | 14 | 0.00 | 0.00 | | 15 | 5.00 | 20.00 | | 16 | 20.00 | 8.00 | +----+-------+-------+ Пример Следующий оператор SELECT может быть использован для определения граничных условий, имеющих в качестве одной из своих характеристик численное значение величины SELECT * FROM loadings WHERE value IS NOT NULL; +------+-----------+------+--------+ | type | direction | node | value | +------+-----------+------+--------+ | f | y | 27 | -50.00 | | f | x | 27 | -10.00 | +------+-----------+------+--------+ Упорядочивание и группирование строк результирующей таблицы Для обеспечения структурированности в расположении строк результирующей таблицы в операторе SELECT используются конструкции GROUP BY и ORDER BY. Упорядочение строк достигается перечислением полных имен столбцов, по которым в возрастающем (ASC) или убывающем (DESC) порядке сортируются строки результирующей таблицы. При этом строки упорядочиваются в первую очередь по столбцу, указанному первым в списке ORDER BY. Затем, если среди значений ячеек первого столбца есть повторяющиеся, производится упорядочение по второму столбцу и так далее. Пример Для вывода информации об узлах КЭ-сетки в убывающем порядке их (узлов) идентификаторов может быть использован следующий оператор: SELECT * FROM nodes ORDER BY id DESC; +----+--------+--------+ | id | x | y | +----+--------+--------+ | 29 | 83.00 | -9.00 | | 28 | 65.00 | -5.00 | | 27 | 75.00 | -7.00 | | 26 | 80.00 | -20.00 | | 25 | 75.00 | -35.00 | | 24 | 65.00 | -25.00 | | 23 | 60.00 | -39.00 | | 22 | 60.00 | -15.00 | | 21 | 50.00 | -25.00 | | 20 | 40.00 | -3.00 | | 19 | 30.00 | -27.00 | | 18 | 10.00 | -20.00 | | 17 | 20.00 | -10.00 | | 16 | 20.00 | 8.00 | | 15 | 5.00 | 20.00 | | 14 | 0.00 | 0.00 | | 13 | -15.00 | -14.00 | | 12 | -15.00 | 15.00 | | 11 | -35.00 | -10.00 | | 10 | -40.00 | 15.00 | | 9 | -55.00 | -6.00 | | 8 | -65.00 | 15.00 | | 7 | -75.00 | -3.00 | | 6 | -85.00 | -1.00 | | 5 | -80.00 | 15.00 | | 4 | -95.00 | 10.00 | | 3 | -80.00 | 20.00 | | 2 | -87.50 | 20.00 | | 1 | -95.00 | 20.00 | +----+--------+--------+ Пример Пусть необходимо вывести информацию о конечных элементах, упорядочив ее; в первую очередь по идентификаторам узлов, являющихся первой вершиной конечного элемента; во вторую очередь по идентификаторам узлов, являющихся второй вершиной конечного элемента; Для решения этой задачи можно использовать следующий оператор SELECT * FROM elements ORDER BY n1, n2; +----+----+----+----+-------+ | id | n1 | n2 | n3 | props | +----+----+----+----+-------+ | 2 | 1 | 2 | 4 | steel | | 1 | 2 | 3 | 5 | steel | | 3 | 2 | 5 | 4 | steel | | 4 | 4 | 5 | 6 | steel | | 5 | 5 | 7 | 6 | steel | | 6 | 5 | 8 | 7 | steel | | 7 | 7 | 8 | 9 | steel | | 8 | 8 | 10 | 9 | steel | | 9 | 9 | 10 | 11 | steel | | 10 | 10 | 12 | 11 | steel | | 11 | 11 | 12 | 13 | steel | | 12 | 12 | 14 | 13 | steel | | 13 | 12 | 15 | 14 | steel | | 14 | 13 | 14 | 18 | steel | | 15 | 15 | 16 | 14 | steel | | 16 | 16 | 17 | 14 | steel | | 18 | 16 | 20 | 17 | steel | | 17 | 18 | 17 | 14 | steel | | 19 | 19 | 18 | 17 | steel | | 20 | 20 | 19 | 17 | steel | | 23 | 20 | 22 | 21 | steel | | 21 | 21 | 19 | 20 | steel | | 22 | 21 | 23 | 19 | steel | | 31 | 22 | 26 | 24 | steel | | 28 | 22 | 27 | 26 | steel | | 24 | 24 | 21 | 22 | steel | | 25 | 24 | 23 | 21 | steel | | 30 | 24 | 25 | 23 | steel | | 29 | 24 | 26 | 25 | steel | | 27 | 27 | 29 | 26 | steel | | 26 | 28 | 27 | 22 | steel | +----+----+----+----+-------+ Оператор SELECT может обеспечить вычисление агрегативных функций для групп строк результирующей таблицы. Для этого используется список полных имен столбцов в конструкции GROUP BY. Первое полное имя столбца в списке GROUP BY используется для разбиения строк результирующей таблицы на первичные группы, первичные группы разделяются на ?подгруппы? вторым в списке полным именем столбца и так далее. Оператор SELECT выводит значения агрегативных функций для самых ?малых? подгрупп. Пример Пусть необходимо определить количество узлов КЭ-сетки, охватываемых каждым видом граничных условий. Для этого может быть использован следующий оператор SELECT type, COUNT(*) FROM loadings GROUP BY type; +------+----------+ | type | COUNT(*) | +------+----------+ | f | 2 | | h | 1 | | r | 3 | +------+----------+ Примечание. Конструкция HAVING сложн_условие, как необязательная составная часть предложения GROUP BY, позволяет определять дополнительный (к WHERE сложн_условие) критерий выборки строк в группы. Этот дополнительный критерий применяется в режиме постпроцессорной обработки к таблице, полученной в результате использования критерия из конструкции WHERE. Выборка из нескольких таблиц В общем случае оператор SELECT языка SQL дает возможность выборки информации сразу из нескольких таблиц, перечисленных в списке FROM. На концептуальном уровне рассмотрения (уровне реляционной модели данных) такая выборка включает в себя два основных этапа: построение промежуточной таблицы, представляющей собой декартово произведение таблиц из списка FROM (т.е. таблицы, строки которой представляют собой все возможные сочетания строк исходных таблиц); копирование в результирующую таблицу всех строк промежуточной, отвечающих критерию из WHERE сложн_условие (если таковой определен). Пример Пусть необходимо определить значение модуля Юнга для конечного элемента с идентификатором 25. Эта задача может быть решена следующим оператором SELECT id, elastics FROM elements, materials WHERE id = 25 AND props = name; +----+----------+ | id | elastics | +----+----------+ | 25 | 200.00 | +----+----------+ Примечание. Обратите внимание, что в данном примере нигде в операторе SELECT не потребовалось использовать полные имена столбцов различных таблиц. Объясняется это тем, что имена столбцов таблиц elements и materials различны, и поэтому неоднозначностей в именовании быть не может. Примечание. Хотя концептуальная модель обработки оператора SELECT со списком FROM из двух и более таблиц подразумевает построение декартового произведения этих табллиц, в реальности этого не происходит в силу ?ограниченности? синтаксиса сложн_условие из конструкции WHERE. Так, в нашем последнем примере запрос на выборку осуществлялся в 2 ?коротких? этапа: 1) из таблицы elements (с использованием первичного ключа) прямым доступом извлекается строка с id=25; 2) из таблицы materials (опять с использованием первичного ключа) прямым доступом извлекается информация о материале ?steel? (сталь). Очевидно, что такой ?оптимизированный? подход несравненно более эффективен по сравнению с каноническим (через декартово произведение). Пример Для вывода координат трех вершин каждого конечного элемента в КЭ-сетке в одной таблице можно использовать следующий оператор |