Tạo mối quan hệ giữa các bảng trong mysql

Hôm nay chúng ta sẽ tiếp tục cuộc hành trình mày mò về ngữ điệu sql, thao tác với nhiều bảng hơn, ra mắt qua những quan hệ trong cơ sở dữ liệu và Join query.

Bạn đang xem: Tạo mối quan hệ giữa các bảng trong mysql

bạn có thể xem lại PHẦN I để dễ ợt đọc phần này hơn nhé.

Các mẫu mã qan hệ database

Khi chế tác một database, thường thực hiện mỗi bảng không giống nhau cho từng thực thể(entity). Vd như bảng customers, bảng orders, bảng items... Nhưng họ cần tất cả quan hệ giữa những bảng này. Với nhì bảng customers, orders và items thì: customers sinh sản orders cùng orders chứa những items. Nhờ bao gồm quan hệ này nhưng mà ta rất có thể sử dụng lệnh join query nhằm lấy đúng chuẩn những gì bọn họ cần một cách dễ dàng.Các hình trạng quan hệ trong các đại lý dũ liệu.

quan hệ một – một.quan hệ một – nhiều.quan hệ những – nhiều.quan hệ self reference.

Khi rước dữ liệu từ không ít bảng bao gồm quan hệ, họ sẽ thực hiện JOIN query. Gồm một vài dạng hình JOIN query mà thông thường ta sẽ mày mò ở phần tiếp theo.

Quan hệ Một - một (one - one relationshiops)

Giả sử bạn có một bảng customers cất tên và add của nó:

*

Chúng ta có thể đặt thông tin địa chỉ của mỗi customer vào một bảng riêng luôn là addresses.

*

Giờ thì ta có một quan hệ nam nữ giữ bảng customers cùng bảng addresses. Trường hợp mỗi address rất có thể thuộc một và duy nhất customer thì tình dục này hotline là quan hệ một – một.

Bạn rất có thể thấy giờ bao gồm một trường tên là “address_id” trong bảng customers, đó là 1 tham chiếu cho mỗi phiên bản ghi trong bảng addresses. Trên đây gọi là 1 khóa phụ “foregin key” cùng nó được áp dụng cho toàn bộ các loại quan hệ không giống nữa vào DB.

Quan hệ Một - những (one - many relationshiops)

Đây là nhiều loại quan hệ rất thường được sử dụng trong kiến tạo database.

customer rất có thể tạo một hoặc những orders.orders tất cả thể chứa được nhiều items.mỗi item gồm thế chứa description, name, price và một số các tin tức khác nữa.

Trong trường đúng theo như ví dụ bên dưới đây bọn họ tạo một quan hệ tình dục một – nhiều .

*

Mỗi customer có thể không tất cả hoặc các order cơ mà mỗi order chỉ nằm trong về duy nhất một customer thôi.

Quan hệ các - những (many - many relationshiops)

Trong một vài ngôi trường hợp, bạn cũng có thể cần cái quan hệ nhiều nhiều này. Mang như từng order rất có thể có chứa đựng nhiều items cùng mỗi item rất có thể có nằm trong không ít order không giống nhau. Trông quả xấu phết

*

Trong bảng bills chỉ gồm một mục tiêu là để tạo ra quan hệ các nhiều giữa chiếc orders và items. Khi mà lại bạn xác định quan hệ giữa hai thực thể cơ mà ra dòng quan hệ những nhiều này thì cần cố tạo nên một bảng trung gian giữa hai thằng để có được tình dục nhiề nhiều này.

Self Referencing Relationships

đây là quan liêu hệ nhưng mà một bảng phải một dục tình với chủ yếu nó. VD. Khách hàng hoàn toàn có thể tham chiếu với những customers khác nữa.

Foreign Keys

Trong phần chúng ta tham khảo thêm những gì về foreign key. Trong các quan hệ trên chúng ta có thể thấy có một vài trường mà tất cả type của nó là “xxx_id” tham chiếu mang lại một bảng khác như là customer_id nó là một trong những foreign key trong bảng orders.

Với MySQL để chế tạo ra forengin key này ta làm cho như sau, nhân thể thể tạo luôn vài bảng để pratice trong phần JOIN.

CREATE TABLE customers (customer_id INT AUTO_INCREMENT PRIMARY KEY,customer_name VARCHAR(100));Tiếp theo tạo ra một bảng orders mà cái order này sẽ cất một forign key.

Xem thêm: Top 8 Trang Web Học Tiếng Anh Qua Phim Có Phụ Đề Tốt Nhất Hiện Nay

CREATE TABLE orders (order_id INT AUTO_INCREMENT PRIMARY KEY,customer_id INT,amount DOUBLE,FOREIGN KEY (customer_id) REFERENCES customers(customer_id));Cơ mà chúng ta phải chắc chắn rằng một điều là customer_id của bảng orders cùng customers cần cùng kiểu dữ liệu đấy nhé.

JOIN Queries

Để lấy dữ liệu từ database mà bao gồm quan hệ(relationship) thường sẽ dùng JOIN query này. Họ đã tạo thành bảng customers với orders làm việc trên rồi, giờ đồng hồ thì thêm xíu tài liệu vào để vọc mấy cái nhiều loại JOIN này.Các một số loại JOIN vào SQL:

Cross Join.Natureal Join.Left Join.Right join.

Giờ tạo ra một vài ông customer:

INSERT INTO customers(customer_name) VALUES("Doan"), ("Linh"), ("Dieu"), ("Ha");

