خبر و ترفند روز

خبر و ترفند های روز را اینجا بخوانید!

نحوه یافتن و حذف موارد تکراری در SQL

حتی اگر مراقب باشید، داده های تکراری می توانند در پایگاه داده شما قرار بگیرند. مطمئن شوید که می دانید چگونه آن را به سرعت و به راحتی تمیز کنید.

بهترین شیوه های طراحی پایگاه داده استفاده از محدودیت UNIQUE را برای جلوگیری از تکراری شدن در پایگاه داده توصیه می کند. با این حال، هنگام کار با یک پایگاه داده با طراحی ضعیف یا داده های ناپاک، ممکن است لازم باشد خودتان موارد تکراری را پیدا کنید و آنها را به صورت دستی حذف کنید.

برای یادگیری نحوه یافتن موارد تکراری در پایگاه داده SQL و نحوه حذف آنها به ادامه مطلب مراجعه کنید.

یک پایگاه داده نمونه ایجاد کنید

برای اهداف نمایشی، با اجرای این پرس و جوی SQL، جدولی به نام Users با ستون نام و امتیاز ایجاد کنید.

DROP TABLE IF EXISTS Users;

CREATE TABLE Users (
    pk_id int PRIMARY KEY,
    name VARCHAR (16),
    score INT,
);

چند مقدار نمونه را با اجرای این پرس و جو وارد کنید:

INSERT INTO
    Users(pk_id, name, score)
VALUES
    (1, 'Jane', 20),
    (2, 'John', 13),
    (3, 'Alex', 32),
    (4, 'John', 46),
    (5, 'Jane', 20),
    (6, 'Mary', 34),
    (7, 'Jane', 20),
    (8, 'John', 13)

توجه داشته باشید که برخی از این سطرها حاوی مقادیر تکراری برای ستون نام هستند.

اگر به توضیح عمیق تری در مورد نحوه دستکاری پایگاه داده با استفاده از SQL نیاز دارید، می توانید این دستورات و پرس و جوهای SQL را بررسی کنید.

استفاده از GROUP BY برای یافتن مقادیر تکراری

می توانید از دستور GROUP BY برای مرتب کردن مقادیری که شرایط خاصی را در همان گروه دارند استفاده کنید.

مطلب مرتبط:   نحوه استفاده از Mongoose در برنامه های اکسپرس

فرض کنید نام‌های جدول نمونه باید منحصربه‌فرد باشند. می‌توانید از GROUP BY برای گروه‌بندی ردیف‌های همنام استفاده کنید.

SELECT name, COUNT(name)
FROM Users
GROUP BY name
HAVING COUNT(name) > 1

COUNT به شما امکان می دهد ردیف هایی را انتخاب کنید که بیش از یک کاربر با نام مشابه دارند.

هنگامی که این پرس و جو را اجرا می کنید، پایگاه داده ردیف های حاوی جان و جین را به صورت تکراری برمی گرداند.

حذف موارد تکراری از پایگاه داده

پس از یافتن موارد تکراری، ممکن است بخواهید آنها را با استفاده از عبارت DELETE حذف کنید.

برای این مثال، کوئری زیر را اجرا کنید:

WITH cte AS (
    SELECT *
        ROW_NUMBER() OVER (
            PARTITION BY
                name, score
            ORDER BY
                name, score
        ) R
     FROM
        Users
)

DELETE FROM cte
WHERE R > 1;

این پرس و جو از یک عبارت CTE برای یافتن موارد تکراری استفاده می کند و سپس همه آنها را به جز یکی حذف می کند.

چرا باید داده های تکراری را حذف کنید

حذف داده های تکراری الزامی نیست. با این حال، به شما امکان می‌دهد فضایی را که ردیف‌های تکراری استفاده می‌کنند، آزاد کنید.

ردیف های کمتر همچنین به این معنی است که پرس و جوها می توانند بسیار سریعتر اجرا شوند که منجر به عملکرد بالاتر می شود. از کوئری های این آموزش برای کمک به پیدا کردن و حذف موارد تکراری از پایگاه داده SQL استفاده کنید.