oracle中sql语句小练习(使用连接查询)

假设A(m,n,p),B(m,n,p)

--1.A表中有某一项m而B表中没有

使用左连接查询:
select a.* from A a left join B b on a.m=b.m where b.m is null;

左连接查询公共部分以及A表中的全部数据,B表中该列值为null的数据即为A中存在而B中不存在的结果。

--2.A表中没有某一项m而B表中有

可改为使用右连接查询:

select b.* from A a right join B b on a.m=b.m where a.m is null;

与上一条类似,只是这次判断A表中不存在而B表中存在的结果,右连接查询公共部分以及B表中的全部数据。

--3.查询A表与B表中某一项m一致,而有其它项不一致的情况,其它几项只要有一项满足不一致则输出查询结果,sql语句如下:

select a.m,a.n,a.p,b.m,b.n,b.p from A a join B b on a.m=b.m where a.n<>b.n or a.p<>b.p;

使用了join...on...的连接查询,在此语句中判断不相等的语法为<>,在这里也可写为!=,此查询为查询两个表共同的部分。

原文地址:https://www.cnblogs.com/jokerr/p/11362854.html

时间: 2024-10-10 05:39:12

oracle中sql语句小练习(使用连接查询)的相关文章

ORACLE 中 SQL语句优化

(1) 选择最有效率的表名顺序(只在基于规则的优化器中有效):  ORACLE的解析器按照从右到左的顺序处理FROM子句中的表名,FROM子句中写在最后的表(基础表 driving table)将被最先处理,在FROM子句中包含多个表的情况下,你必须选择记录条数最少的表作为基础表.如果有3个以上的表连接查询, 那就需要选择交叉表(intersection table)作为基础表, 交叉表是指那个被其他表所引用的表.    (2) WHERE子句中的连接顺序.:  ORACLE采用自下而上的顺序解

跟踪oracle中sql语句执行过程及相关知识拓展

<pre name="code" class="sql">select * from v$sqlarea; select * from v$sqlarea where first_load_time>'2010-11-27/09:30:00'; 这个方法查询结果每条记录显示一条查询语句,且只能查询sql_text小于1000字符的,多余的会被截断. 改进一下: select * from v$sqlarea where first_load_tim

oracle中sql语句

1.数据库中查询字段名:select column_name,data_type ,data_length,data_precision,data_scale from                          user_tab_columns where table_name='表名';  *表名必须大写. 2.数据库中查询所有用户信息:select * from  dba_users; 3.数据库当前用户角色:select * from user_role_privs: 4.pl/s

oracle中sql语句的to_date语法

完整日期:TO_DATE('2009-4-28 00:00:00', 'yyyy-mm-dd hh24:mi:ss'); to_date('2008/09/20','yyyy/mm/dd') 创建视图语句 CREATE VIEW ViewPractice5_1 AS select语句 对列进行操作就可以用case---- case when ....Then .. else .... end SQL语句: SELECTsum(case WHEN sale_price<1000 THEN 1 EL

oracle中 SQL语句 经典练习题

 创建 student 表 创建score表 创建teacher表 创建grade表 --1. 查询Student表中的所有记录的Sname.Ssex和Class列. SELECT s.sname, s.ssex, s.class FROM student s --2. 查询教师所有的单位即不重复的Depart列. SELECT DISTINCT depart FROM teacher --3. 查询Student表的所有记录. SELECT * FROM student --4. 查询Scor

Oracle 中sql语句中的取前n条数据

取得薪水最高的前五名员工 sql: select * from ( select empno,ename,sal from emp order by sal desc) where rownum< 6; 注意: select * from ( table ) where rownum< 6; 取前n条数据,oracle中用rownum < m; 1:其中m-1 等于要取的条数 2:rownum 只能有 < ,<= ,没有 > 3: 如m为6,则取得是前5条数据. 原文地

通过讨论Oracle 中sql语句的执行顺序,判断哪里可以使用定义过的别名

查询语句的执行顺序: select ename as name from scott.emp emp where emp.job=' CLERK' order by name 1.先执行from 确定数据来自哪里 2.再执行where 条件 判断符合条件的数据,可以使用表scoot.emp 的别名emp 3.执行select 查询 查询数据 4.最后执行 order by 对查出来的数据排序,所以order by后可以使用字段eame的别名name 原文地址:http://blog.51cto.

oracle常用SQL语句(汇总版)

Oracle数据库常用sql语句 ORACLE 常用的SQL语法和数据对象 一.数据控制语句 (DML) 部分 1.INSERT (往数据表里插入记录的语句) INSERT INTO 表名(字段名1, 字段名2, ……) VALUES ( 值1, 值2, ……); INSERT INTO 表名(字段名1, 字段名2, ……) SELECT (字段名1, 字段名2, ……) FROM 另外的表名; 字符串类型的字段值必须用单引号括起来, 例如: ’GOOD DAY’ 如果字段值里包含单引号’ 需要

Oracle之sql语句优化

项目中虽然使用了orm映射,但Oracle系统的优化还是很有价值的,这里从sql语句的角度对常用的语句做下总结. 1.from字段中的优化: Oracle安照从右到左的顺序加载表数据,应该把可以排除数据最多的表放到后面(基础表). 比如,在关联查询中,把课程表放到后面,成绩表放到前面,因为课程表数据一般比较少,关联的时候可以快速的过滤掉一些成绩数据. 2.where中的优化: 对可以过滤数据最多的,放到后面,原理也是Oracle执行从下到上(从右到左)的顺序. 3.使用列名替代*: 省去从字典表