Добавил:
vk.com СтудСклад КубГУ vk.com/studsklad Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
8
Добавлен:
09.08.2019
Размер:
426.89 Кб
Скачать

+----

+-------

+-------

+

Пример

Следующий оператор SELECT может быть использован для определения граничных условий, имеющих в качестве одной из своих характеристик численное значение величины

SELECT * FROM loadings WHERE value IS NOT NULL;

+

 

+

+------

+-----------

+------

 

value

| type

| direction

| node |

|

+------

+-----------

+------

27

+--------

-50.00

+

| f

| y

|

|

|

| f

| x

|

27

|

-10.00

|

+------

+-----------

+------

 

+--------

 

+

Упорядочивание и группирование строк результирующей таблицы

Для обеспечения структурированности в расположении строк результирующей таблицы в операторе SELECT используются конструкции GROUP BY и ORDER BY.

Упорядочение строк достигается перечислением полных имен столбцов, по которым в возрастающем (ASC) или убывающем (DESC) порядке сортируются строки результирующей таблицы. При этом строки упорядочиваются в первую очередь по столбцу, указанному первым в списке ORDER BY. Затем, если среди значений ячеек первого столбца есть повторяющиеся, производится упорядочение по второму столбцу и так далее.

Пример

Для вывода информации об узлах КЭ-сетки в убывающем порядке их (узлов) идентификаторов может быть использован следующий оператор:

SELECT * FROM nodes ORDER BY id DESC;

+----

 

+--------

x

+--------

y

+

| id |

|

|

+----

 

+--------

83.00

+--------

 

+

| 29 |

|

-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

|

+----

 

+--------

+--------

 

+

Пример

Пусть необходимо вывести информацию о конечных элементах, упорядочив ее;

oв первую очередь по идентификаторам узлов, являющихся первой вершиной конечного элемента;

oво вторую очередь по идентификаторам узлов, являющихся второй вершиной конечного элемента;

Для решения этой задачи можно использовать следующий оператор

SELECT * FROM elements ORDER BY n1, n2;

+----

 

+----

 

+----

n2

+----

 

+-------

+

| id

| n1 |

| 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(*) |

+------

+----------

2

+

| f

|

|

| h

|

1

|

| r

|

3

|

+------

+----------

 

+

Примечание. Конструкция HAVING сложн_условие, как необязательная составная часть предложения GROUP BY, позволяет определять дополнительный (к WHERE сложн_условие) критерий выборки строк в группы. Этот дополнительный критерий применяется в режиме постпроцессорной обработки к таблице, полученной в результате использования критерия из конструкции WHERE.

Выборка из нескольких таблиц

В общем случае оператор SELECT языка SQL дает возможность выборки информации сразу из нескольких таблиц, перечисленных в списке FROM. На концептуальном уровне рассмотрения (уровне реляционной модели данных) такая выборка включает в себя два основных этапа:

1.построение промежуточной таблицы, представляющей собой декартово произведение таблиц из списка FROM (т.е. таблицы, строки которой представляют собой все возможные сочетания строк исходных таблиц);

2.копирование в результирующую таблицу всех строк промежуточной, отвечающих критерию из 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» (сталь). Очевидно, что такой «оптимизированный» подход несравненно более эффективен по сравнению с каноническим (через декартово произведение).

Пример

Для вывода координат трех вершин каждого конечного элемента в КЭ-сетке в одной таблице можно использовать следующий оператор

SELECT e.id, node1.x, node1.y, node2.x, node2.y, node3.x, node3.y

 

FROM elements e, nodes node1, nodes node2, nodes node3

 

 

WHERE e.n1 = node1.id

 

 

 

 

 

 

 

 

 

AND e.n2 = node2.id

 

 

 

 

 

 

 

 

 

AND e.n3 = node3.id;

+

 

+

 

+

 

+

 

+

+----

 

+--------

 

+--------

 

 

 

 

 

| id | x

 

| y

 

| x

 

| y

 

| x

 

| y

 

|

+----

 

+--------

65.00

+--------

 

+--------

80.00

+--------

 

+--------

75.00

+--------

 

+

| 29

|

| -25.00

|

| -20.00

|

| -35.00 |

| 30

|

65.00

| -25.00

|

75.00

| -35.00

|

60.00

| -39.00 |

| 31

|

60.00

| -15.00

|

80.00

| -20.00

|

65.00

| -25.00 |

|

1

| -87.50

|

20.00

| -80.00

|

20.00

| -80.00

|

15.00

|

|

2

| -95.00

|

20.00

| -87.50

|

20.00

| -95.00

|

10.00

|

|

3

| -87.50

|

20.00

| -80.00

|

15.00

| -95.00

|

10.00

|

|

4

| -95.00

|

10.00

| -80.00

|

15.00

| -85.00

|

-1.00 |