tiếp theo sản xuất order mang đến nó:

INSERT INTO orders(customer_id, amount) VALUES (1, 19.99),( 1, 35.15), (3, 17.56), (4, 12.34);

Vậy là họ có 4 customers. Từng customer bao gồm số những hóa đối kháng khác nhau. Giờ thì hãy nhìn sự khác hoàn toàn giữa những loại join tiếp sau đây nhé.

CROSS JOIN

Đây là nhiều loại mặc định của JOIN query khi chúng ta kông chỉ rõ một số loại join trong câu query.

SELECT * FROM customers JOIN orders;

*

Kết quả ta dìm được gọi là tích đề các(Descaries). Nó có nghĩa là mỗi cái trong bảng thứ nhất sẽ được match với từng row vào bảng thứ hai . Nhì bảng trên mỗi bảng bao gồm 4 rows (record ) vậy tác dụng ta nhận được sau khoản thời gian JOIN cross là 16 rows.

Từ khóa JOIN này có thể được sửa chữa bằng vệt ‘,’ giữa hai bảng với nhau. Chúng ta thữ query cùng với câu sau thì tác dụng sẽ trả về y hệt.

SELECT * FROM customers, orders;

NATURAL JOIN

Với cái nhiều loại này ý thì bảng cần phải có một cột trùng thương hiệu với nhau. Trong trường đúng theo của bọn họ cả hai bảng đều phải có customer_id. Bởi vậy MySQL đã join các bạn dạng ghi mà có giá trị trùng nhau thôi.

SELECT * FROM customers NATURAL JOIN orders;

*

Như bạn thấy customer_id được hiển thị từng một lần thôi mặc dù ta sử dụng SELECT (*). Đó là vì bản vẽ xây dựng cơ sở dữ liệu đối xử với nó như nhì cột đó có mức giá trị trùng nhau .

INNER JOIN

Khi một câu lệnh join có một điều kiện rõ ràng thì đó là Inner JOIN. Vào trường hợp này nó sẽ là 1 trong những ý tưởng xuất sắc để xử trí hai bảng bao gồm field name tên của nó có thể khác nhau. Tác dụng sẽ tương tự như natural Join

SELECT * FROM customers JOIN orders WHERE customers.customer_id = orders.customer_id;

*

Kết trái tra về gồm khác một ít so với kiểu dáng natural join. Trường customer_id được xuất hiện những nhì lần tương xứng với từng bảng. Đó là vì chúng ta chỉ đơn thuần yêu câu DB match cực hiếm trên hai column rõ ràng.

Tiếp theo bọn họ thử thêm một vài điều kiện vào câu query xem

SELECT * FROM customers JOIN orders WHERE customers.customer_id = orders.customer_id & customers.customer_name like ‘ %D%’;

*

Câu query này đang lấy toàn cục những bản ghi của nhị bảng bao gồm trùng customer_id với phải có customer_name cất chữ ‘D’.

** Mệnh đề ON**

Trước khi đi tiếp sang các loại JOIN khác. Bọn họ sẽ tìm hiểu về mệnh đề ON này. Nó thật sự bổ ích cho việc đưa những điều khiếu nại JOIN trong một đk riêng biệt. Làm sao thử câu query sau

SELECT * FROM customers JOIN orders ON(customers.customer_id = orders.customer_id) WHERE order.amount > 20;

*

Nhìn câu query trên bạn cũng có thể thấy clear rộng so với vấn đề không thực hiện mệnh đề ON.

** Mệnh đề USING**

Using nó cũng như như mệnh đề ON thôi tuy thế nó phòng hơn một chút với điều kiện là hai column trong nhì bảng phải mang tên trùng nhau cơ. Cách thực hiện thì như dưới đây.

SELECT * FROM customers JOIN orders USING(customer_id) WHERE order.amount > 20;

Nhưng thật ra nếu mà hai column nhưng tên trùng nhau thì dùng xừ luôn Natural Join luôn. Hiệu quả ra y như nhau luôn.

LEFT JOIN

LEFT JOIN là một trong những lọai của OUTER JOIN. Vào câu query mà áp dụng LEFT JOIN còn nếu như không match cùng với bảng thứ hai thì các bản ghi của bảng một vẫn sẽ được hiển thị bình thường.

SELECT * FROM customers LEFT JOIN orders On(customers.customer_id = orders.customer_id);

*

Từ hiệu quả trả về chúng ta cũng có thể thấy dòng cô Linh này không tồn tại một order như thế nào thì làm việc bảng lắp thêm hai sẽ là NULLThử thêm vài điều kiện vào nhé.

SELECT * FROM customers LEFT JOIN orders On(customers.customer_id = orders.customer_id) WHERE orders.amount > 15;

*

Oh nếu bạn xem xét thì cô Hà và Linh mất rồi. Đó là vì LEFT JOIN đang trả về toàn thể customers của cả không match với bảng 2. Vụ việc là làm việc mệnh đề WHERE đã thải trừ những phiên bản ghi cơ mà hóa solo có amount RIGHT JOIN

Right JOIn thì tựa như với left join. Tuy vậy thứ tự thì được đảo lại.

*

Kết Luận

Cảm ơn các bạn đã đọc nội dung bài viết hy vọng qua một trong những các lấy một ví dụ cơ bảnm, Hi vọng sẽ giúp bạn cố gắng được một số syntax cơ bản trong MySQL.