PostgreSQL Tutorial
207 subscribers
17 photos
1 video
4 files
1 link
PostgreSQL bo'yicha bilimlar kanali.

Admin : @Mistrdev

Invite link:
https://t.me/+_cTGIsLgMGVhNzA6
Download Telegram
SELECT contacts.first_name, contacts.last_name, profession.name FROM contacts INNER JOIN profession ON contacts.profession_id = profession.id;

bu so'rov bizga ikkita table ni bir vaqtda bir-biriga bog'lash uchun xizmat qiladi.
Contacts table ning ichidan first_name, last_name ni profession table ning ichidan name ni ko'rsatadi va contacts.profession_id (ya'ni contacts tablening ichidagi profession id columni) ni INNER JOIN orqali profession ning ichidagi id ga tenglab olib malumotlarni chiqarib beradi.

SELECT c.first_name, c.last_name, p.name FROM contacts AS c LEFT OUTER JOIN profession AS p ON profession_id = p.id;

bu so'rov ham xuddi tepadigisiga o'xshaydi. Ammo bu contacts ning ichidagi profession_id ga value berilmagan bo'lsa ham chiqarib beradi birinchi so'rov esa faqat value berilganlarini chiqarib berar edi.
👍21🔥1
Media is too big
VIEW IN TELEGRAM
📹 PostgreSQL 1-dars. Kompyuterimizga Postgresni o'rnatamiz

📹720p | Uzbek tilida
Linuxda postgresql ning statusini tekshirib ko'rish 👇
sudo service postgresql status


Linuxda postgresql terminaldan o'chirib qo'yish, yoqish, qaytadan boshlash uchun komanda
sudo service postgresql start/stop/restart
👍5
Ubuntu serverdagi Postgresql ma'lumot omboridagi ma'lumotlarni oddiy sodda usulda boshqa serverga dump orqali kopiya olish
2👍1
postgresdump.txt
1.7 KB
CREATE TABLE IF NOT EXISTS "diaries" (
"id" SERIAL ,
"text" VARCHAR(500) NOT NULL,
"imageUrl" VARCHAR(1000),
"createdAt" TIMESTAMP WITH TIME ZONE NOT NULL,
"updatedAt" TIMESTAMP WITH TIME ZONE NOT NULL,
PRIMARY KEY ("id")
);



TimeStamp bilan ishlashda qiynalganingizda bemalol olib ishlatishingiz mumkin!
👍1
Assalomu alaykum, hamma salomatmi? Uygonamiz akalar bugun postgresqlga yangi extension o'rnatish va query ichida function ishlatishni koramiz nasib qilsa!
👍4
Postgre SQL da o'zimiz uchun NUMERIC, VARCHAR, TIMESTAMP, BOOLEAN va boshqa type larga o'xshagan type yaratib ko'ramiz!

Masalan bizda users table bor va unda status column bor u columnda esa active va passive valuelar bo'lishi kerak biz data create qilayotganimizda adashib boshqa value berib yubormasligimiz uchun o'zimizga quyidagicha query orqali type yaratib olamiz 👇

CREATE TYPE user_status AS ENUM ('active', 'passive');

Keyin esa misol uchun users table quyidagicha yaratiladi 👇

CREATE TABLE IF NOT EXISTS movies(
id SERIAL PRIMARY KEY,
full_name VARCHAR(200),
status USER_STATUS NOT NULL
);


Users table ning status columniga type create qilganimizda bergan nomni berib ketamiz ya'ni user_status ni!
Biz yaratgan users table dagi status columni endi faqatgina active va passive value larini qabul
qiladi.


*MISSION PASSED


Malumotlarimiz foydali bo'layotgan bo'lsa reaksiya bosing.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
Biz quyidagicha jadvalni yaratishimiz kerak 👇

user = {
id: "uuid",
phone: 998933333333,
password: "adadsfuh25235561324sdf",
full_name: "John Doe",
role: "user" // user, admin
}


Bunday holatda nima qilamiz. Bunday holatda biz PostgreSql ga o'zimizga kerakli UUID extension ni o'rnatib olamiz: 👇

CREATE EXTENSION IF NOT EXISTS "uuid-ossp";

Extension o'rnatib oldik endi bizga user ning role uchun user va admin value laridan boshqa valuelarini kiritib qo'ymasligi uchun type yaratib olamiz 👇

CREATE TYPE role_user AS ENUM ('user', 'admin');

