JavaRush /Курсы /Модуль 4. Работа с БД /Работа с SQL-сервером

Работа с SQL-сервером

Модуль 4. Работа с БД
6 уровень , 0 лекция
Открыта

SQL наше все

Как ты уже, наверное, догадываешься, все команды SQL-серверу можно давать посредством SQL-запросов. Абсолютно все.

Эти команды официально разбиты на 4 группы:

  • операторы определения данных (Data Definition Language, DDL):

    • CREATE создаёт объект базы данных (саму базу, таблицу, представление, пользователя и так далее)
    • ALTER изменяет объект
    • DROP удаляет объект
  • операторы манипуляции данными (Data Manipulation Language, DML):

    • SELECT выбирает данные, удовлетворяющие заданным условиям
    • INSERT добавляет новые данные
    • UPDATE изменяет существующие данные
    • DELETE удаляет данные
  • операторы определения доступа к данным (Data Control Language, DCL):

    • GRANT предоставляет пользователю (группе) разрешения на определённые операции с объектом
    • REVOKE отзывает ранее выданные разрешения
    • DENY задаёт запрет, имеющий приоритет над разрешением
  • операторы управления транзакциями (Transaction Control Language, TCL):

    • COMMIT применяет транзакцию
    • ROLLBACK откатывает все изменения, сделанные в контексте текущей транзакции
    • SAVEPOINT делит транзакцию на более мелкие участки

И первые два уровня мы изучали только разновидности оператора SELECT. Представь, сколько всего интересного ждет нас в будущем.

Но мы тут говорим в первую очередь про Java-программистов, поэтому будем изучать те сценарии, с которыми ты точно столкнешься на работе.

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

Более того, иногда твой код будет записывать в базу не все данные или записывать их не так, так что тебе придется частенько лазить в нее ручками и смотреть, а что же там все-таки хранится по факту.

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

Создание схемы в базе данных

Чтобы создать в СУБД новую схему, нужно выполнить команду:


CREATE SCHEMA имя;

Это самый простой вариант. Так же при создании новой схемы можно указать формат кодировки данных и другие параметры.

Если ты хочешь удалить схему, но не уверен, что она существует, то нужно выполнить команду:


DROP SCHEMA IF EXISTS имя;

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

Выбор текущей схемы

Если у вас в СУБД много схем, то легко может возникнуть ситуация, когда в разных схемах есть одинаковые таблицы. Чтобы не возникло путаницы, можно сделать две вещи:

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

Давай напишем запрос, который выберет данные из таблицы user, которая находится в схеме test. Он будет выглядеть примерно так:


SELECT * FROM test.user;

Без этого просто не обойтись, если нужно объединить (JOIN) несколько таблиц из разных схем в одном запросе.

Кстати, в языке Java мы часто делаем что-то похожее: если в коде нам нужно использовать классы с одинаковыми именами из разных пакетов, мы добавляем имя пакета перед именем класса.

Второй способ – это указание схемы по умолчанию. Если в запросе указано имя таблицы, но не указана схема, то используется схема по умолчанию. Для этого используется оператор USE:


USE имя-схемы;

Давай перепишем предыдущий запрос с использованием оператора USE:


             	USE test; SELECT * FROM user;

Создание View

Кроме таблиц с реальными данными SQL позволяет хранить что-то типа виртуальных таблиц, куда подтягиваются данные из реальных таблиц. Называются такие виртуальные таблицы VIEW.

Такая таблица не может хранить реальных данных, и каждый раз при обращении к ней подтягивает данные из реальных таблиц. Содержимое такой VIEW задается с помощью SQL-запроса.

Ты можешь создать VIEW из любого SELECT запроса с помощью команды вида:


             	CREATE VIEW имя AS
SELECT-запрос;
Давай напишем запрос, который создаст нам виртуальную таблицу public_employee на основе таблицы employee, где будет скрыта информация о зарплате сотрудников:

 	CREATE VIEW public_employee AS
 	SELECT id, name FROM employee

В приведенном примере наша таблица (VIEW) public_employee будет содержать только ID сотрудников и их имена, но не информацию об их зарплате. Использовать такие View можно там же, где и реальные таблицы.

Зачем нужны View? У них есть ряд преимуществ:

Гибкое управление доступом к информации. Ты можешь дать определенным пользователям доступ только ко VIEW, но не давать доступ к таблицам. А во View вынести только публичную информацию из таблиц. Кроме того, если в будущем в таблицы будут добавлены новые колонки с важной информацией, она случайно не попадет во View.

Денормализация данных. Для удобства хранения данные часто разбиваются по сотням и тысячам таблиц, но с такими данными не сильно удобно работать обычному человеку – приходится писать слишком сложные запросы. С помощью View можно создать виртуальные таблицы, которые будут отображать данные из десятков различных таблиц в виде одной таблицы.

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

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

1
Задача
Модуль 4. Работа с БД, 6 уровень, 0 лекция
Недоступна
task0601
В данной задаче тебе потребуется: 1. Используя оператор USE обратиться к базе данных с названием test_db.
1
Задача
Модуль 4. Работа с БД, 6 уровень, 0 лекция
Недоступна
task0602
В данной задаче тебе потребуется: 1. Используя оператор USE обратиться к базе данных с названием shop.
1
Задача
Модуль 4. Работа с БД, 6 уровень, 0 лекция
Недоступна
task0603
В данной задаче тебе потребуется: 1. Используя оператор VIEW, создать виртуальную таблицу с названием all_users, которая будет основана на всех колонках таблицы test.
Комментарии (11)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Anonymous #3550308 Уровень 2
22 февраля 2025
Видимо, IF EXISTS вместо IF EXIST, опечатка.
Александр Уровень 112
26 января 2025
View можно задать только запросом вида SELECT, поэтому работа с View никак не может поменять данные в реальных таблицах. Вот тут либо не совсем корректно написано, либо я чего-то не понимаю, данные в таблицах через вью спокойно же можно изменить.

CREATE VIEW public_employee AS
SELECT id, name FROM employee
вот так вполне нормально сработает, и поменяет данные в таблице

update public_employee 
set name = 'test'
where id = 5
Behzod Komilov Уровень 115
3 сентября 2025
при этом employee не изменится
Александр Уровень 112
26 сентября 2025
ну Вы сразу проверьте, а потом пишите комментарий :)
Олег Уровень 106 Expert
24 сентября 2024
Всё понятно.
Anonymous #3278550 Уровень 1
6 июня 2023
Для кого доступны задачи по SQL? есть ли еще разделы которые недоступны/скрыты по премиум подписке?
Зепп Бранниган Уровень 41 Moderator
6 июня 2023
Они доступны для студентов Университета.
The_Red_Baron43 Уровень 31
13 июня 2023
Для учащихся с простым премиумом недоступны задачи?
Зепп Бранниган Уровень 41 Moderator
14 июня 2023
Верно.
9 февраля 2023
"Только чтение. View можно задать только запросом вида SELECT" - на самом деле это не совсем так однозначно.
Сергей Уровень 111 Expert
15 декабря 2022
В задаче task0603 в конце запроса поставьте точку с запятой, иначе не пропустит валидатор.