sql连接查询

柔情只为你懂 2023-10-05 22:34 109阅读 0赞

按功能分类:

内连接:

等值连接、非等值连接、自连接

外连接:

左外链接、左链接

右外链接、右链接

完全外链接

全连接

交叉连接

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzgwMjA0NA_size_16_color_FFFFFF_t_70

按年代分类

sql 92标准,又称sql2

sql 99标准【推荐】,又称sql3

交叉连接

--笛卡尔积(将两张表的数据拼接在一起,总记录数为两张表记录量的乘积 ( 表*表 )

  1. select * from a,b;

内连接 INNER JOIN

等值连接

  1. #92语法(查询A表人对应的妻子)
  2. select * from a,b where a.wife = b.id;
  3. #99语法
  4. select * from a inner join b on a.wife = b.id;

7e929a3075784dbdac8455c86d9b7033.png

非等值连接

  1. #查询每个员工对应的工资等级
  2. select e.ename, s.grade
  3. from emp e
  4. inner join salgrade s
  5. on e.sal between s.losal and s.hisal;

17da36e05b944c52a3c497fd7e656e72.png

自连接

  1. #查询每个人的领导(一张员工表领导也是这个公司的员工)
  2. select e1.ename,'上司是',e2.ename
  3. from emp e1
  4. inner join emp e2
  5. on e1.mgr = e2.empno;

37b841fd0d0f45c6b160d255ac3c193f.png

外连接:

左连接LEFT JOIN

  1. select * from a left join b on a.wife = b.id;

b753e8384e93476390cac278658da7ea.png

右连接RIGHT JOIN

  1. select * from a right join b on a.wife = b.id;

d5e0fa1daf0246b1aca811e88aaf8712.png

左外链接

  1. select * from a left join b on a.wife = b.id where b.id is null;

0bc2d4abd7c0440cb1aa160046821099.png

右外链接

  1. select * from a right join b on a.wife = b.id where a.id is null;

e7fb58ef76924826a259b5a84c91eb2a.png

完全外链接

mysql不支持full join

  1. select * from a left join b
  2. on a.wife = b.id where b.id is null
  3. union all #union all是将两个select语句的结果求并集
  4. select * from a right join b
  5. on a.wife = b.id where a.wife is null;

6a256b9b48104805b87b2231fe1870df.png

全连接

除了显示满足连接的条件的行外,还显示了join两侧表中所有满足检索条件的行

  1. select * from a left join b
  2. on a.wife = b.id
  3. union all
  4. select * from a right join b
  5. on a.wife = b.id;

6c02f9fdbede43679e36a8868f2b67c8.png

另附数据表

  1. CREATE TABLE EMP
  2. (EMPNO int(4) not null ,
  3. ENAME VARCHAR(10),
  4. JOB VARCHAR(9),
  5. MGR INT(4),
  6. HIREDATE DATE DEFAULT NULL,
  7. SAL DOUBLE(7,2),
  8. COMM DOUBLE(7,2),
  9. primary key (EMPNO),
  10. DEPTNO INT(2)
  11. )
  12. ;
  13. CREATE TABLE SALGRADE
  14. ( GRADE INT,
  15. LOSAL INT,
  16. HISAL INT );
  17. #自行加数据
  18. INSERT INTO DEPT ( DEPTNO, DNAME, LOC ) VALUES (
  19. 10, 'ACCOUNTING', 'NEW YORK');
  20. INSERT INTO EMP ( EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM,
  21. DEPTNO ) VALUES (
  22. 7369, 'SMITH', 'CLERK', 7902, '1980-12-17'
  23. , 800, NULL, 20);

发表评论

表情:
评论列表 (有 0 条评论,109人围观)

还没有评论,来说两句吧...

相关阅读

    相关 sql连接查询

    按功能分类: > 内连接: > > 等值连接、非等值连接、自连接 > > 外连接: > > 左外链接、左链接 > > 右外链接、右链接 > > 完全外链接 >

    相关 sql的子连接查询

            一直没有注重于sql这一块,现在的项目有大量的统计,报表,以前都是多表连接或者用mybatis的延迟加载之类的,这几天心血来潮自己查了一下,发现了sql子查询这