SQL Structured Query Language. JDBC, mysql

Содержание

Слайд 2

Проектирование баз данных Нормальные формы – требования предъявляемые к структуре таблиц

Проектирование баз данных

Нормальные формы – требования предъявляемые к структуре таблиц в

теории реляционных баз данных.
Процесс приведения базы данных к виду, соответствующему нормальным формам называется нормализацией.
Приведение таблиц к нормальным формам осуществляется за счет декомпозиции, то есть разбиения таблиц на несколько.
Слайд 3

Первая нормальная форма Первая нормальная форма требует, чтообы каждый элемент таблицы

Первая нормальная форма

Первая нормальная форма требует, чтообы каждый элемент таблицы имел

только одно значение. Т.е. был «атомарным»

Не соответствует

Соответствует

Слайд 4

Вторая нормальная форма Вторая нормальная форма требует, чтобы все поля зависели

Вторая нормальная форма

Вторая нормальная форма требует, чтобы все поля зависели от

первичного ключа, а не от его какой-то части.
Ключ может состоять из нескольких полей. Если какие-либо данные в таблице зависят только от одного поля ключа, для нормализации их надо выносить в отдельную таблицу.
Слайд 5

Третья нормальная форма Третья нормальная форма требует, чтобы каждый неключевой элемент

Третья нормальная форма

Третья нормальная форма требует, чтобы каждый неключевой элемент таблицы

зависел только от ключа, и ни от каких других элементов таблицы
Слайд 6

Четвертая нормальная форма Четвертая нормальная форма требует, чтообы у данных не

Четвертая нормальная форма

Четвертая нормальная форма требует, чтообы у данных не было

нетривиальных многозначных зависимостей.
Например: Из наличия в базе одной строки не должно следовать наличие другой.
Слайд 7

Создание базы данных Для создания базы данных используется команда следующего вида:

Создание базы данных

Для создания базы данных используется команда следующего вида:
CREATE DATABASE

имя_базы;
Например:
CREATE DATABASE ListExpenses;
Слайд 8

Создание таблиц Общий вид запроса: CREATE TABLE имя_таблицы(имя_поля тип, имя_поля тип.....);

Создание таблиц

Общий вид запроса:
CREATE TABLE имя_таблицы(имя_поля тип, имя_поля тип.....);
Например:
CREATE TABLE expenses(
num

int,
paydate date,
receiver int,
value dec
);
Слайд 9

Типы данных Типы данных чаще всего используемые в таблицах: INT или

Типы данных

Типы данных чаще всего используемые в таблицах:
INT или INTEGER —

целочисленные данные
DEC или DECIMAL — десятичные дробные величины
CHAR или CHARACTER — строковый тип данных с фиксированной длинной
VARCHAR — строковые данные переменной длины
DATE — дата
DATETIME — дата и время
BLOB (либо TEXT или MEMO) — большой объем текстовой информации
Слайд 10