| 25

|

65.00

| -25.00

|

60.00

| -39.00

|

50.00

| -25.00 |

| 20

|

40.00

|

-3.00

|

30.00

| -27.00

|

20.00

| -10.00 |

| 21

|

50.00

| -25.00

|

30.00

| -27.00

|

40.00

|

-3.00 |

| 22

|

50.00

| -25.00

|

60.00

| -39.00

|

30.00

| -27.00 |

| 12

| -15.00

|

15.00

|

0.00

|

0.00

| -15.00

| -14.00 |

| 13

| -15.00

|

15.00

|

5.00

|

20.00

|

0.00

|

0.00

|

| 14

| -15.00

| -14.00

|

0.00

|

0.00

|

10.00

| -20.00 |

| 26

|

65.00

|

-5.00

|

75.00

|

-7.00

|

60.00

| -15.00 |

|

7

| -75.00

|

-3.00

| -65.00

|

15.00

| -55.00

|

-6.00 |

|

8

| -65.00

|

15.00

| -40.00

|

15.00

| -55.00

|

-6.00 |

|

9

| -55.00

|

-6.00

| -40.00

|

15.00

| -35.00

| -10.00 |

| 10

| -40.00

|

15.00

| -15.00

|

15.00

| -35.00

| -10.00 |

| 11

| -35.00

| -10.00

| -15.00

|

15.00

| -15.00

| -14.00 |

| 16

|

20.00

|

8.00

|

20.00

| -10.00

|

0.00

|

0.00

|

| 17

|

10.00

| -20.00

|

20.00

| -10.00

|

0.00

|

0.00

|

| 18

|

20.00

|

8.00

|

40.00

|

-3.00

|

20.00

| -10.00 |

| 19

|

30.00

| -27.00

|

10.00

| -20.00

|

20.00

| -10.00 |

| 15

|

5.00

|

20.00

|

20.00

|

8.00

|

0.00

|

0.00

|

| 27

|

75.00

|

-7.00

|

83.00

|

-9.00

|

80.00

| -20.00 |

| 28

|

60.00

| -15.00

|

75.00

|

-7.00

|

80.00

| -20.00 |

|

5

| -80.00

|

15.00

| -75.00

|

-3.00

| -85.00

|

-1.00 |

|

6

| -80.00

|

15.00

| -65.00

|

15.00

| -75.00

|

-3.00 |

| 23

|

40.00

|

-3.00

|

60.00

| -15.00

|

50.00

| -25.00 |

| 24

|

65.00

| -25.00

|

50.00

| -25.00

|

60.00

| -15.00 |

+----

 

+--------

 

+--------

 

+--------

 

+--------

 

+--------

 

+--------

 

+

Примечание. Обратите внимание, что необходимая для выполнения данного запроса промежуточная таблица в виде декартового произведения (если бы она реально

строилась) имеет размер в 31*29*29*29=756059 строк (31 строка в таблице elements и 29 строк в таблице nodes).

Манипулирование строками таблиц

Для удаления и изменения строк таблиц SQL БД применяются операторы DELETE и UPDATE.

Удаление строк

Удаление строк таблицы реализуется оператором DELETE FROM, имеющим следующий синтаксис

DELETE FROM имя_табл [WHERE сложн_условие]

где сложн_условие имеет описанный выше синтаксис. В результате выполнения оператора из таблицы удаляются все строки, удовлетворяющие критерию сложн_условие. Если в операторе DELETE FROM конструкция WHERE опущена, то удаляются все строки таблицы.

Модификация строк

Изменение содержимого строк таблицы реализуется оператором UPDATE, имеющим следующий синтаксис

UPDATE имя_табл SET имя_столбца=выражение, ...

[WHERE сложн_условие]

где выражение - выражение (в простейшем случае - константа), согласующееся по результату с типом данных столбца. В выражение допустимо использование значений ячеек любых столбцов таблицы, рассмотренных ранее операций и функций (но не агрегативных), а также прежнего содержимого модифицуруемой ячейки. Обновлению подлежат столбцы строк, отвечающих критерию сложн_условие. Если конструкция WHERE в операторе отсутствует, то обновляются все строки таблицы.

Пример

Для изменения наименования материала, из которого выполнена механическая конструкция, для всех элементов КЭ-сетки можно использовать следующий оператор

UPDATE elements SET props='brass';

SELECT * FROM elements;

+----

+----

 

+----

n2

+----

+-------

+

| id |

n1 |

| n3 | props |

+----

+----

 

+----

26

+----

+-------

+

| 29 |

24 |

| 25 | brass |

| 30

|

24

|

25

| 23

| brass |

| 31

|

22

|

26

| 24

| brass |

|

1

|

2

|

3

|

5

| brass |

|

2

|

1

|

2

|

4

| brass |

| 28

