关联查询-高级查询

摘要:
关联查询-高级查询关联查询:如果要在表之间关联查询,关键点是连接条件。实验中:SELECTDISTINCTE.ENAME、D.DNAME、D.DEPTNOFROMEMPE、DEPTDWHEREE。DEPTNO=D.DEPTNO;在实验中,emp表和dept表的连接条件是DEPTNO,因此这两个表可以连接;关联查询主要分为三种类型:1。内部连接2。外部链接3。自连接1。内部连接功能:表中不符合连接条件的功能将不显示。

 关联查询-高级查询

关联查询:表与表之间想要关联查询,关键点是连接条件。

连接条件也就是两张表中都有的字段。一般若有n张表,连接条件至少有n-1个。

实验中:SELECT DISTINCT E.ENAME,

D.DNAME,D.DEPTNO FROM EMP E,

DEPT D WHERE E.DEPTNO=D.DEPTNO;实验中emp表和dept表的连接条件就是DEPTNO,所以两张表可以建立连接;

关联查询主要分为三种查询

1.内连接 2.外链接 3.自连接

1.内连接

特点:表中不满足连接条件的是不会被显示的。

select DISTINCT E.ENAME,

D.DEPTNO,D.DNAME,D.LOC,E.SAL FROM EMP E JOIN DEPT D ON E.DEPTNO

=D.DEPTNO WHERE E.SAL>1000;

JOIN 表名 ON 连接条件 :用于表的连接 2.外连接

特点:除了会将满足条件的数据显示出来,也会将不满足的条件显示出来

A.左外连接(以左边的表为驱动表)若该表中某条记录不满足连接,右侧表中的字段为null

关键字:LEFT OUTER

案例:SELECT DISTINCT E.ENAME,

D.DNAME FROM EMP E LEFT OUTER JOIN DEPT D

ON E.DEPTNO=D.DEPTNO;

B:右外连接(与左外连接相反)

关键字 RIGHT OUTER

案例:SELECT DISTINCT E.ENAME

,D.DNAME FROM EMP E RIGHT OUTER JOIN DEPT D ON

E.DEPTNO=D.DEPTNO;

C.全外连接(那边不满足那边null)

关键字: FULL OUTER

案例:SELECT DISTINCT E.ENAME,

D.DNAME FROM EMP E FULL OUTER JOIN DEPT D ON

E.DEPTNO=D.DEPTNO;

D.自连接

当前表的一条记录可以对应当前表自己的多条记录 在一个表中有上下级关系的时候使用!!!

作业:--查看史密斯的上司在哪个城市工作

SELECT DISTINCT E.ENAME,D.ENAME

,D.DEPTNO,DE.LOC FROM EMP E, EMP D,

DEPT DE WHERE E.EMPNO=D.MGR AND E.DEPTNO

=DE.DEPTNO AND D.ENAME='SMITH';

--左外连接 右外链接 简写 +

SELECT DISTINCT E.ENAME,

D.DNAME FROM EMP E JOIN DEPT D ON E.DEPTNO(+)=D.DEPTNO;

那边有+号 就是那边外连接 全外连接不可以的

高级查询

1.子查询 (子查询其实就是一条SELECT查询语句,嵌在其他的SQL语句中)

案例; 查询工资比 clark高的员工 SAL 后面就是子查询

子查询必须用()包住

SELECT ENAME,SAL FROM EMP WHERE SAL>(SELECT SAL FROM EMP WHERE ENAME='CLARK' );

子查询在各个位置的使用情况

      A.在DDL中使用子查询 可以创建一张新表 在这其中 字段出现函数和表达式 要用AS 改别名

案例: CREATE TABLE EMPLAYE AS SELECT DISTINCT E.ENAME AS 名字,E.EMPNO ,E.JOB AS 工作,E.SAL*12 AS 年薪, //这里记住有函数表达式需要改别名

E.DEPTNO,D.DNAME,D.LOC FROM EMP E,DEPT D WHERE E.DEPTNO=D.DEPTNO;

