برنامه نویسی

کار 4 – پایگاه داده

ایجاد جدول مشتری:

create table customer(customer_id int primary key,
first_name text, 
last_name text, 
email text,
city text, 
state text);

CREATE TABLE

INSERT INTO customer (customer_id, first_name, last_name, email, city, state) VALUES 
(101, 'Arun', 'Kumar', 'arjun@gmail.com', 'Chennai', 'Tamil Nadu'),(102, 'Mani', 'Kandan', 'mani@yahoo.com', 'Coimbatore', 'Tamil Nadu'),
(103, 'Ravi', 'Shankar', 'ravi@yahoo.com', 'Madurai', 'Tamil Nadu'),(104, 'Neha', 'Sharma', 'neha@gmail.com', 'Chennai', 'Tamil Nadu'),(105, 'Vickram', 'Kumar', 'vikram@gmail.com', 'Trichy', 'Tamil Nadu');

INSERT 0 5

select * from customer;

 customer_id | first_name | last_name |      email       |    city    |   state    
-------------+------------+-----------+------------------+------------+------------
         101 | Arun       | Kumar     | arjun@gmail.com  | Chennai    | Tamil Nadu
         102 | Mani       | Kandan    | mani@yahoo.com   | Coimbatore | Tamil Nadu
         103 | Ravi       | Shankar   | ravi@yahoo.com   | Madurai    | Tamil Nadu
         104 | Neha       | Sharma    | neha@gmail.com   | Chennai    | Tamil Nadu
         105 | Vickram    | Kumar     | vikram@gmail.com | Trichy     | Tamil Nadu
(5 rows)

جدول سفارشات ایجاد کنید:

CREATE TABLE orders (
    order_id INTEGER PRIMARY KEY,
    customer_id INTEGER,
    order_date DATE,
    amount INTEGER,
    product_name TEXT,
    product_category TEXT,
    status TEXT,
    FOREIGN KEY (customer_id) REFERENCES customer(customer_id) ON DELETE CASCADE
);

CREATE TABLE

insert into orders (order_id,customer_id, order_date, amount, product_name, product_category, status) values
(1001,101,'05-01-2024', 25000,'Laptop', 'Electronics', 'Shipped'),(1002,101,'10-01-2024', 5000,'Smartphone', 'Electronics', 'Shipped'),
(1003,102,'12-01-2024', 15000,'Chair', 'Furniture', 'Pending'),(1004,103,'15-01-2024', 20000,'Table', 'Furniture', 'Delivered'),(1005,101,'01-02-2024', 12000,'Note&Book', 'Book$stationery', 'Shipped'),
(1006,104,'05-02-2024', 8000,'Sofa', 'Furniture', 'Shipped'),(1007,102,'15-02-2024', 6000,'Smartphone', 'Electronics', 'Delivered');
(1008,104,'25-02-2024', 12000,'Desk', 'Furniture', 'Delivered')

INSERT 0 7

select * from orders;

 order_id | customer_id | order_date | amount | product_name | product_category |  status   
----------+-------------+------------+--------+--------------+------------------+-----------
     1001 |         101 | 2024-01-05 |  25000 | Laptop       | Electronics      | Shipped
     1002 |         101 | 2024-01-10 |   5000 | Smartphone   | Electronics      | Shipped
     1003 |         102 | 2024-01-12 |  15000 | Chair        | Furniture        | Pending
     1004 |         103 | 2024-01-15 |  20000 | Table        | Furniture        | Delivered
     1005 |         101 | 2024-02-01 |  12000 | Note&Book    | Book$stationery  | Shipped
     1006 |         104 | 2024-02-05 |   8000 | Sofa         | Furniture        | Shipped
     1007 |         102 | 2024-02-15 |   6000 | Smartphone   | Electronics      | Delivered
     1008 |         104 | 2024-02-25 |  12000 | Desk         | Furniture        | Delivered
(8 rows)

جدول محصول ایجاد کنید:

CREATE TABLE product (
    product_id INTEGER PRIMARY KEY,
    product_name TEXT,
    unit_price INTEGER,
    category TEXT,
    manufacturer TEXT,
    stock_quantity INTEGER,
    order_id INTEGER,
    FOREIGN KEY (order_id) REFERENCES orders(order_id) ON DELETE CASCADE
);

