• 多表查询


    多表查询尽量使用SQL:1999语法

    预先预估可能产生的数据量

    ③SELECT [DISTINCT] * | 列 [别名] , .. | 计算

    ①FROM 数据表 | 行列的集合 [AS] |别名|,数据表 |行列的集合 [AS] [别名] , ...

    ②[WHERE 数据筛选条件(s)]

    ④[ORDER BY 排序字段 | 别名 [ASC | DESC]]

    1.多表查询:

    统计emp,dept表中数据量 ,如果直接使用下列语句查询会造成笛卡儿积,两个表的查询结果积(正确的应该是18条);

    查询另外一个表里的信息需要进行表关联

    SELECT COUNT(*) FROM emp,dept;            //结果是56条,正确的应该是18条

    消除迪尔卡积(会有重复,只不过不显示)

    SELECT * FROM emp,dept WHERE emp.deptno=dept.deptno ;         //根据部门进行关联查询

    SELECT emp e ,dept d WHERE e.deptno=d.deptno ;                 //使用别名进行查寻

    2.表连接

    内连接:内连接为等值连接,等值连接必须保证多张表指定列完全一致

    外连接(左外连接,右外连接,全外连接):可以显示左表或右表完整数据(即使判断条件不足)

    (1)内连接:

    SELECT e.empno,e.enam,e.job,e.deptno,d.dname FROM emp e,dept d WHERE e.deptno = d.deptno ;         

    (2)右外连接:

    SELECT e.empno,e.ename,e.job,d.deptno,d.dname FROM emp e,dept d WHERE e.deptno(+)=deptno;         // 右外连接:【FROM 左表 右表】 左表.字段=右表.字段(+) ;

    (3)左外连接:

    SELECT e.empno,e.ename,e.job,d.deptno,d.dname FROM emp e,dept d WHERE e.deptno=d.deptno(+);         //左外连接:【FROM 左表 右表】 左表.字段(+)=右表.字段 ;

    3.SQL:1999语法支持

    SELECT table.column,table2.column

    FROM table1 [CROSS DOIN table2] |

    [NATURAL JOIN table2] |

    [JOIN table2 USING(column_name)] |

    [JOIN table ON(table.column_name=table2.column_name)] | 

    [LEFT|RIGHT|FULL OUTER JOIN table2 ON(table1.column_name=table2.column_name)] ;

    (1)自然连接(NATURAL),自然连接主要形式是自动获取关联列(列名相同):

    SELECT * FROM emp e NATURAL JOIN dept d ;              //会默认相同字段放在首列,可以查询较大数据量的表

    (2)USING子句(可以指定多个关联列,用于关联列很多)

    SELECT table1.column,table2.column FROM table1 JOIN table2... USING(列1,列2....) 

    SELECT * FROM emp e JOIN dept d USING(deptno) ;

    (3)ON子句(设置关联条件)

    SELECT table1.column,table2.column FROM table1 JOIN table2 ...ON(条件);

    SELECT * FROM emp e JOIN dept d ON(e.deptno=d.deptno);                //根据部门编号查询

    (4)外连接(左外,右外,全外):

    SELECT table.column,table2.column 

    FROM table1 LEFT|RIGHT|FULL OUTER JOIN table2

    ON(table1.column_name=table2.column_name);

    全外连接:全外连接特点是可以将数据表中的全部数据进行展示

    SELECT *  FROM emp e FULL OUTER JOIN dept d

    ON(e.deptno=d.deptno);

    左连接:左边有的,右边没有的为null

    右连接:左边没有的,右边有的为null

    内连接:显示左边右边共有的

    4.集合运算:交集,并集,差集,补集,

    (1)实现交集:INTERSECT

    SELRECT empno,ename,job,deptno FROM emp WHERE deptno=10

                        INTERSECT

    SELECT empno,ename,job,deptno FROM emp;             //显示重复

    (2)实现并集:UNION ALL

    SELRECT empno,ename,job,deptno FROM emp WHERE deptno=10

                    UNION ALL

    SELECT empno,ename,job,deptno FROM emp;            //显示重复

    SELRECT empno,ename,job,deptno FROM emp WHERE deptno=10

                    UNION 

    SELECT empno,ename,job,deptno FROM emp;               //交集不显示重复

    (3)差集(多减少):MINUS

    SELRECT empno,ename,job,deptno FROM emp 

                    MINUS

    SELECT empno,ename,job,deptno FROM emp WHEREdeptno=10;

  • 相关阅读:
    前端代码规范
    使用CSS设置行间距,字间距.
    今天我们要说的画一个三角形,恩,画一个三角形,第一种呢是利用我们的html标签结合css来实现;而第二种方法就就是我们的html5新增的一个标签canves,这个canves就是网页画幕,那么顾名思义就是在网页里建造一个画板,用来画画,好,那接下来就和我一起去看看吧!
    javascript基础程序(算出一个数的平方值、算出一个数的阶乘、输出!- !- !- !- !- -! -! -! -! -! 、函数三个数中的最大数)
    css3 风车旋转
    css3简单的图片轮播
    css3 2D动画的基本用法和介绍
    Android 系统UI设计规则
    Android用户界面程序设计示例
    将博客搬至CSDN
  • 原文地址:https://www.cnblogs.com/fcitx/p/11385289.html
Copyright © 2020-2023  润新知