22
3 SQL тілі
3.1 Кіріспе
PostgreSQL тілінің мүмкіндіктерінің кейбіреуі стандарт кеңейтілуі бола
тұра, SQL туралы, melt93 және date97 қосқанда, көптеген кітаптар жазылған.
Келесі мысалдарда mydb деректер қоры құрылып және psql іске қосылды деп
есептейміз. Басқа мысалдар PostgreSQL каталогындағы (src/tutorial/) бастапқы
код пакетінде көруге болады.
(PostgreSQL орындаулы код дистрибутивтары осы файлдарды қоспауы
мүмкін.)
Бұл файлдарды қолдану үшін каталогқа өтіп make жүзеге асыру керек:
$cd ..../src/tutorial$make
Осы амал орындалған кезде пайдаланушы типі мен функциялары бар С
модулі құрастырылып және скриптар құрылады. Содан кейін жұмысты бастау
үшін келесі команданы орындау керек:
$cd ..../tutorial$psql -s mydb...mydb=>\i basics.sql
\i командасы берілген файлдан командаларды оқыйды және орындайды.
Psql берілген – s параметрі серверге әрбір оператор жібергеннен кейін кідірген
кезде оны қадамдық режимге ауыстырады. Қолданған командалар basics.sql
файлда орналасқан.
3.2 Негізгі түсініктер
PostgreSQL – деректер қорын басқарудың реляционды жүйесі (ДҚБРЖ).
Бұл деректер қорын басқару жүйесі қарым-қатынастар ретінде (relation)
берілгенін білдіреді. Қарым-қатынас
кестенің математикалық анық
белгілеуі. Мәліметтерді кестеде сақтау бүгінгі таңда кең тараған, деректер
қорын ұйымдастырудың көптеген тәсілдері барына қарамастан бұл айқын
шешім сияқты. Мысалы, Unix сияқты операциялық жүйелерде файлдар мен
каталогтар иерархиялық деректер қорын құрады, ал қазіргі таңда объектілі-
бағытталған деректер қоры белсенді дамуда. Кез келген кесте атаулы
қатарлардан тұрады. Кестенің барлық қатарлары бірдей атаулы бағандары бар,
тағы әрбір қатарға белгілі бір мәліметтер типін тағайындалады. Бағандар реті
қатарда тұрақталғанымен, SQL кестеде қатардардың ретін сақталуына кепілдік
жасамайтынын есте сақтау керек (алайда оларды енгізу кезінде сұрыптауға
болады).
Кестелер деректер қорында бірлеседі, ал PostgreSQL сервер данасының
бірі басқаратын деректер қор жиынтығы деректер қор кластерін құрады.
3.3
Кесте құру
Кестенің атын, бағандарының аты мен типін тізіп кесте құруға болады.
23
CREATE TABLE weather (
city varchar(70),
temp_lo int, -- тәуліктегі минималды температура
temp_hi int, -- тәуліктегі максималды температура
prcp real, -- жауын-шашын деңгейі
date date
);
Жоғарыдағы барлық мәтінді қатарды таңба ауыстырумен psql енгізуге
болады. Psql команда ; жеткенге дейін жалғасатынын түсінеді.
SQL командаларында бос орын таңбаларын (бос орын, табуляция және
жол аудармалары) еркін қолдануға болады. Бұл пайдаланушы команданы
басқаша туралап немесе тіпті бір қатарда орналастырып енгізуге болатынын
білдеріді. Екі минус («--») түсіндірме басталғанын білдіреді. Осы таңбадан
кейін
жазылғанның
бәрі
ескерілмейді.
SQL
кілтті
сөздер
мен
идентификаторлар кезінде регистрге сезімтал емес, бірақ ерекшелік ретінде
бағамға алынған идентификаторлар алынады.
varchar(70) 70 таңбаға жететін ұзындықты қарапайым таңбалық қатарды
сақтайтын мәліметтер типін анықтайды.
int – қарапайым бүкілсандық тип. real – өзгермелі нүктесі бар бір
дәлдікті сандар сақтауға арналған тип. date – мезгіл типі. (Ия, date типті қатар
date деп аталады. Бұл ыңғаайлы болуы мүмкін немесе адастыруы да шамалы –
қалай қарағанға байланысты.)
PostgreSQL SQL стандартты типтерін қолдайды: int, smallint, real, double
precision, char(N), varchar(N), date, time, timestamp и interval, және де басқа да
әмбебап типтер мен геометриялық типтердің бай жиынтығы. Сонымен қатар,
өздігінен жеке мәлімет типтер жиынтығын құрып PostgreSQL бағдарламасын
кеңейтуге болады. Салдар ретінде, типтер атауы кілттік сөздер болып
табылмайды, алайда ерекшелік ретінде арнаулы SQL стандарт құрылымын
іске асыруға талап етілген жағдайды атауға болады. Келесі кесте мысалында
қала және олардың географиялық орналасуы сақталады:
CREATE TABLE cities (
name varchar(80),
location point
);
Бұл жерде point - PostgreSQL ерекше мәліметтер типінің типі. Соңында,
қандай да бір кесте керек емес немесе басқаша қайта құру керек болған
жағдайда, кестені келесі команданы қолданып жоюға болады:
DROP TABLE кесте_аты;
3.4 Кестеге қатар қосу
Кестеге қатар қосу үшін INSERT операторы қолданылады:
INSERT INTO weather VALUES ('Astana, 46, 50, 0.25, 2017-03-27');
24
Айта кететін нәрсе, барлық мәліметтер типіне шамалы анық формат
қолданылып тұр. Қарапайым сандық белгілерден басқа константалар, осы
мысал сияқты, әдетте апострофқа (') алынады. date типі шынында өте икемді
және әр түрлі форматты алады. Point типі координат жұбын енгізуді талап
етеді, мысалы осылай:
INSERT INTO cities VALUES ('Astana', '(-194.0, 53.0)');
Көрсетілген синтаксис қатар ретін есте сақтауды талап етеді. Сондай-ақ
қатарларды анық тізіп балама жазбаны қолдануға болады:
INSERT INTO weather (city, temp_lo, temp_hi, prcp, date)
VALUES ('Astana', 43, 57, 0.0, 2016-11-29');
Егер кейбір қатарларды қалдыру керек болса басқа ретпен тізуге болады,
мысалы:
INSERT INTO weather (date, city, temp_hi, temp_lo)
VALUES (2016-11-29', 'Hayward', 54, 37);
Көптеген әзірлеушілер кестедегі ретіне сену орнына кесте қатарларын
анық тізгенді қалайды.
Пайдаланушы үлкен мәліметтер көлемін қарапайым мәтіндік
файлдардан көшіре алады; ол амал үшін COPY командасы қолданылады.
Әдетте осы тәсіл жылдамырақ, өйткені COPY командасы осындай амалға
оңтайландырылған, алайда INSERT салыстырғанда икемі аздау. Мысалы:
оның мына түрде қолдануға болады:
COPY weather FROM '/home/user/weather.txt';
Бұл жерде көрсетілген файл клиенттік емес, серверлік процесс жүріп
жатқан компьютерде қолжетімді екені тұспалданады. Содан бері көрсетілген
файл тікелей серверде оқылады.
3.5
Сұраныс орындау
Кестедегі мәліметтерді алу үшін сұраныс орындау қажет. Ол үшін
SELECT SQL-операторы арналған. Оператор бірнеше бөлшектерден тұрады:
таңдамалар (алынатын қатарлар тізімі жазылады), кестелер тізімі (бұнда
мәліметтер алынатын кестелер тізімі жазылады) және міндетті емес шарттар
(анықтайтын шектеулер). Мысалы, weather кестесіндегі барлық қатарды алу
үшін келесе жолды енгізу керек:
SELECT * FROM weather;
Бұл жерде *
«барлық қатар» дегеннің қысқаша белгілеуі. Осылайша ол
төмендегі жазумен тепе-тең:
SELECT city, temp_lo, temp_hi, prcp, date
FROM weather;
Нәтижесінде келесі жазба шығу керек:
city | temp_lo | temp_hi | prcp | date
---------------+---------+---------+------+------------
San Francisco | 46 | 50 | 0.25 | 1994-11-27
San Francisco | 43 | 57 | 0 | 1994-11-29
Достарыңызбен бөлісу: |