CREATE TABLE

insert into product (product_id,product_name, unit_price, category, manufacturer, stock_quantity, order_id) values
(201,'Laptop', 50000,'Electronics', 'Brand A',10,1001),(202,'Smartphone', 15000,'Electronics', 'Brand B',15,1002),
(203,'Chair', 3000,'Furniture', 'Brand C',20,1003),
(204,'Table', 8000,'Furniture', 'Brand D',25,1004),
(205,'Sofa', 15000,'Furniture', 'Brand E',5,1006),
(206,'Note&Book', 550,'Book&Stationery', 'Brand G',8,1005),
(207,'Desk', 12000,'Furniture', 'Brand F',12,1008);

INSERT 0 7

select* from product;

 product_id | product_name | unit_price |    category     | manufacturer | stock_quantity | order_id 
------------+--------------+------------+-----------------+--------------+----------------+----------
        201 | Laptop       |      50000 | Electronics     | Brand A      |             10 |     1001
        202 | Smartphone   |      15000 | Electronics     | Brand B      |             15 |     1002
        203 | Chair        |       3000 | Furniture       | Brand C      |             20 |     1003
        204 | Table        |       8000 | Furniture       | Brand D      |             25 |     1004
        205 | Sofa         |      15000 | Furniture       | Brand E      |              5 |     1006
        206 | Note&Book    |        550 | Book&Stationery | Brand G      |              8 |     1005
        207 | Desk         |      12000 | Furniture       | Brand F      |             12 |     1008
(7 rows)

1. یک پرس و جو DDL برای ایجاد جدول سفارشات با ستون های مناسب در بالا بنویسید:

select * from orders;

 order_id | customer_id | order_date | amount | product_name | product_category |  status   
----------+-------------+------------+--------+--------------+------------------+-----------
     1001 |         101 | 2024-01-05 |  25000 | Laptop       | Electronics      | Shipped
     1002 |         101 | 2024-01-10 |   5000 | Smartphone   | Electronics      | Shipped
     1003 |         102 | 2024-01-12 |  15000 | Chair        | Furniture        | Pending
     1004 |         103 | 2024-01-15 |  20000 | Table        | Furniture        | Delivered
     1005 |         101 | 2024-02-01 |  12000 | Note&Book    | Book$stationery  | Shipped
     1006 |         104 | 2024-02-05 |   8000 | Sofa         | Furniture        | Shipped
     1007 |         102 | 2024-02-15 |   6000 | Smartphone   | Electronics      | Delivered
     1008 |         104 | 2024-02-25 |  12000 | Desk         | Furniture        | Delivered
(8 rows)

2. یک پرس و جو DDL بنویسید تا یک ستون جدید “Phone_Number” به جدول مشتریان اضافه کنید:

alter table customer add phone_number int;

ALTER TABLE

select * from customer;

 customer_id | first_name | last_name |      email       |    city    |   state    | phone_number 
-------------+------------+-----------+------------------+------------+------------+--------------
         101 | Arun       | Kumar     | arjun@gmail.com  | Chennai    | Tamil Nadu |             
         102 | Mani       | Kandan    | mani@yahoo.com   | Coimbatore | Tamil Nadu |             
         103 | Ravi       | Shankar   | ravi@yahoo.com   | Madurai    | Tamil Nadu |             
         104 | Neha       | Sharma    | neha@gmail.com   | Chennai    | Tamil Nadu |             
         105 | Vickram    | Kumar     | vikram@gmail.com | Trichy     | Tamil Nadu |             
(5 rows)

3. یک پرس و جو DDL بنویسید تا مشتری جدیدی را در جدول مشتریان وارد کنید:

INSERT INTO customer (customer_id, first_name, last_name, email, city, state)                                                                         VALUES  (106, 'Lakshmi', 'Pritha', 'pritha@gmail.com', 'Chennai', 'Tamil Nadu');

INSERT 0 1

select * from customer;

 customer_id | first_name | last_name |      email       |    city    |   state    | phone_number 