Добавление данных в таблицу Общий вид запроса INSERT INTO имя_таблицы VALUES(значение1,

Добавление данных в таблицу

Общий вид запроса
INSERT INTO имя_таблицы VALUES(значение1, значение2, значение3...)
Например
INSERT

INTO expenses VALUES(1,'2011-5-10', 1,2000.0);
Слайд 11

Выборка из базы Общий вид SELECT имена_полей FROM имя таблицы; Например,

Выборка из базы

Общий вид
SELECT имена_полей FROM имя таблицы;
Например, для таблицы расходов:
SELECT

num,paydate,value,receiver FROM expenses;
После SELECT перечисляются интересующие поля. Если все – указывается звездочка
Слайд 12

Фильтрация запросов Если необходимо получить только данные удовлетворяющие определенному условию к

Фильтрация запросов

Если необходимо получить только данные удовлетворяющие определенному условию к запросу

добавляется условие с помощью ключевого слова WHERE
SELECT * FROM expenses WHERE value >= 20000;
Слайд 13

Операторы условий В условиях могут использоваться операторы больше, меньше, больше либо

Операторы условий

В условиях могут использоваться операторы больше, меньше, больше либо равно,

меньше либо равно, которые записываются соответственно: < , > , <= ,>=
Оператор не равно <>
Также можно использовать логические операторы and и or
Слайд 14

Упорядочивание результатов Можно выстраивать результаты по возрастанию либо убыванию по одному

Упорядочивание результатов

Можно выстраивать результаты по возрастанию либо убыванию по одному или

нескольким полям. Для этого используется ключевое слово ORDER BY
SELECT * FROM expenses ORDER BY value;
Если необходимо использовать несколько полей, они перечисляются через запятую.
Слайд 15

Запрос к нескольким таблицам Запрос к нескольким таблицам сразу записывается следующим

Запрос к нескольким таблицам

Запрос к нескольким таблицам сразу записывается следующим образом:
SELECT

paydate,value,name FROM expenses,receivers WHERE receiver=receivers.num;
Все используемые таблицы перечисляются в разделе FROM, плюс, если таблицы связаны между собой, связь надо поместить в виде условия в раздел WHERE. Если этого не сделать результат будет содержать все возможные комбинации записей этих двух таблиц.
Слайд 16

Изменения данных таблицы Общий вид запроса: UPDATE имя_таблицы SET имя_столбца=значение, имя_столбца=значение...

Изменения данных таблицы

Общий вид запроса:
UPDATE имя_таблицы SET имя_столбца=значение, имя_столбца=значение... WHERE имя_столбца=значение;
условие

WHERE не является обязательным для этой команды, но если его пропустить, будут изменены все записи таблицы.
Слайд 17

Удаление записей таблицы Общий вид запроса: DELETE FROM имя_таблицы WHERE имя_столбца=значение;

Удаление записей таблицы

Общий вид запроса:
DELETE FROM имя_таблицы WHERE имя_столбца=значение;
Как и в

случае обновления, если не использовать WHERE будут удалены все поля таблицы.
Слайд 18

Удаление таблиц Общий вид команды DROP TABLE имя_таблицы Аналогично удаляется база данных целиком: DROP DATABASE имя_базы

Удаление таблиц

Общий вид команды
DROP TABLE имя_таблицы
Аналогично удаляется база данных целиком:
DROP DATABASE

имя_базы
Слайд 19

Псевдонимы таблиц Псевдонимы или «алиасы» таблиц позволяют сократить запись имен таблиц.

Псевдонимы таблиц

Псевдонимы или «алиасы» таблиц позволяют сократить запись имен таблиц.
Select paydate,value,name

FROM expences, reseivers rs WHERE receiver=rs.num
Слайд 20

Отбор уникальных строк Select distinct value,name FROM expences, reseivers rs WHERE receiver=rs.num

Отбор уникальных строк

Select distinct value,name FROM expences, reseivers rs WHERE receiver=rs.num

Слайд 21

Агрегатные функции Count() Функция осуществляющая подсчет строк Select count(*)from expenses В

Агрегатные функции

Count()
Функция осуществляющая подсчет строк
Select count(*)from expenses
В качестве аргумента можно также

указать имя поля, в этом случае будет подсчитано количество непустых значений
Count(distinct имя_поля) считает кол-во уникальных значений
Слайд 22

Агрегатные функции min(имя_поля) Max(имя_поля) Вычисление максимального и минимального значений поля Sum(имя_поля) Вычисление суммы значений полей

Агрегатные функции

min(имя_поля)
Max(имя_поля)
Вычисление максимального и минимального значений поля
Sum(имя_поля)
Вычисление суммы значений полей

Слайд 23

Группировка Select paydate,value,name FROM expenses, receivers rs WHERE receiver=rs.num group by

Группировка

Select paydate,value,name FROM expenses, receivers rs WHERE receiver=rs.num group by name
Select

count(*),name FROM expenses, receivers rs WHERE receiver=rs.num group by name
Слайд 24

Ограничение количества строк Select paydate,value,name FROM expenses, receivers rs WHERE receiver=rs.num limit 0,5

Ограничение количества строк

Select paydate,value,name FROM expenses, receivers rs WHERE receiver=rs.num limit

0,5
Слайд 25

Подзапросы Select paydate,value,name FROM expenses, receivers WHERE value=(select max(value) from expenses)

Подзапросы

Select paydate,value,name FROM expenses, receivers WHERE value=(select max(value) from expenses)
Select name,

(select count(*) from expenses where receiver=r.num) FROM receivers r
Слайд 26

Основы JDBC JDBC – технология, позволяющая программе на Java взаимодействовать с

Основы JDBC

JDBC – технология, позволяющая программе на Java взаимодействовать с СУБД.

Обычно работа происходит в несколько стадий:
Загрузка драйвера.
Создание URL соединения
Установка соединения
Создание объекта запроса
Выполнение запроса
Получение результатов
Закрытие соединения.
Слайд 27

Как правило драйвер поставляется в виде jar-файла. Такой файл должен лежать

Как правило драйвер поставляется в виде jar-файла. Такой файл должен лежать

в каталоге, присутсвующем в CLASSPATH
Загрузка осуществляется следующим образом:
try { Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException cnfe) {
System.out.println("Error loading driver: " +cnfe);
}
В данном случае подключается драйвер для работы с MySQL

Загрузка драйвера

Слайд 28

Создание URL URL подключения может различаться в разных СУБД. Для MySQL

Создание URL

URL подключения может различаться в разных СУБД. Для MySQL он

будет выглядеть так:
jdbc:mysql://адрес_сервера:порт/ имя_базы
Например:
jdbc:mysql://localhost:3306/ ListExpenses
Слайд 29

Установка соединения Для установки соединения следует создать объект класса Connection с

Установка соединения

Для установки соединения следует создать объект класса Connection с помощью

метода getConnection класса DriverManager
Connection myConnection;
myConnection = DriverManager.getConnection( dbURL,username,password);
Слайд 30

Создание объекта запроса Для создания объекта запроса следует воспользоваться методом createStatement

Создание объекта запроса

Для создания объекта запроса следует воспользоваться методом createStatement объекта

класса Connection
Statement statement = myConnection.createStatement();
Слайд 31

Выполнение запроса Для выполнения запроса SELECT используется метод executeQuery: statement.executeQuery(query); Для

Выполнение запроса

Для выполнения запроса SELECT используется метод executeQuery:
statement.executeQuery(query);
Для запросов изменяющих данные

или саму базу используется метод executeUpdate
Слайд 32

Поучение данных Метод executeQuery возвращает объект класса ResultSet ResultSet result =

Поучение данных

Метод executeQuery возвращает объект класса ResultSet
ResultSet result = statement.executeQuery(query);
Для извлечения

данных следует воспользоваться методом next для получения очередной записи, и getString(номер_поля) для получения значения конкретного поля прочитанной записи.
Для нестроковых типов можно использовать аналогичные методы, например getDouble.
Слайд 33

Прекомпилированные запросы Для прекомпилированных запросов создаются специальные запросы, в которых вместо

Прекомпилированные запросы

Для прекомпилированных запросов создаются специальные запросы, в которых вместо меняющихся

значений ставятся знаки вопросов:
String template = "SELECT * from expenses where value > ?";