কম্পিউটার টিউটোরিয়াল

MySQL-এ শেষ রো বাদ দিয়ে সব রো সিলেক্ট করা

সর্বশেষ রো বাদ দিয়ে বাকি সব রো সিলেক্ট করতে != অপারেটর সাথে সাবকোয়েরি ব্যবহার করুন।

সিনট্যাক্স

SELECT * FROM yourTableName 
WHERE yourIdColumnName != (SELECT MAX(yourIdColumnName) FROM yourTableName);

উদাহরণ দিয়ে বুঝি

টেবিল তৈরি করুন:

mysql> CREATE TABLE AllRecordsExceptLastOne (
    -> Id INT NOT NULL AUTO_INCREMENT,
    -> UserName VARCHAR(10),
    -> UserAge INT,
    -> PRIMARY KEY(Id)
    -> );
Query OK, 0 rows affected (0.65 sec)

রেকর্ড ইনসার্ট করুন:

mysql> INSERT INTO AllRecordsExceptLastOne(UserName, UserAge) VALUES('John', 21);
mysql> INSERT INTO AllRecordsExceptLastOne(UserName, UserAge) VALUES('Carol', 28);
mysql> INSERT INTO AllRecordsExceptLastOne(UserName, UserAge) VALUES('Mike', 22);
mysql> INSERT INTO AllRecordsExceptLastOne(UserName, UserAge) VALUES('Sam', 29);
mysql> INSERT INTO AllRecordsExceptLastOne(UserName, UserAge) VALUES('David', 27);
mysql> INSERT INTO AllRecordsExceptLastOne(UserName, UserAge) VALUES('Larry', 24);

সকল রেকর্ড (৬টি):

mysql> SELECT * FROM AllRecordsExceptLastOne;
+----+----------+---------+
| Id | UserName | UserAge |
+----+----------+---------+
|  1 | John     |      21 |
|  2 | Carol    |      28 |
|  3 | Mike     |      22 |
|  4 | Sam      |      29 |
|  5 | David    |      27 |
|  6 | Larry    |      24 |
+----+----------+---------+
6 rows in set (0.00 sec)

শেষ রো (Id=6) বাদ দিয়ে সিলেক্ট

mysql> SELECT * FROM AllRecordsExceptLastOne 
    -> WHERE Id != (SELECT MAX(Id) FROM AllRecordsExceptLastOne);
+----+----------+---------+
| Id | UserName | UserAge |
+----+----------+---------+
|  1 | John     |      21 |
|  2 | Carol    |      28 |
|  3 | Mike     |      22 |
|  4 | Sam      |      29 |
|  5 | David    |      27 |
+----+----------+---------+
5 rows in set (0.04 sec)

বিকল্প পদ্ধতি: LIMIT + ORDER BY

SELECT * FROM AllRecordsExceptLastOne 
ORDER BY Id DESC LIMIT 1 OFFSET 1;

বা LIMIT 18446744073709551615 OFFSET 1 (MySQL-এ OFFSET বাধ্যতামূলক)।

নোট

  • এই পদ্ধতিতে প্রাইমারি কি বা ইউনিক অটো-ইনক্রিমেন্ট কলাম থাকা প্রয়োজন
  • যদি ডিলিট হয়ে গ্যাপ থাকে, MAX(Id) শেষ ইনসার্টেড রো বুঝাবে,phisically শেষ রো নয়
  • বড় টেবিলে সাবকোয়েরির বদলে জয়ন বা উইন্ডো ফাংশন (MySQL 8.0+) দ্রুত হতে পারে
  1. MySQL টেবিল থেকে সব সারি ডিলিট করতে কীভাবে পারি?

  2. MySQL স্টোরড প্রোসিডিউর লিখে টেবিলের সব ডেটা সিলেক্ট করার পদ্ধতি।

  3. MySQL-এ একটি টেবিলের সারি যেটি অন্য টেবিলে নেই সেগুলো কীভাবে বের করবেন?

  4. MySQL-এ শেষ ১০টি সারি কীভাবে বের করবেন?