oracle 查询

SELECT

  1. DISTINCT:表示去掉重复行数据;
  2. 各种数学计算(+、-、×、÷)

在使用 WHERE 子句操作的时候可以进行条件的判断

关系运算(>、<、>=、<=、<>、!=)、范围运算符(BETWEEN…AND)、IN 子句、LIKE 子句、空判断

逻辑运算:AND、OR、NOT(求反,TRUE 变 FALSE、FALSE 变为 TRUE)。

SELECT * FROM emp WHERE NOT job='CLERK'

如果觉得 NOT 不好用,可以直接使用“!=”完成。

所有的判断符号都支持字符串、数字、日期型数据的操作

空判断:IS NULL、IS NOT NULL

NULL 是一种特殊的数值,在标准的解释来讲,空表示的是一个不确定的内容。对于 NULL 的判断不能够使用传统
的关系运算符。

SELECT * FROM emp WHERE comm IS NULL ;

SELECT * FROM emp WHERE comm IS NOT NULL ;

提醒:在进行数字列的表示上,0 和 NULL 是绝对不一样的两个概念。

基数范围:IN、NOT IN

注意:关于 IN 操作的问题
· 对于 IN 操作而言是针对于基数的判断,如果说此时在使用 NOT IN 的时候基数里面包含了 NULL,那么所有满足
的数据都不会被显示

模糊查询:LIKE

LIKE 子句可以实现数据库之中的模糊数据查询,但是这种查询的方式只适合于小数据的情况,不适合于所谓的搜索
引擎的搭建操作。因为搜索引擎上的检索是基于分词的操作原理实现的。

  1.  “_”:匹配任意一个字符;
  2. “%”:匹配 0 个、1 个或多个任意字符。

ORDER BY 子句

ORDER BY 子句是写在最后行的,而且永恒在最后一行

· ASC:升序,是默认的方式;
· DESC:降序,必须由用户设置。

多表查询

多表查询指的是同时从多张数据表之中取出数据实现的查询

范例:解决笛卡尔积
SELECT * 
FROM emp ,dept 
WHERE emp.deptno=dept.deptno ;
此时虽然消除了显示的笛卡尔积,但是笛卡尔积依然是存在的,因为这个是由数据库本身的数学公式所决定的先天
性问题。

虽然最终的操作已经成功的消除掉了显示的笛卡尔积,但是遗憾的是整个运算执行过程非常的缓慢,所以在实际的
工作之中,尤其是在你进行数据表设计的时候应该尽可能的避免查询有可能出现的笛卡尔积问题。
结论:在数据量大的时候绝对不要采用多表查询,而且就算是数据量小,也别用多表查询。

连接方式

对于多表查询来讲其有两种表的连接方式:
· 内连接:也被称为等值连接,在之前的所有查询都属于内连接;
· 外连接:左外连接、右外连接、全外连接。

内连接: 等值连接,有 null 的不显示

外连接:现在需要查询的数据没有出现(null)才用

(只有 Oracle 可以使用)

· 左外连接:字段 = 字段(+),“(+)”在等号右边表示左外连接;
· 右外连接:字段(+) = 字段,“(+)”在等号左边表示右外连接;

1、 交叉连接,其主要的目的是为了产生笛卡尔积
语法:
SELECT * | 字段 [别名] FROMCROSS JOIN 表 ;
范例:
SELECT * FROM emp CROSS JOIN dept ;
2、 自然连接,主要是消除掉笛卡尔积(内连接)
语法:
SELECT * | 字段 [别名] FROM 表 NATURAL JOIN 表 ;
范例:
SELECT * FROM emp NATURAL JOIN dept ;
3、 使用 USING 子句,用户指定关联字段
语法:
SELECT * | 字段 [别名] FROMJOIN 表 USING(字段);
范例:
SELECT * FROM emp JOIN dept USING(deptno) ;
4、 使用 ON 子句指定关联条件
语法:
SELECT * | 字段 [别名] FROMJOINON(条件);
范例:
SELECT * FROM emp e JOIN dept d ON(e.deptno=d.deptno) ;
5、 外连接
语法:
SELECT * | 字段 [别名] FROMLEFT | RIGTH | FULL OUTER JOIN 表];
范例:
SELECT * FROM emp e LEFT OUTER JOIN dept d ON (e.deptno=d.deptno);
SELECT * FROM emp e RIGHT OUTER JOIN dept d ON (e.deptno=d.deptno);
SELECT * FROM emp e FULL OUTER JOIN dept d ON (e.deptno=d.deptno);

查询结果连接

UNION(去除相同行、并)、UNION ALL、INTERSECT(交)、MINUS(差)

猜你喜欢

转载自www.cnblogs.com/xianting/p/10594446.html