Loading...

Inner join

Мурунку темада биз маалыматтарды тегиздөө аркылуу жөнөкөй тандоону колдонуу менен таблицаларды кыйыр түрдө бириктирүүнү карадык. Бирок, эреже катары, ар кандай таблицалардагы маалыматтарды кошуунун кеңири таралган ыкмасы JOIN операторун колдонуу болуп саналат . INNER JOIN операторун колдонуунун жалпы формалдуу синтаксиси:

@A@
SELECT столбцы
FROM таблица1
    [INNER] JOIN таблица2
    ON условие1
    [[INNER] JOIN таблица3
    ON условие2]
@A@

JOIN операторунан кийин тандоого маалыматтарды кошуу керек болгон экинчи таблицанын аты келет. Кошумча INNER ачкыч сөзү JOINдин алдында колдонулушу мүмкүн . Анын бар же жок болушу эч нерсеге таасирин тийгизбейт. Андан кийин туташуу шарты ON ачкыч сөзүнөн кийин көрсөтүлөт . Бул шарт эки таблица кандайча салыштырыла турганын белгилейт. Көпчүлүк учурларда, кошулуу негизги таблицанын негизги ачкычын жана көз каранды таблицанын тышкы ачкычын колдонот.

Мурунку темадагы маалыматтар менен таблицаларды алалы:

@A@
CREATE TABLE Products
(
    Id INT AUTO_INCREMENT PRIMARY KEY,
    ProductName VARCHAR(30) NOT NULL,
    Manufacturer VARCHAR(20) NOT NULL,
    ProductCount INT DEFAULT 0,
    Price DECIMAL NOT NULL
);
CREATE TABLE Customers
(
    Id INT AUTO_INCREMENT PRIMARY KEY,
    FirstName VARCHAR(30) NOT NULL
);
CREATE TABLE Orders
(
    Id INT AUTO_INCREMENT PRIMARY KEY,
    ProductId INT NOT NULL,
    CustomerId INT NOT NULL,
    CreatedAt DATE NOT NULL,
    ProductCount INT DEFAULT 1,
    Price DECIMAL NOT NULL,
    FOREIGN KEY (ProductId) REFERENCES Products(Id) ON DELETE CASCADE,
    FOREIGN KEY (CustomerId) REFERENCES Customers(Id) ON DELETE CASCADE
);
@A@

JOIN колдонуу менен, бардык буйруктарды тандап, аларга продукт маалымат кошуу:

@A@
SELECT Orders.CreatedAt, Orders.ProductCount, Products.ProductName
FROM Orders
JOIN Products ON Products.Id = Orders.ProductId;
@A@

Таблицалар бирдей аталыштагы тилкелерди камтышы мүмкүн болгондуктан, тандоо үчүн тилкелерди көрсөтүүдө, алардын толук атын таблица аты менен бирге көрсөтүңүз, мисалы, "Orders.ProductCount".

MySQLде ички кошулуу

Таблица лакап аттарын колдонуу менен сиз кодуңузду кыскарта аласыз:

@A@
SELECT O.CreatedAt, O.ProductCount, P.ProductName
FROM Orders AS O
JOIN Products AS P
ON P.Id = O.ProductId;
@A@

Ошондой эле бир эле учурда бир нече таблицадагы маалыматтарды бириктире аласыз. Мисалы, заказга Кардарлар таблицасынан кардар тууралуу маалыматты кошолу:

@A@
SELECT Orders.CreatedAt, Customers.FirstName, Products.ProductName
FROM Orders
JOIN Products ON Products.Id = Orders.ProductId
JOIN Customers ON Customers.Id=Orders.CustomerId;
@A@

MySQLде таблицаларга кошулуу

Таблицаларга кошулуу менен биз алардын мамычаларын тандоону чыпкалоо же сорттоо үчүн колдоно алабыз:

@A@
SELECT Orders.CreatedAt, Customers.FirstName, Products.ProductName
FROM Orders
JOIN Products ON Products.Id = Orders.ProductId
JOIN Customers ON Customers.Id=Orders.CustomerId
WHERE Products.Price > 45000
ORDER BY Customers.FirstName;
@A@

ON ачкыч сөзүнөн кийинки шарттар курамында татаалыраак болушу мүмкүн:

@A@
SELECT Orders.CreatedAt, Customers.FirstName, Products.ProductName
FROM Orders
JOIN Products ON Products.Id = Orders.ProductId AND Products.Manufacturer='Apple'
JOIN Customers ON Customers.Id=Orders.CustomerId
ORDER BY Customers.FirstName;
@A@

Бул учурда биз Apple тарабынан өндүрүлгөн товарларга бардык заказдарды тандайбыз.

JOIN операторун колдонууда, таблицаларды бириктирүү процесси ресурсту көп талап кылаарын эске алыңыз, андыктан сиз чындыгында маалымат керек болгон таблицаларга гана кошулушуңуз керек. Таблицалар канчалык көп кошулса, ошончолук өндүрүмдүүлүк төмөндөйт.