| 22 |

. . .

 

| brass |

27

| 26

|

5

|

5

|

7

|

6

| brass |

|

6

|

5

|

8

|

7

| brass |

| 23

| 20 |

22

| 21

| brass |

| 24

| 24 |

21

| 22

| brass |

+----

 

+----

 

+----

 

+----

 

+-------

+

Пример

В нашей КЭ-сетке элемент 22 имеет «неправильную» форму. Ставится задача заменить его двумя новыми конечными элементами, имеющими форму, более близкую к равносторонней. Эта задача может быть решена следующей последовательностью операторов

DELETE FROM elements WHERE id=22;

INSERT INTO nodes VALUES (30, 45.0, -33.5);

INSERT INTO elements VALUES (22, 21, 30, 19);

INSERT INTO elements VALUES (32, 21, 23, 30);

Пример

Для решения предыдущей задачи можно также использовать и другой набор операторов

INSERT INTO nodes VALUES (30, 45.0, -33.5);

UPDATE elements SET n2 = 30 WHERE id = 22;

INSERT INTO elements VALUES (32, 21, 23, 30);

Литература

3.Дж. Мартин. Организация баз данных в вычислительных системах. -

М.;Мир,1980. - 662с.

4.С.Д. Кузнецов. Стандарты языка реляционных баз данных SQL: краткий обзор. //СУБД, 1996, N2, сс. 6-36.

5.С.Д. Некузнецов

6.Зенкевич О., Морган К. Конечные элементы и аппроксимации. - М.:Мир, 1979.

-318с.

Упражнения

Ниже приведены задания, которые необходимо выполнить, используя оператор SELECT выборки информации из учебной базы данных. Выполнение некоторых заданий значительно упростится, если учесть приведенные ниже рекомендации.

7.Определить наилучший материал по показателю «прочность/плотность».

8.Получить таблицу, содержащую значения наибольших разностей идентификаторов узлов - вершин для каждого конечного элемента.Таблица должна быть упорядочена по убыванию значений разностей.

9.Определить максимальное значение в таблице из предыдущего задания.

10.Определить протяженность механического объекта вдоль оси x.

11.Определить расстояние каждого узла КЭ-сетки до начала системы координат.

12.Определить расстояние каждого узла КЭ-сетки до узла, в котором приложено граничное условие в виде горизонтальной силы (подчеркнем, не до узла с заданным идентификатором, а до узла с заданным типом граничного условия).

13.Найти наибольшее расстояние между узлами КЭ-сетки.

14.Получить таблицу длин сторон всех элементов КЭ-сетки в виде

«идентификатор элемента - длина стороны 1 - длина стороны 2 - длина стороны 3».

15.Получить таблицу расстояний между узлами КЭ-сетки, соединенных сторонами конечных элементов, в виде «идентификатор узла 1 - идентификатор узла 2 - длина».

16.Получить таблицу площадей всех конечных элементов. Напомним, для вычисления площади треугольника можно использовать формулу

s = SQRT(p*(p-a)*(p-b)*(p-c))

где a, b, c - длины сторон треугольника, а p - его полупериметр.

17.Определить общую массу механического объекта при условии, что его толщина (в направлении z) равна 5 мм.

18.Получить таблицу значений отношения maxL/minL для каждого конечного элемента с указанием тех элементов, для которых это отношение превышает величину 1,4 (здесь maxL - наибольшая длина стороны конечного элемента, minL - наименьшая длина стороны конечного элемента).

19.Получить таблицу «степеней» узлов КЭ-сетки. Степенью узла в теории графов называется количество ребер, соединяющих данный узел с соседними.

20.Определить для каждого узла КЭ-сетки количество «подключенных» к нему конечных элементов.

21.Получить список идентификаторов «угловых» узлов КЭ-сетки (назовем унловыми узлы, являющиеся вершиной только одного элемента).

22.Получить список идентификаторов конечных элементов, одна или более сторон которых образуют границу области.

23.Предложить способ определения факта расположения узла КЭ-сетки на границе области. Выдать список всех таких узлов.

Рекомендация. В СУБД mySQL синтаксис оператора SELECT выглядит следующим образом:

SELECT [ALL|DISTINCT] в_выражение [AS син_столбца], ...

FROM ... и т.д.

где син_столбца - имя, назначаемое столбцу результирующей таблицы. Это имя используется при выводе результирующей таблицы (в ее «шапке») вместо текста в_выражение. Однако, более полезно то, что син_столбца можно использовать в в_выражение, расположенном правее в списке оператора SELECT. Это в ряде случаев позволяет существенно уменьшить сложность конструкции в_выражение. Необходимо также отметить, что аналогичные средства именования (введения синонимов) столбцов результирующей таблицы предлагают все СУБД, поддерживающие язык SQL.

Соседние файлы в папке БД1