Type ham yaratib oldik endi query yozishimiz kerak. Table create query sini quyidagicha yozamiz: 👇

CREATE TABLE IF NOT EXISTS users(
id uuid DEFAULT uuid_generate_v4(),
phone INTEGER NOT NULL ,
password TEXT NOT NULL ,
full_name VARCHAR(70),
role role_user NOT NULL,
PRIMARY KEY (id)
);


Ushbu querydagi asosiy joylari bu PRIMARY KEY id uchun biz UUID dan foydalandik va DEFAULT kiritib ketishi uchun UUID extensionning ichida 4 versiyasi func ni chaqirib ishlatib yubordik! Qolgan columnlarida esa avval yozgan querylar. Role uchun esa o'zimiz yozgan USER_ROLE type dan foydalandik!
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
hometask.sql
1.4 KB
To'liq querylar jamlangan fayl!
👍1
UPSERT

ni ko'rib chiqamiz!


Bizda shop table bor do'kon uchun! Va bizga mahsulot keldi agar u mahsulotni qo'shayotganimiz xuddi o'sha nom bilan yana bir mahsulot bazada mavjud bo'lsa bizda CONFLICT ya'ni xatolik chiqib qoladi agar o'sha mahsulot name UNIQUE (takrorlanmas) bo'lsa.

Bunday holatda biz CONFLICT chiqqan payti xatolik chiqmasligining olidini olish uchun UPSERT dan foydalanib bajaramiz!

INSERT INTO shop
(name, count, price)
VALUES
("Iphone", 15, 1500);


Ushbu query orqali item qo'shayotganimizda agar bazada Iphone mahsuloti bo'lsa va name UNIQUE bo'lsa CONFLICT yuzaga kelishi aniq. U xatolikni ushbu query orqali oldini olib ketishimiz mumkin. 👇

INSERT INTO shop
(name, count, price)
VALUES
("Iphone", 15, 1500)
ON CONFLICT (name)
DO NOTHING;


Ushbu query name column da CONFLICT yuzaga kelgan payti hech narsa qilmay shunchaki o'tkazib yuboradi, bazaga qo'shmaydi!

INSERT INTO shop
(name, count, price)
VALUES
("Iphone", 15, 1500)
ON CONFLICT (name)
DO UPDATE
SET count = shop.count + EXCLUDED.count, price = EXCLUDED.price;


Ushbu query esa bazaga yangi Iphone ni qo'shayotganimizda agar iphone bazada bo'lsa shunchaki uning COUNT i bilan PRICE sini UPDATE qilib qo'yayapti xolos!


Malumotlarimiz foydali bo'layotgan bo'lsa, reaksiya qoldiring 🔥
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥3👍1
Malumotlarimiz sizga foydali bo'lyaptimi?
Anonymous Poll
72%
Ha
28%
O'zim ba'zilarini bilar edim, foydasi tegdi!
Assalomu alaykum hammaga, bugun sizlarga o'zim juda kop ishlatadigan Jetbrains mahsuloti bo'lgan DataGrip ni tavsiya qilmoqchiman, Ushbu programma bilan siz SQL bilan juda oson ishlay olasiz, qulay va sifatli yaxshi programma!
Proyektlarda Database Design qilayotganingizda juda ham kerak bo'ladi!

📥 Yuklab olish

P/s: To'g'risi, shell dan bezor bo'lgan edingiz a? 😁
Please open Telegram to view this post
VIEW IN TELEGRAM
SELECT
COUNT("id") AS jami,
SUM(CASE WHEN lang = 'en' THEN 1 ELSE 0 END) AS en_foiz,
SUM(CASE WHEN lang = 'uz' THEN 1 ELSE 0 END) AS uz_foiz,
SUM(CASE WHEN lang = 'ru' THEN 1 ELSE 0 END) AS ru_foiz,
(SUM(CASE WHEN lang = 'en' THEN 1 ELSE 0 END) / COUNT("id")) * 100 AS en_foiz_percent,
(SUM(CASE WHEN lang = 'uz' THEN 1 ELSE 0 END) / COUNT("id")) * 100 AS uz_foiz_percent,
(SUM(CASE WHEN lang = 'ru' THEN 1 ELSE 0 END) / COUNT("id")) * 100 AS ru_foiz_percent
FROM users;


Ushbu query orqali siz telegram botingizda uzbek, english, rus foydalanuvchilarini foizda ola olasiz. Statistikada juda ham kerakli bo'lgan query larda bittasi bu. Ushbu query ishlashi uchun sizda quyidagi table bo'lishi kerak 👇

CREATE TABLE users (
id SERIAL PRIMARY KEY,
user_id VARCHAR(100) NOT NULL,
status VARCHAR(200) NOT NULL,
lang VARCHAR(50) NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);


Ushbu query orqali esa siz oxirgi bir soatda, bugun, shu haftada, shu oyda va hamma foydalanuvchilar sonini olishingiz mumkin va bu query ham yuqoridagi table uchun qilingan o'zingizga moslashtirib olasiz degan umiddaman 👇


SELECT
SUM(CASE WHEN created_at >= NOW() - INTERVAL '12 hours' THEN 1 ELSE 0 END) AS last_12_hours,
SUM(CASE WHEN DATE(created_at) = CURRENT_DATE THEN 1 ELSE 0 END) AS today,
SUM(CASE WHEN created_at >= CURRENT_DATE - INTERVAL '1 week' AND created_at < CURRENT_DATE + INTERVAL '1 day' THEN 1 ELSE 0 END) AS last_week,
SUM(CASE WHEN created_at >= CURRENT_DATE - INTERVAL '1 month' AND created_at < CURRENT_DATE + INTERVAL '1 day' THEN 1 ELSE 0 END) AS last_month
FROM users;



Hamma kerakli querylarni pastda sql faylda qoldiraman! 😉
Foydasi tekkan bo'lsa reaksiyani bosib ketamiz 🥹
Please open Telegram to view this post
VIEW IN TELEGRAM
statistics_queries.sql
1.2 KB
Tepadagi postda yozilgan querylar jamlanmasi! DataGrip da ochib bitta run qilib natijani korishingiz mumkin!
🖥 DataGrip database diagrammalarini ham chiqarib beradi 😉
Please open Telegram to view this post
VIEW IN TELEGRAM
query.sql
3.6 KB
🖥 Bugun qilgan loyihamda ishlatilgan querylar jamlanmasi kimgadir kerak bo'lib qolar!
🖥 Koproq JOIN lardan foydalanganman.

Tez orada JOIN lar haqida POST
bo'ladi
😊
Please open Telegram to view this post
VIEW IN TELEGRAM
SELECT t.title AS test, jsonb_build_object('questions', (SELECT jsonb_agg(jsonb_build_object('question', row_to_json(q), 'variants', (SELECT jsonb_agg(v) FROM variants v WHERE v.question_id = q.id))) FROM questions q INNER JOIN test_questions tq ON q.id = tq.question_id)) AS question
FROM tests t;




Hayotim davomida yozgan eng uzun querylarimdan biri. Nima vazifa bajaradi deb o'ylaysiz? 🤔
Bugun sizlar bilan JOIN lar haqida gaplashamiz.
JOIN lar orqali biz bir vaqtning o'zida bir nechta table dan malutmolarni olib kelishimiz mumkin. Ya'ni bizda user_files table bo'lsa va unda user_id , file_id columnlari dagi malumotlar kelsa biz JOIN lar orqali bitta queryning o'zida users jadvalida bizdagi user_id ga mos user ni, files table dan esa file_id ga mos file olib kelib qaytarib berishimiz mumkin. Va nafaqat ikkita balki bir nechta table lardan malumotlarni olib kelishingiz mumkin. Bu o'zingizning proyektingizga va logikangizga bog'liq!

JOIN lar ning bir nechta turi mavjud. Ularga INNER JOIN, LEFT JOIN, RIGHT JOIN, FULL OUTER JOIN, SELF JOIN va CROSS JOIN lar kiradi!

Har bittasini alohida ko'rib chiqamiz keyingi postlarda! 😉
INNER JOIN ga misol: 👇

SELECT
upt.id,
jsonb_build_object('id', u.id, 'login', u.login, 'password', u.password, 'full_name', u.full_name,
'birthdate', u.birthdate, 'role', u.role, 'file',
row_to_json(f.*)) AS users,
row_to_json(t.*) as test,
upt.total_questions, upt.passed_questions, upt.created_at
FROM user_passed_tests upt
INNER JOIN users u ON upt.user_id = u.id
INNER JOIN tests t ON upt.test_id = t.id
INNER JOIN files f ON f.id = u.file_id
WHERE upt.user_id = 1;
Please open Telegram to view this post
VIEW IN TELEGRAM