SELECT * FROM EMPLAYE; //查看新创建表的各个字段及内容

     B.在DML中使用子查询

        DELETE FROM EMPLAYE WHERE DEPTNO=(SELECT DEPTNO FROM EMPLAYE WHERE NAME='CLARK' )

     C.子查询在where字句中 子查询根据查询结果分为:

           c1.单行单列子查询。常用于过滤条件,可以配合= >符号使用

           案例;--查询薪水比平均工资高的人 SELECT ENAME,SAL FROM EMP WHERE SAL>( SELECT AVG(SAL) FROM EMP //单行单列指的是子查询结果是单行单列 )

          C2.多行单列子查询 由于查询出多个值在判断条件时要用IN,判断>等符号时配合any all使用

            案列 : --查询同部门的其他员工 子查询 多行单列子查询 查询出多个值 要用in any all 这些代替掉

            SELECT ENAME,JOB,DEPTNO FROM EMP WHERE DEPTNO IN(SELECT DEPTNO FROM EMP WHERE JOB='SALESMAN') AND JOB<>'SALESMAN';

          C3.多行多列子查询:常常被当做一张表查询 C4.exists关键字后面跟一个关键字 当该子查询可以查询出至少一个记录 则 条件成立 返回适合条件的数据

            案例: --有员工的部门

            SELECT DISTINCT DEPTNO,DNAME FROM DEPT D WHERE EXISTS(SELECT * FROM EMP E WHERE E.DEPTNO=D.DEPTNO );

            ----没有员工的部门

             SELECT DISTINCT DEPTNO,DNAME FROM DEPT D WHERE NOT EXISTS(SELECT * FROM EMP E WHERE E.DEPTNO=D.DEPTNO );

           C5.在select子句中使用子查询 (这个暂时搞不懂 )

分页查询(生活中的分页查询在购物时 查询后会出现多少个商品为一页的商品页面)

为什么使用分页查询? 害怕查询数据量大,导致系统资源消耗大,数据冗余严重。

分页查询在每个数据库中基本都有,但是每个数据库的语法不一样 oracle中使用 ROWNUM实现 ROWNUM不存在于任何一张表,但是所有表都可以查询该字段,只要查询出一条数据他就会记录该记录的行号,从1开始增1

--分页查询 ROWNUM SELECT ROWNUM,ENAME,SAL,DEPTNO FROM EMP

免责声明:文章转载自《关联查询-高级查询》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Mysql查找如何判断字段是否包含某个字符串Egret Engine(白鹭引擎)介绍及windows下安装下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

SQLServer中进行sql除法运算

转自:http://blog.sina.com.cn/s/blog_8020e41101019k7t.html SELECT field1/field2 FROM TB; 当 field1的数值 > field2的数值时,除法得出的结果是<1的,即0.xxxxxx 这个时候在DB2的环境下SELECT出来的值是0 解決方法: 先把field1转...

sqlplus 配置方法及相关命令

sqlplus 配置方法及相关命令 1.配置文件 1.1 全局模式什么叫全局模式呢:当我们配置完sqlplus工具加载配置文件后,无论在哪个目录下登陆数据库,您设置【sqlplus提示符样子,在任何目录下进入sqlplus工具都会加载此提示符样子】的效果都可以呈现出来1.glogin.sql 配置文件的位置答:$ORACLE_HOME/sqlplus...

mybatis二(参数处理和map封装及自定义resultMap)

1、单个参数 mybatis不会做特殊处理。   #{参数名/任意名}:取出参数值。 2、多个参数 mybatis会做特殊处理。   多个参数会被封装成 一个map。   key:param1...paramN,或者参数的索引也可以。   value:传入的参数值。   #{}就是从map中获取指定的key的值;   多个参数传递的时候要使用...

selenium select下拉选择框定位处理的两种方式

一、前言      总结一下python+selenium select下拉选择框定位处理的两种方式,以备后续使用时查询; 二、直接定位(XPath) 使用Firebug找到需要定位到的元素,直接右键复制XPath,使用find_element_by_xpath定位; driver = webdriver.Firefox() driver.get("htt...

42岁大龄程序员的迷茫,看我最新尝鲜.net 5+Dapper搭建的WebAPI框架

42岁大龄程序员的迷茫 我真傻,真的。我单知道雪天是野兽在深山里没有食吃,会到村里来;我不知道春天也会有…… 我真傻,真的。我单知道程序员要活到老学到老,年龄大了要失业;我不知道码农(新型农民工)也会有…… 上周回老家有点无聊就去小破站看了点视频,是讲Dapr的实践(朝夕教育某讲师的公开课录屏),看完非常之震撼:原来微服务离我那么近! 虽然有失业的风险,...

Sql Server的艺术(七) SQL 数据插入操作

--用INSERT插入单行数据    在SQL中,可以通过INSERT...VALUES语句直接向数据库表中插入数据。可以整行,也可以部分列。 基本语法: INSERT INTO table_name [column1,column2...] VALUES (values1,values2...