Простейшие конструкции языка SQL Дмитрий Барашев 13 сентября 2016 г. Computer Science Center
Простейшие конструкции языка SQL
Дмитрий Барашев13 сентября 2016 г.
Computer Science Center
Этот материал распространяется под лицензией
Creative Commons”Attribution - Share Alike” 3.0
http://creativecommons.org/licenses/by-sa/3.0/us/deed.ru
сверстано в онлайн LATEX редакторе Папирия
P
a
peeriapapeeria.com
Реляционная СУБД
Язык SQL
Создание и удаление таблиц
3/25
• Каждому нетривиальному приложению нужногде-то хранить настройки и пользовательскиеданные
• Сложность системы хранения варьируется
4/25
• Простое приложение и мало данных:plaintext/json/XML/CSV файл, читается полностьюв память, целиком перезаписывается приобновлениях
• Два приложения, читающие данные одногоформата: библиотека для чтения/записи
• Рост количества данных и конкурентный доступ:дробление данных на файлы, какие-топримитивы синхронизации
• Конкурентный доступ с разных машин: созданиесервера, управляющего данными
• Сервер предоставляет пользователям модельданных и язык запросов 5/25
• Реляционная СУБД – система управления базамиданных, состоящих из таблиц
6/25
• Основной элемент – таблица• У таблицы есть схема: имя и набор столбцов• У столбца есть имя (уникальное в пределахтаблицы) и тип данных
• Когда вы создаёте таблицу, вы определяете еёсхему
• Данные хранятся в строках таблицы
7/25
• Схема таблицы – определение класса• Строка таблицы – объект, экземпляр класса
8/25
• Схема – пространство имён таблиц• База данных – совокупность таблиц и схем• Кластер или экземпляр – совокупность базданных под управлением одного сервера
9/25
• Пользователи определяются для всего сервера• Пользователь может иметь или не иметь права надоступ и модификацию каких-то объектов
• Суперпользователи могут управлять правамидругих пользователей
10/25
• Открытые: MySQL, PostgreSQL, SQLite• Коммерческие: Oracle, IBM DB2, Microsoft SQLServer
• Тыщи их¹• Мы используем PostgreSQL
¹https://en.wikipedia.org/wiki/Comparison_of_relational_database_management_systems
11/25
• sudo apt-get install postgresql
• Инсталлятор для Windows• Докеровский образ:https://hub.docker.com/_/postgres/
12/25
• Создание базы данных и пользователя вPostgreSQL
13/25
Реляционная СУБД
Язык SQL
Создание и удаление таблиц
14/25
• «Стандартизован» несколькими версиямистандартов, нумерованных годом (SQL-2011 самыйсвежий) и несколькими уровнями поддержки
• Реализации стандартов такие реализации• Диалекты SQL – сильно схожи, но у каждой естькакое-нибудь существенное отличие от других.Начиная с того, как реализован boolean
15/25
Реляционная СУБД
Язык SQL
Создание и удаление таблиц
16/25
• Целочисленные: INTEGER, BIGINT, SMALLINT
• Вещественные с фиксированной точкой:NUMERIC, DECIMAL
• Вещественные с плавающей точкой: FLOAT,REAL, DOUBLE PRECISION
• Строковые: CHARACTER, CHARACTER VARYING,CLOB
• Дата и время: DATE, TIME, TIMESTAMP
• Булевский: BOOLEAN
17/25
Простая версия. Полная версия в документацииПостгреса²
CREATE TABLE table_name (<column_list>);
column_list := <column_def>[, ...]
column_def :=column_name <data_type> [<column_constraint>]
data_type := INTEGER | BIGINT | FLOAT | ...
DROP TABLE table_name;
²https://www.postgresql.org/docs/current/static/sql-createtable.html 18/25
1 CREATE TABLE Foo();2 CREATE TABLE FooBar(INTEGER);3 CREATE TABLE Baz(id INTEGER, value FLOAT,);
19/25
• Создание таблицы• Повторное создание таблицы• Удаление таблицы• Изменение схемы методом «удали и создай»
20/25
1 INSERT INTO Foo(id, value) VALUES (1, 100);2 INSERT INTO Foo(value, id) VALUES (200, 2), (300, 3);
21/25
Основная конструкция в SQL-запросах:SELECT-FROM-WHERE
1 SELECT * FROM Foo WHERE id=1;2 SELECT id FROM Foo WHERE value<300;
Операторы сравнения: =, !=, <>, <, >, <=. >=
Логические операторы: AND, OR, NOT
22/25
Допустим, значения каких-то атрибутов намнеизвестны
1 CREATE TABLE Student(id INT, name TEXT, age INT);2 INSERT INTO Student(id, name, age)3 VALUES (1, ’Bob’, 21), (2, ’Alice’, NULL);4 SELECT * FROM Student WHERE age<>21;5
23/25
1 SELECT NULL=1;2 SELECT NULL!=1;3 SELECT NULL=NULL;4 SELECT NULL != NULL;
24/25
1 SELECT NULL IS NULL;
25/25