美文网首页
MySQL多表查询

MySQL多表查询

作者: 你猜_e00d | 来源:发表于2018-09-16 20:26 被阅读0次

    链接查询

    什么是链接查询

    也可以叫跨表查询,需要关联多个表进行查询

    什么是笛卡尔集

    假设集合A={a,b},集合B={0,1,2},
    则两个集合的笛卡尔集为 {(a,0),(a,1),(a,2),(b,0),(b,1),(b,2)}
    可以拓展到多个集合的情况

    同时查询两个表(使用一个SQL语句),出现的就是笛卡尔集结果

    SELECT *FROM students,score;

    解决方法

    要保证我们当时建表的时候,关系的那个键保持一致
    SELECT *
    FROM students,score
    WHERE students.id = score.sid;

    内连接划分

    内连接分为:等值连接,非等值连接,自然连接

    内连接之等值连接

    两个表同时出现的id号(值)才显示

    1. 99写法

    SELECT * FROM
    students st,score sc
    WHERE st.id = sc.sid;

    2.内连接写法

    SELECT * FROM students st INNER JOIN score sc ON st.id = sc.sid

    注意:

    多表联查约束主外键一样,只是写法改变了
    ON后面只写主外键4. (对于结果)如果还有条件直接在后面写WHERE5. 多表联查后还有条件就直接写AND

    左链接

    两表满足条件相同的数据查出来,如果左边表当中有不相同的数据,也把左边表当中的数据查出来.(换句话说就是左边表数据全部查询出来,右边表只查询满足条件的)

    --OUTER可以省略
    SELECT *
    FROM students st
    LEFT OUTER JOIN score sc
    ON st.id = sc.sid;
    
    右链接

    右连接会把右当中的数据全部查出,左表当中只查满足条件的数据
    站在表的角度去看,使用左连接就会把左边的内容全部查出,右边查出满足条件的
    使用右连接,就把右边表当中的数据全部查出,左边查出满足条件的

    SELECT *
    FROM students st
    RIGHT OUTER JOIN score sc
    ON st.id = sc.sid;
    

    自然连接

    连接查询会产生无用笛卡尔集,我们通常使用主外键关系等式来去除它.
    而自然连接无需你去给出主外键等式,它会自动找到这一等式
    也就是说不用去写条件
    但是自然连接有一个要求

    1. 两张连接的表中列名称和类型完全一致的列作为条件
    2. 会去除相同的列

    子连接

    子查询

    什么是子查询
    1. 一个select语句中包含另外一个完整的select语句
    2. 或者说两个以上select,那么就是子查询语句了
    子查询出现的位置

    1.where后,把select查询出的结果当做另外一个select的条件值
    2.from后,把查询出的结果当作一个新表

    例如:
    先查出项羽所在的部门编号

    SELECT deptno FROM emp WHERE ename = '项羽';

    再根据编号查询同一部门的员工

    SELECT ename FROM emp WHERE deptno = 20;

    把第1条查出来的结果当第2条语句的条件

    SELECT ename,deptno FROM emp
    WHERE deptno = (SELECT deptno FROM emp WHERE ename = '项羽')

    相关文章

      网友评论

          本文标题:MySQL多表查询

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