-------------+------------+-----------+------------------+------------+------------+--------------
         101 | Arun       | Kumar     | arjun@gmail.com  | Chennai    | Tamil Nadu |             
         102 | Mani       | Kandan    | mani@yahoo.com   | Coimbatore | Tamil Nadu |             
         103 | Ravi       | Shankar   | ravi@yahoo.com   | Madurai    | Tamil Nadu |             
         104 | Neha       | Sharma    | neha@gmail.com   | Chennai    | Tamil Nadu |             
         105 | Vickram    | Kumar     | vikram@gmail.com | Trichy     | Tamil Nadu |             
         106 | Lakshmi    | Pritha    | pritha@gmail.com | Chennai    | Tamil Nadu |             
(6 rows)

4. یک پرس و جو بنویسید تا تعداد سفارشات قرار داده شده توسط هر مشتری در جدول سفارشات را حساب کنید:

select customer_id, count(order_id) from orders group by customer_id order by customer_id ;

 customer_id | count 
-------------+-------
         101 |     3
         102 |     2
         103 |     1
         104 |     2
(4 rows)

5. تمام جزئیات سفارش را از جدول سفارش با مبلغی کمتر از 10،000 و بیشتر از 25000 بازیابی کنید:

select * from orders where amount between 10000 and 25000;

 order_id | customer_id | order_date | amount | product_name | product_category |  status   
----------+-------------+------------+--------+--------------+------------------+-----------
     1001 |         101 | 2024-01-05 |  25000 | Laptop       | Electronics      | Shipped
     1003 |         102 | 2024-01-12 |  15000 | Chair        | Furniture        | Pending
     1004 |         103 | 2024-01-15 |  20000 | Table        | Furniture        | Delivered
     1005 |         101 | 2024-02-01 |  12000 | Note&Book    | Book$stationery  | Shipped
     1008 |         104 | 2024-02-25 |  12000 | Desk         | Furniture        | Delivered
(5 rows)

6. یک پرس و جو DML برای به روزرسانی شهر “Customer_ID” 101 به “بمبئی” بنویسید:

update customer  set city='Mumbai' where customer_id=101;

UPDATE 1

select * from customer;

 customer_id | first_name | last_name |      email       |    city    |   state    | phone_number 
-------------+------------+-----------+------------------+------------+------------+--------------
         102 | Mani       | Kandan    | mani@yahoo.com   | Coimbatore | Tamil Nadu |             
         103 | Ravi       | Shankar   | ravi@yahoo.com   | Madurai    | Tamil Nadu |             
         104 | Neha       | Sharma    | neha@gmail.com   | Chennai    | Tamil Nadu |             
         105 | Vickram    | Kumar     | vikram@gmail.com | Trichy     | Tamil Nadu |             
         106 | Lakshmi    | Pritha    | pritha@gmail.com | Chennai    | Tamil Nadu |             
         101 | Arun       | Kumar     | arjun@gmail.com  | Mumbai     | Tamil Nadu |             
(6 rows)

7. یک پرس و جو DML بنویسید تا مشتری را با “Customer_ID” 105 حذف کنید:

delete from customer where customer_id=105;

DELETE 1

select * from customer;

 customer_id | first_name | last_name |      email       |    city    |   state    | phone_number 
-------------+------------+-----------+------------------+------------+------------+--------------
         102 | Mani       | Kandan    | mani@yahoo.com   | Coimbatore | Tamil Nadu |             
         103 | Ravi       | Shankar   | ravi@yahoo.com   | Madurai    | Tamil Nadu |             
         104 | Neha       | Sharma    | neha@gmail.com   | Chennai    | Tamil Nadu |             
         106 | Lakshmi    | Pritha    | pritha@gmail.com | Chennai    | Tamil Nadu |             
         101 | Arun       | Kumar     | arjun@gmail.com  | Mumbai     | Tamil Nadu |             
(5 rows)

8. بازیابی AllProducts از “جدول محصول” که هرگز سفارش نشده است:

SELECT product.product_id, product.product_name
FROM product
LEFT JOIN orders  ON product.order_id = orders.order_id
WHERE orders.order_id IS  NULL;

 product_id | product_name 
------------+--------------
(0 rows)

9. همه جزئیات مشتریان را که در چنای زندگی می کنند بازیابی کنید و بیش از 20،000 ارزش سفارش داده اند:

select customer.customer_id, customer.first_name, customer.last_name, customer.email, customer.city, customer.state from customer left join orders on customer.customer_id=orders.customer_id where customer.city='Chennai' and orders.amount> 20000; 

 customer_id | first_name | last_name | email | city | state 
