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

Admin : @Mistrdev

Invite link:
https://t.me/+_cTGIsLgMGVhNzA6
Download Telegram
IN - operatori.
IN - operatori biz bergan value ga mos va column ichida mavjud bo'lgan malumotlarni chaqirish uchun ishlatiladi.

SELECT * FROM my_contacts WHERE profession IN ('driver', 'cheef', 'backend-dev');

Agar siz IN ning ichidagi malumotlar bor column larni chiqarmasligingiz kerak bo'lib qolsa unda NOT IN dan foydalanib ketishingiz mumkin bo'ladi.

SELECT * FROM my_contacts WHERE profession NOT IN ('driver', 'cheef', 'backend-dev');
👍7
1. SUM - bu biz ko'rsatib o'tgan column bo'yicha hammasini hisoblab beradi. Masalan bizda narxlar degan column mavjud bo'ladigan bo'lsa undagi hamma narxlarni qo'shib jami narxni hisoblab beradi.

SELECT SUM(price) FROM example_table;

2. ORDER BY - bu biz ko'rsatib o'tgan column bo'yicha agar value lar text bolsa alifbo tartibida chiqarib beradi, agar raqam bo'lsa kichikdan kattaga qarab saralab chiqarib beradi.

SELECT * FROM example_table ORDER BY type;

3. ORDER BY, DESC - bu biz ko'rsatib o'tgan column bo'yicha agar value text bo'lsa alifboga teskariga tartibda saralab beradi, agar son bo'lsa ya'ni integer bo'lsa kattadan kichikka qarab saralab beradi.

SELECT * FROM exampl_table ORDER BY type DESC;
👍4
Kanaldagi malumotlar foydali bo'layaptimi?
Anonymous Poll
76%
Ha, albatta
24%
Yo'q
🆒8🎉2👏1
1. SELECT MIN(price) FROM example_table;

bu jadvaldagi eng kichik price ni chiqarib beradi.

2. SELECT MAX(price) FROM exaple_table;

bu jadvaldagi eng katta price ni chiqarib beradi.

3. SELECT AVG(price) FROM example_table;

bu jadvaldagi price ning o'rtachasini chiqarib beradi.

4. SELECT COUNT(price) FROM example_table;

bu jadvaldagi nechta roq borligini sanab beradi.

5. SELECT MAX(price) FROM example_table GROUP BY type;

bu so'rov example_table jadvalidan type columini bo'yicha eng katta price ni chiqarib beradi.

6. SELECT DISTINCT name FROM example_table;

bu so'rov example_table jadvalidagi name column i bo'yicha name dagi o'xshash value lar bittadan kop bo'lsa bitta qilib chiqarib beradi.

7. SELECT * FROM example_table LIMIT 2;

bu so'rov jadvaldagi malumotlarning boshidagi ikkitasini chiqarib berishga xizmat qiladi.


Postlarim foydali bo'layotgan bo'lsa shunchaki tekin reaksiyasini bosib ketingggg.
Keyingi postimiz nasib qilsa ALTER TABLE haqida bo'ladi. 😎
👍9👏1
ALTER TABLE example_table ADD COLUMN id SERIAL PRIMARY KEY;

ushbu so'rov bizga bazamizda mavjud bo'lgan table ga o'zgartirish kiritishda yordam beradi. Bizda example_table nomli jadval bor va unga SERIAL PRIMARY KEY qilib column qo'shayapmiz.

ALTER TABLE example_table RENAME TO example;

ushbu so'rov bizga example_table nomli jadval nomini example ga o'zgartirib berish uchun xizmat qiladi.

ALTER TABLE example_table RENAME phone TO phone_number;

bu so'rov bizga jadvaldagi phone column nomini phone_number ga o'zgartirib beradi.

ALTER TABLE example_table ALTER COLUMN TYPE VARCHAR(60);

bu so'rov example_table jadvalidagi columnning turini o'zgartirishda yordam beradi.
Agar columnning turi INT, VARCHAR yoki boshqa turda bo'lsa uni VARCHAR(60) ga o'zgartirib beradi.

ALTER TABLE example_table ALTER COLUMN phone_number SET NOT NULL;

bu so'rov jadvaldagi phone_number ga NOT NULL turini qo'shib beradi.

ALTER TABLE example_table DROP COLUMN nickname;

bu so'rov jadvaldan nickname columinini o'chirib beradi.

ALTER TABLE example_table ADD COLUMN profession_id INT REFERENCES profession(id);

ushbu so'rov bizga proffession jadvalidagi id ga qarashli profession_id nomli columnni jadvalga qo'shib beradi.
👍5🔥1
PostgreSql da JOIN haqida bilasizmi?
Anonymous Poll
40%
Ha
60%
Yo'q, endi bilib olaman
🔥1
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