4-
laboratoriya ishi
SQL tilida cheklovlar turlari va oʻrnatish vositalaridan foydalanib
masalalar yechish
Ishdan maqsad:
ma‘lumotlar bazasini boshqarish dasturiy vositasi
yordamida ma‘lumotlarni qayta ishlash, tahrirlash koʻnikmalariga ega
boʻlish.
Masalaning qoʻyilishi:
ma‘lumotlar bazasini boshqarish vositalari
yordamida ma‘lumotlarni qayta ishlash.
Uslubiy koʻrsatmalar
: SQL tili operatorlarni erkin formatda yozishini
ta'minlaydi. Buning ma‘nosi, operatorlar elementlarini yozilishi ekrandan
fiksirlangan joylarga bogʻliq emas. Komanda strukturasi bir qancha kalit
xizmatchi soʻzlar bilan beriladi, masalan:
ALTER(
изменять-oʻzgartirish
)
INSERT
(вставка-qoʻyish)
SELECT
(выбрать-ajratib olish)
SQL operatori xizmatchi soʻzlar va foydalanuvchi qoʻllaydigan
soʻzlardan tashkil topadi.
Mavjud jadvalni oʻzgartirish, xususan, ustunlarni qoʻshish yoki olib
tashlash, ustunlar turini oʻzgartirish va hokazolar odatiy hol emas. Ya'ni
jadvalning ta'rifini oʻzgartirishingiz kerak boʻladi. Buning uchun quyidagi
rasmiy sintaksisga ega ALTER TABLE ifodasidan foydalaning:
1.
2.
3.
4.
5.
6.
7.
ALTER
TABLE
название_таблицы
{
ADD
название_столбца
тип_данных_столбца
[ограничения_столбца] |
DROP
COLUMN
название_столбца |
ALTER
COLUMN
название_столбца параметры_столбца |
ADD
[CONSTRAINT] определение_ограничения |
DROP
[CONSTRAINT] имя_ограничения}
Keling, jadvalni oʻzgartirishning ba'zi imkoniyatlarini koʻrib chiqaylik.
Yangi ustun qoʻshish
Mijozlar jadvaliga yangi "Telefon" ustunini qoʻshamiz:
1.
2.
ALTER
TABLE
Customers
ADD
Phone CHARACTER
VARYING(20) NULL;
Bu yerda Telefon ustuni CHARACTER VARYING (20) turida boʻlib,
uning uchun NULL atributi aniqlangan, ya‘ni ustun null boʻladi. Agar null
44
boʻlmasligi kerak boʻlgan ustun qoʻshishimiz kerak boʻlsa-chi? Agar
jadvalda ma‘lumotlar mavjud boʻlsa, quyidagi buyruq bajarilmaydi:
1.
2.
ALTER
TABLE
Customers
ADD
Address CHARACTER
VARYING(30) NOT
NULL;
Shuning uchun, bu holda, yechim DEFAULT atributi orqali standart
qiymatni oʻrnatishdir:
1.
2.
3.
ALTER
TABLE
Customers
ADD
Address CHARACTER
VARYING(30) NOT
NULL
DEFAULT
'Неизвестно';
Ustunni oʻchirish
Mijozlar jadvalidan Manzil ustunini olib tashlaymiz:
1.
2.
ALTER
TABLE
Customers
DROP
COLUMN
Address;
Ustun turini oʻzgartirish
Turni oʻzgartirish uchun TYPE kalit soʻzi ishlatiladi. Mijozlar
jadvalidagi FirstName ustunining ma‘lumotlar turini VARCHAR (50) ga
oʻzgartiramiz (aka VARYING CHARACTER (50)):
1.
2.
ALTER
TABLE
Customers
ALTER
COLUMN
FirstName TYPE VARCHAR(50);
Ustun cheklovlarini oʻzgartirish
Cheklov qoʻshish uchun SET iborasidan keyin cheklovdan foydalaning.
Masalan, FirstName ustuni uchun NOT NULL cheklovini oʻrnatamiz:
1.
2.
3.
ALTER
TABLE
Customers
ALTER
COLUMN
FirstName
SET
NOT
NULL;
Cheklovni olib tashlash uchun DROP operatoridan keyin cheklovdan
foydalaning. Masalan, yuqoridagi cheklovni olib tashlaymiz:
1.
2.
3.
ALTER
TABLE
Customers
ALTER
COLUMN
FirstName
DROP
NOT
NULL;
45
Jadval cheklovlarini oʻzgartirish
CHECK cheklovini qoʻshish:
1.
2.
ALTER
TABLE
Customers
ADD
CHECK
(Age > 0);
PRIMARY KEY asosiy kalitini qoʻshish:
1.
2.
ALTER
TABLE
Customers
ADD
PRIMARY
KEY
(Id);
Bunday holda, jadvalda PRIMARY KEY chekloviga ega boʻlmagan Id
ustuni allaqachon mavjud deb taxmin qilinadi. Va yuqoridagi skript
yordamida PRIMARY KEY cheklovi oʻrnatiladi.
UNIQUE cheklovini qoʻshish - elektron pochta ustuni uchun noyob
qiymatlarni belgilang:
1.
2.
ALTER
TABLE
Customers
ADD
UNIQUE
(Email);
Cheklov qoʻshsangiz, ularning har biriga ma‘lum nom beriladi.
Masalan,
CHECK
uchun
yuqorida
qoʻshilgan
cheklov
customer_age_check deb nomlanadi. Cheklovlarning nomlarini pgAdmin
orqali jadvalda koʻrish mumkin.
CONSTRAINT iborasi yordamida cheklovni qoʻshganda, biz ham aniq
nom berishimiz mumkin.
1.
2.
ALTER
TABLE
Customers
ADD
CONSTRAINT
phone_unique UNIQUE
(Phone);
Bunday holda, cheklov "telefon_unique" deb nomlanadi.
Cheklovni olib tashlash uchun siz uning nomini bilishingiz kerak, bu
DROP CONSTRAINT ifodasidan keyin belgilanadi. Masalan, yuqoridagi
qoʻshilgan cheklovni olib tashlaymiz:
1.
2.
ALTER
TABLE
Customers
DROP
CONSTRAINT
phone_unique;
Ustun va jadval nomini oʻzgartirish
Manzil ustunining nomini Shaharga oʻzgartiring:
46
1.
2.
ALTER
TABLE
Customers
RENAME COLUMN
Address TO
City;
Mijozlar jadvalini Foydalanuvchilar deb oʻzgartiring:
1.
2.
ALTER
TABLE
Customers
RENAME TO
Users;
Ma‘lumotlarni qoʻshish uchun quyidagi rasmiy sintaksisga ega boʻlgan
INSERT buyrugʻi ishlatiladi:
1.
2.
INSERT
INTO
имя_таблицы (столбец1, столбец2, ...
столбецN)
VALUES
(значение1, значение2, ... значениеN)
INSERT INTO - jadval nomidan soʻng, siz ma‘lumotlarni
qoʻshishingiz kerak boʻlgan vergul bilan ajratilgan barcha ustunlar qavs
ichida koʻrsatilgan. Va oxirida, VALUES soʻzidan keyin qoʻshilgan
qiymatlar qavs ichida keltirilgan.
Aytaylik, bizning ma‘lumotlar bazamizda quyidagi talitsa mavjud:
1.
2.
3.
4.
5.
6.
7.
8.
CREATE
TABLE
Products
(
Id SERIAL PRIMARY
KEY,
ProductName VARCHAR(30) NOT
NULL,
Manufacturer VARCHAR(20) NOT
NULL,
ProductCount INTEGER
DEFAULT
0,
Price NUMERIC
);
INSERT buyrugʻi yordamida unga bitta qator qoʻshamiz:
1.
INSERT
INTO
Products VALUES
(1, 'Galaxy S9',
'Samsungʻ, 4, 63000)
pgAdmin-da muvaffaqiyatli bajarilgandan soʻng, xabar maydonida
"INSERT 0 1" xabari paydo boʻlishi kerak:
47
4.1-rasm. SQL soʻrovlar oynasi
Shuni yodda tutish kerakki, VALUES kalit soʻzidan keyin qavs
ichidagi ustunlar uchun qiymatlar e'lon qilingan tartibda uzatiladi.
Masalan, yuqoridagi CREATE TABLE bayonotida siz birinchi ustun Id
ekanligini koʻrishingiz mumkin, shuning uchun bu ustunga 1 raqami
beriladi. Ikkinchi ustun mahsulot nomi deb ataladi, shuning uchun ikkinchi
qiymat, "Galaxy S9" qatori boʻladi. bu alohida ustunga oʻtdi va hokazo.
Ya'ni, qiymatlar ustunlarga quyidagicha uzatiladi:
Id: 1
Mahsulot nomi: "Galaxy S9"
Ishlab chiqaruvchi: "Samsung"
Mahsulotlar soni: 4
Narxi: 63000
Bundan tashqari, qiymatlarni kiritishda siz qiymatlar qoʻshiladigan
bevosita ustunlarni belgilashingiz mumkin:
1.
2.
INSERT
INTO
Products
(ProductName,
Price,
Manufacturer)
VALUES
('iPhone X', 71000, 'Apple');
Bu erda qiymat faqat uchta ustun uchun koʻrsatilgan. Va endi qiymatlar
ustunlar tartibida oʻtkaziladi:
Mahsulot nomi: iPhone X
Ishlab chiqaruvchi: "Apple"
Narxi: 71000
48
Id ustuni uchun qiymat ma‘lumotlar bazasi tomonidan avtomatik
ravishda yaratiladi, chunki u Seriya turini ifodalaydi. Ya'ni, oxirgi satrdagi
qiymatga bittasi qoʻshiladi.
Qolgan ustunlar uchun DEFAULT atributi (masalan, ProductCount
ustuni uchun) NULL oʻrnatilgan boʻlsa, standart qiymat qoʻshiladi.
Bunday holda, aniqlanmagan ustunlar (Serial tipidagilar bundan mustasno)
null boʻlishi yoki DEFAULT atributiga ega boʻlishi kerak.
Agar birinchi misoldagi kabi maxsus ustunlar koʻrsatilmagan boʻlsa,
jadvaldagi barcha ustunlar uchun qiymatlarni oʻtkazishimiz kerak.
Biz bir vaqtning oʻzida bir nechta qatorlarni qoʻshishimiz mumkin:
1.
2.
3.
4.
5.
6.
INSERT
INTO
Products (ProductName, Manufacturer,
ProductCount, Price)
VALUES
('iPhone 6', 'Apple', 3, 36000),
('Galaxy S8', 'Samsungʻ, 2, 46000),
('Galaxy S8 Plus', 'Samsungʻ, 1, 56000)
Bunday holda, jadvalga uchta qator qoʻshiladi.
Qaytariladigan qiymatlar
Agar biz ustunlarning faqat bir qismi uchun qiymatlarni qoʻshsak,
boshqa ustunlar qanday qiymatlarga ega boʻlishini bilmasligimiz mumkin.
Masalan, Id ustuni mahsulot uchun qanday qiymatga ega boʻladi?
RETURNING operatori yordamida biz ushbu qiymatni olishimiz mumkin:
1.
2.
3.
4.
5.
INSERT
INTO
Products
(ProductName,
Manufacturer,
ProductCount,
Price)
VALUES('Desire
12',
'HTC',
8,
21000)
RETURNING id;
49
4.2-rasm. SQL soʻrovlar oynasida yozilishi
Ma‘lumotlar bazasidan ma‘lumotlarni olish uchun SELECT
buyrugʻidan foydalaning. Soddalashtirilgan shaklda u quyidagi sintaksisga
ega:
1.
SELECT
список_столбцов FROM
имя_таблицы
Masalan, siz avvalroq ―Mahsulotlar‖ jadvalini yaratdingiz va unga
dastlabki maʼlumotlarni qoʻshdingiz deylik:
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
CREATE
TABLE
Products
(
Id SERIAL PRIMARY
KEY,
ProductName VARCHAR(30) NOT
NULL,
Manufacturer VARCHAR(20) NOT
NULL,
ProductCount INTEGER
DEFAULT
0,
Price NUMERIC
);
INSERT
INTO
Products (ProductName, Manufacturer,
ProductCount, Price)
VALUES
('iPhone X', 'Apple', 3, 36000),
('iPhone 8', 'Apple', 2, 41000),
('Galaxy S9', 'Samsungʻ, 2, 46000),
('Galaxy S8 Plus', 'Samsungʻ, 1, 56000),
('Desire 12', 'HTC', 5, 28000);
50
Keling, ushbu jadvaldagi barcha ob'ektlarni olamiz:
1.
SELECT
* FROM
Products;
Yulduzcha * barcha ustunlarni olishni xohlayotganimizni bildiradi.
4.3-rasm. Select soʻrovining ishlatilishi
Biroq, yulduzcha * belgisidan foydalanish yaxshi amaliyot
hisoblanmaydi, chunki odatda barcha ustunlar kerak emas. Va yaxshiroq
yondashuv SELECT soʻzidan keyin barcha kerakli ustunlarni sanab
oʻtishdir. Jadvalning mutlaqo barcha ustunlari boʻyicha ma‘lumotlarni
olishingiz kerak boʻlgan holatlar bundan mustasno. Bundan tashqari, aniq
ustun nomlari noma‘lum boʻlgan holatlarda * belgisidan foydalanish
afzalroq boʻlishi mumkin.
Agar biz hamma uchun emas, balki ba'zi bir ustunlar uchun
ma‘lumotlarni olishimiz kerak boʻlsa, unda barcha ustunlar SELECTdan
keyin vergul bilan ajratilgan holda keltirilgan:
1.
SELECT
ProductName, Price FROM
Products;
51
4.4-rasm. Select soʻrovining ishlatilishi
Ustun spetsifikatsiyasi uning nomini ifodalashi shart emas. Bu har
qanday ifoda boʻlishi mumkin, masalan, arifmetik amalning natijasi.
Shunday qilib, keling, quyidagi soʻrovni bajaramiz:
1.
2.
SELECT
ProductCount,
Manufacturer,
Price
*
ProductCount
FROM
Products;
Bu yerda tanlov uchta ustun hosil qiladi. Bundan tashqari, uchinchi
ustun Narx ustunining qiymatini ProductCount ustunining qiymatiga, ya'ni
mahsulotning umumiy qiymatiga koʻpaytiradi.
AS operatori yordamida siz chiqish ustunining nomini oʻzgartirishingiz
yoki uning taxalluslarini belgilashingiz mumkin:
1
2
3
4
SELECT
ProductCount AS
Title,
Manufacturer,
Price * ProductCount AS
TotalSum
FROM
Products;
Bunday holda, tanlov natijasi 3 ta ustun uchun ma‘lumotlardir. Birinchi
ustun Sarlavha taxallus bilan belgilanadi, lekin aslida u Mahsulot nomi
ustunini ifodalaydi. Ikkinchi ustun oʻz nomini saqlab qoladi - Ishlab
chiqaruvchi. Uchinchi ustun, TotalSum, ProductCount va Price ustunlari
52
mahsulotini saqlaydi.
4.5-rasm. Select soʻrovining ishlatilishi
|