-------------+------------+-----------+-------+------+-------
(0 rows)

10. بازیابی “Customer_ID” و تعداد کل سفارش برای هر مشتری که بیش از دو سفارش قرار داده است:

select customer_id, count(order_id) from orders group by customer_id having count(order_id)>2; 

 customer_id | count 
-------------+-------
         101 |     3
(1 row)

11. 5 مشتری برتر را بر اساس تعداد سفارشاتی که قرار داده اند ، همراه با “First_Name” و “آدرس های ایمیل” خود بازیابی کنید:

select customer.customer_id,customer.first_name, customer.email, count(order_id) from customer join orders on customer.customer_id= orders.customer_id group by customer.customer_id order by count desc limit 5;

 customer_id | first_name |      email       | count 
-------------+------------+------------------+-------
         101 | Arun       | arjun@gmail.com  |     3
         104 | Neha       | neha@gmail.com   |     2
         102 | Mani       | mani@yahoo.com   |     2
         103 | Ravi       | ravi@yahoo.com   |     1
         106 | Lakshmi    | pritha@gmail.com |     0
(5 rows)

12. لیست کلیه مشتریانی که در ماه ژانویه 2024 سفارش داده اند:

select customer.customer_id, customer.first_name, customer.last_name, customer.email, customer.city, customer.state from customer join orders on customer.customer_id=orders.customer_id where order_date between '01-01-2024' and '31-01-2024';

 customer_id | first_name | last_name |      email      |    city    |   state    
-------------+------------+-----------+-----------------+------------+------------
         102 | Mani       | Kandan    | mani@yahoo.com  | Coimbatore | Tamil Nadu
         103 | Ravi       | Shankar   | ravi@yahoo.com  | Madurai    | Tamil Nadu
         101 | Arun       | Kumar     | arjun@gmail.com | Mumbai     | Tamil Nadu
         101 | Arun       | Kumar     | arjun@gmail.com | Mumbai     | Tamil Nadu
(4 rows)

13. تعداد کل سفارشات قرار داده شده و میانگین “مبلغ سفارش” برای هر شهر را پیدا کنید:

select customer.city, count(order_id), avg(round(amount)) from customer join orders on customer.customer_id=orders.customer_id group by customer.city;

    city    | count |  avg  
------------+-------+-------
 Mumbai     |     3 | 14000
 Chennai    |     2 | 10000
 Coimbatore |     2 | 10500
 Madurai    |     1 | 20000
(4 rows)

14. هویت محصولاتی که در آخر هفته سفارش داده می شود ، و جزئیات مشتری که به آنها سفارش داده بودند:

select orders.product_name, orders.order_date, customer.customer_id, customer.first_name, customer.last_name, customer.email, customer.city, customer.state from customer join orders on customer.customer_id=orders.customer_id WHERE EXTRACT(DOW FROM orders.order_date) IN (0, 6);

 product_name | order_date | customer_id | first_name | last_name |     email      |  city   |   state    
--------------+------------+-------------+------------+-----------+----------------+---------+------------
 Desk         | 2024-02-25 |         104 | Neha       | Sharma    | neha@gmail.com | Chennai | Tamil Nadu
(1 row)

15. گرانترین محصول را در همراه با قیمت جدول محصولات و جزئیات مشتری (مشتری_id ، first_name) که آن را سفارش داده اند ، پیدا کنید:

select product.product_name, product.unit_price, customer.customer_id, customer.first_name from product join orders on product.order_id=orders.order_id join customer on orders.customer_id=customer.customer_id order by product.unit_price desc limit 1;

 product_name | unit_price | customer_id | first_name 
--------------+------------+-------------+------------
 Laptop       |      50000 |         101 | Arun
(1 row)

16. کلیه مشتریان را به همراه تعداد سفارشات خود در قالب “مشتری (تعداد سفارش)” لیست کنید. خروجی مثال: Arun Kumar (3):

select concat(customer.first_name,' ', customer.last_name, '(', count(orders.order_id), ')' ) from customer join orders on customer.customer_id=orders.customer_id group by customer.customer_id order by customer.first_name;
     concat      
-----------------
 Arun Kumar(3)
 Mani Kandan(2)
 Neha Sharma(2)
 Ravi Shankar(1)
(4 rows)

