在mysql中,左聯接是一種常見的關聯查詢,它主要用于查詢兩張表之間存在一對多關系的數據。左聯接的語法如下:
SELECT
a.column1,
b.column2
FROM
table1 AS a
LEFT JOIN
table2 AS b
ON
a.common_column = b.common_column;
其中,table1和table2為待關聯的兩張表,common_column是它們之間的共同列。
左聯接查詢的結果集包含兩張表中的所有數據,如果某個數據在table1中有但table2中沒有,它在結果集中的對應列則顯示NULL。例如,假設我們有以下兩張表:
CREATE TABLE `students` (
`id` INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
`name` VARCHAR(50) NOT NULL,
`age` INT(3) NOT NULL,
`gender` VARCHAR(10) NOT NULL
) ENGINE=InnoDB CHARSET=utf8mb4;
CREATE TABLE `courses` (
`id` INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
`course_name` VARCHAR(50) NOT NULL,
`student_id` INT NOT NULL,
CONSTRAINT `fk_student_id` FOREIGN KEY (`student_id`) REFERENCES `students`(`id`)
) ENGINE=InnoDB CHARSET=utf8mb4;
其中,students表記錄了學生的基本信息,courses表記錄了學生選修的課程,由于一個學生可以選修多門課程,因此courses表與students表之間存在一對多的關聯關系。
現在我們要查詢所有學生及其所選課程的信息,可以使用以下SQL語句:
SELECT
s.name,
c.course_name
FROM
students AS s
LEFT JOIN
courses AS c
ON
s.id = c.student_id;
執行以上查詢語句,可以得到以下結果:
+--------+------------------+
| name | course_name |
+--------+------------------+
| Alice | Math |
| Alice | English |
| Bob | Science |
| Bob | History |
| Bob | Literature |
| Cindy | Math |
| Cindy | Science |
+--------+------------------+
可以看到,結果集中包含了所有學生的信息,以及每個學生所選的所有課程。如果某個學生沒有選課,它在結果集中的對應列則顯示NULL。
總之,左聯接是一種非常有用的關聯查詢方式,在查詢兩張表之間存在一對多關系的數據時特別實用。