美文网首页半栈工程师
使用连接实现多表检索

使用连接实现多表检索

作者: TinyDolphin | 来源:发表于2018-01-05 16:22 被阅读0次

    SELECT 语句的基本语法

    内连接(INNER JOIN)

    -- 将 t1 里的每一行与 t2 里的每一行进行组合
    SELECT * FROM t1 INNER JOIN t2;
    
    -- 连接类型 CROSS JOIN 和 JOIN 都等同于 INNER JOIN
    SELECT t1.*,t2.* FROM t1 INNER JOIN t2 WHERE t1.i1 = t2.i2;
    SELECT t1.*,t2.* FROM t1 CROSS JOIN t2 WHERE t1.i1 = t2.i2;
    SELECT t1.*,t2.* FROM t1 JOIN t2 WHERE t1.i1 = t2.i2;
    -- 连接运算符","也与之类似。尽量避免使用逗号运算符,因为可能会导致语法错误。
    SELECT t1.*,t2.* FROM t1,t2 WHERE t1.i1 = t2.i2;
    -- 用 ON 子句代替 WHERE 子句
    SELECT t1.*,t2.* FROM t1 INNER JOIN t2 ON t1.i1 = t2.i2;
    -- 使用 USING() 子句:要求被连接的列必须同名
    SELECT tbl_name1.*,tbl_name2.* FROM tbl_name1 INNER JOIN tbl_name2 USING(id);
    

    对被连接表里的列引用进行限定
    尽量使用别名进行限定。

    左(外)连接和右(外)连接
    外连接:除了显示同样的匹配结果,还显示其中一个表在另一个表里没有匹配的行也显示出来。分为左连接右连接

    左连接(LEFT JOIN)
    对于左表查询出的每一行,不管它在右表中是否有匹配,LEFT JOIN 都会强制结果集包含这一行记录,只不过来自右表的所有列都为 NULL
    右连接相反。

    -- 左连接
    SELECT t1.*,t2.* FROM t1 LEFT JOIN t2 ON t1.i1 = t2.i2;
    -- 将左表中的那些在右表中无匹配的行找出来
    SELECT t1.* FROM t1 LEFT JOIN t2 ON t1.i1 = t2.i2
    WHERE t2.i2 IS NULL ;
    
    -- 查询哪些学生在给定考试事件中没有成绩
    SELECT st.name,st.student_id,g.data,g.event_id,g.category
    FROM student st
    INNER JOIN grade_event g
    LEFT JOIN score s
    ON st.student_id =  s.student_id
    AND g.event_id = s.event_id
    WHERE s.score IS NULL
    ORDER BY st.student_id,g.event_id;
    

    相关文章

      网友评论

        本文标题:使用连接实现多表检索

        本文链接:https://www.haomeiwen.com/subject/nuksnxtx.html