17. برای انتخاب کلیه مشتریانی که در چنای زندگی می کنند ، یک پرس و جو SQL بنویسید و دومین محصول گران قیمت را سفارش داده اند:

select customer.customer_id, customer.first_name, customer.last_name, customer.email from customer join orders on customer.customer_id=orders.customer_id join product on product.order_id=orders.order_id where customer.city='Chennai' and product.unit_price=(select distinct unit_price from product order by unit_price desc limit 1 offset 1);

 customer_id | first_name | last_name |     email      
-------------+------------+-----------+----------------
         104 | Neha       | Sharma    | neha@gmail.com
(1 row)

18. کل درآمد حاصل از هر مشتری را بدست آورید و اگر بیش از 50،000 را خرج کرده اند ، مشتری را به عنوان “اسپندر بالا” برچسب بزنید ، در غیر این صورت “اسپندر پایین”:

select customer.customer_id, customer.first_name,customer.last_name, sum(orders.amount) as totalrevenue, case when sum(orders.amount) > 50000 then 'High Spender' else 'Low Spender' end from customer join orders on customer.customer_id= orders.customer_id group by customer.customer_id order by totalrevenue desc;

 customer_id | first_name | last_name | totalrevenue |    case     
-------------+------------+-----------+--------------+-------------
         101 | Arun       | Kumar     |        42000 | Low Spender
         102 | Mani       | Kandan    |        21000 | Low Spender
         103 | Ravi       | Shankar   |        20000 | Low Spender
         104 | Neha       | Sharma    |        20000 | Low Spender
(4 rows)

19. تعداد کل سفارشات قرار داده شده توسط هر مشتری را برای هر ماه در سال بازیابی کنید:

select customer.customer_id,customer.first_name, customer. last_name, EXTRACT(month from orders.order_date) as ordermonth, EXTRACT(year from orders.order_date) as orderyear, count(order_id) as total from customer join orders on customer.customer_id = orders.customer_id GROUP BY customer.customer_id, EXTRACT(month from orders.order_date), EXTRACT(year from orders.order_date) ORDER BY customer.customer_id, orderyear, ordermonth;

 customer_id | first_name | last_name | ordermonth | orderyear | total 
-------------+------------+-----------+------------+-----------+-------
         101 | Arun       | Kumar     |          1 |      2024 |     2
         101 | Arun       | Kumar     |          2 |      2024 |     1
         102 | Mani       | Kandan    |          1 |      2024 |     1
         102 | Mani       | Kandan    |          2 |      2024 |     1
         103 | Ravi       | Shankar   |          1 |      2024 |     1
         104 | Neha       | Sharma    |          2 |      2024 |     2
(6 rows)

20. برای بازیابی کلیه مشتریانی که شرایط زیر را رعایت می کنند ، یک پرس و جو SQL بنویسید
“شرط 1: شهر یا” چنای “یا تریچی نیست.
 Condition 2: دامنه ایمیل “@yahoo.com” است.
 CONDITION 3: مشتری حداقل یک سفارش دارد.
– آنها را به ترتیب حروف الفبا با نام خانوادگی به ترتیب نزولی و به دنبال آن نام اول به ترتیب صعودی انجام دهید.

select customer.customer_id,customer.first_name, customer. last_name, customer.city, count(orders.order_id) from customer join orders on customer.customer_id=orders.customer_id where customer.city not in('Chennai','Trichy') and customer.email like '@yahoo.com' GROUP BY customer.customer_id having count(orders.order_id)>=1 ORDER BY customer.last_name desc, customer.first_name asc;

 customer_id | first_name | last_name | city | count 
-------------+------------+-----------+------+-------
(0 rows)

21. مشتریانی را پیدا کنید که هیچ کالایی را در گروه مبلمان سفارش نداده اند.

select customer.customer_id,customer.first_name, customer. last_name, customer.city from customer where  NOT EXISTS (SELECT 1                                                                                                                                             
FROM orders WHERE orders.customer_id = customer.customer_id
AND orders.product_category = 'Furniture' GROUP BY customer.customer_id);

 customer_id | first_name | last_name |  city   
-------------+------------+-----------+---------
         106 | Lakshmi    | Pritha    | Chennai
         101 | Arun       | Kumar     | Mumbai
(2 rows)

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا