1 create database test2;
2 use test2;
3 CREATE TABLE students (
4 student_id INT,
5 student_name VARCHAR(50)
6 );
7
8 CREATE TABLE courses (
9 course_id INT,
10 student_id INT,
11 course_name VARCHAR(50)
12 );
13
14 INSERT INTO students (student_id, student_name) VALUES
15 (1, 'Alice'),
16 (2, 'Bob'),
17 (3, 'Charlie');
18
19 INSERT INTO courses (course_id, student_id, course_name) VALUES
20 (1, 1, 'Math'),
21 (2, 1, 'Science'),
22 (3, 2, 'English');
23 CREATE TABLE employees (
24 employee_id INT,
25 employee_name VARCHAR(50),
26 manager_id INT
27 );
28 INSERT INTO employees (employee_id, employee_name, manager_id) VALUES
29 (1, 'Alice', NULL),
30 (2, 'Bob', 1),
31 (3, 'Charlie', 1),
32 (4, 'David', 2);
33 # where是指分组之前,having是指分组之后进行过滤
34 # 连表操作
35 # 自连接:自连接是指同一张表通过连接条件连接自己
36 -- 自连接查询每个员工及其经理的名字
37 # 一个老板id可能管理多个员工id
38 select e.employee_name,e2.employee_name from employees e left join employees e2 on e.employee_id = e2.manager_id;
39 # 内连接:内连接返回两个表中满足连接条件(共同的)的所有行。只有在两表中有匹配记录的情况下,结果集才包含这些记录。
40 # 查询每个学生及其课程(如果有的话)
41 select s.student_name as '学生姓名',c.course_name as '课程名字' from students s,courses c where s.student_id=c.student_id;
42 select s.student_name as '学生姓名',c.course_name as '课程名字' from students s inner join courses c where s.student_id=c.student_id;
43
44 # 左链接:左连接返回左表中的所有行,以及右表中满足连接条件的行。如果右表中没有匹配的行,则结果为 NULL。
45 # 查询每个学生及其课程(如果有的话)
46 select s.student_name as '学生姓名',c.course_name as '课程名字' from students s left join courses c on s.student_id = c.student_id
47 #看谁为主表 from 主表
48 # 左连接就是students表与courses表匹配的部分基于主表部分查询筛选,如果右表不满足条就为null
49 # 右链接:右连接返回右表中的所有行,以及左表中满足连接条件的行。如果左表中没有匹配的行,则结果为 NULL。
50 # 查询每个学生及其课程(如果有的话)
51 # 同理
52 select s.student_name as '学生姓名',c.course_name as '课程名字' from students s right join courses c on s.student_id = c.student_id
53
54 # 全连接:全连接返回左右两表中所有行。如果某一方没有匹配的行,则结果为 NULL
55 select s.student_name as '学生姓名',c.course_name as '课程名字' from students s left join courses c on s.student_id = c.student_id
56 UNION select s.student_name as '学生姓名',c.course_name as '课程名字' from students s right join courses c on s.student_id = c.student_id;