zoukankan      html  css  js  c++  java
  • 多表查询

    多表查询尽量使用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;

  • 相关阅读:
    Django框架---- 信号
    算法----迷宫问题
    算法----数据结构
    算法----其他排序
    Twisted简介
    爬虫----selenium模块
    爬虫----Scrapy框架
    爬虫----requests模块
    关于电脑运行ubunut出现严重发热的问题
    基本操作命令详解
  • 原文地址:https://www.cnblogs.com/fcitx/p/11385289.html
Copyright © 2011-2022 走看看