查询

SELECT 中基本的语法元素的含义
SELECT:一个或多个字段的列表

  • :选择所有列
    DISTINCT:禁止重复
    column|expression:选择指定的字段或表达式
    alias:给所选择的列不同的标题
    FROM table:指定包含列的表
    关键字、子句和语句的概念
    关键字引用一个或单个SQL元素,比如SELECT和FROM是关键字
    子句是SQL语句的一个部分,比如SELECT ename,empno,…是一个子句
    语句是两个或多个子句的组合,比如SELECT * FROM scott.emp是一个SQL语句
    使用DISTINCT 查询唯一列数据
    可以使用DISTINCT关键字获取列中的唯一值
SELECT DISTINCT job FROM emp;

注:DISTINCT关键字会导致索引失效,在大型数据集查询中应尽量避免distinct查询
查询中使用表达式
在查询中可以使用复杂的表达式,比如执行计算或假定推测

SELECT empno,ename,sal*1+0.12

使用列别名
在使用SELECT语句时,可以为列指定别名

SELECT empno,ename,sal*(1+0.12) raised_sal FROM emp;

可以在列后面加一个空格,再指定友好的列名称,或者是使用可选的关键字AS
注:如果列别名中含有空格、特殊字符或者大小写敏感字符,要求使用双引号

SELECT empno 工号,enanme "姓名_NAME",job 职位,sal AS 薪水 from emp;

字符串链接

CREATE ename || '的薪水为:' || sal  员工薪水 FROM emp;

使用||连字符,能够通过列与列之间,列于算术表达式之间或者列与常数之间的链接
指定查询条件
WHERE 子句紧跟在FROM 子句后面
WHERE:限制满足查询条件的行
condition:由列名、表达式、常数和比较操作组成,用来指定查询的条件
condition通常返回一个布尔值,如果该条件为True,则提取满足条件的记录;如果条件为False或Null,则跳过不满足条件的行。

SELECT empno,ename,job,deptno FROM emp
WHERE deptno =20;

在WHERE字句中使用饿了deptno列名等于20这样一个布尔表达式,在WHERE字句中可以使用多种比较操作符,例如大于(>)、大于等于(>=)、小于(<)、小于等于(<=)等于(=)或不等于(<>)等符号。
日期和字符串比较
在WHERE条件子句中,对于数字类型,可以直接输入条件值,但是对于日期和字符串类型,则需要使用单引号括住条件值
注:单引号中的字符是区分大小写的
在查询日期类型的条件时,必须要进行数据类型匹配,例如hiredate提供了衣蛾字符串是非法的,必须使用内置的TO_DATE()函数转换字符串为日期值

SELECT empno,ename,job,sal,hiredate FROM emp
WHERE hiredate = TO_DATE('1981-12-3','YYYY-MM-DD');

注:Oracle 数据库以内部数字格式存储日期,表示为:世纪、年、月、日、小时、分钟和秒,默认日期显示为DD-MON-RR
可以通过使用TO_CHAR函数将日期类型转换为格式化字符串来提供友好查询结果显示

SELECT empno,ename,job,sal,TO_CHAR(hiredate,'YYYY-MM-DD');

使用to_char可以指定日期的显示格式,使得日期的显示符合常见的日期显示格式
范围操作符
使用范围操作符,可以比较一定范围的数据,比如比较两个数字间的值,或者使用LIKE操作符进行模糊查询
BETWEEN-AND操作符:要比较的值是否在两个值之间
IN 操作符:要比较的值是否在任意的值列表中间
LIKE:通过使用通配符来匹配一个字符模版

SELECT empno,ename,job,mgr,hiredate,sal FROM emp 
WHERE sal BETWEEN 1500 AND 1500;
SELECT empno,ename,job,mgr,hiredate,sal FROM emp WHERE hiredate 
BETWEEN TO_DATE('1981-01-01','YYYY-MM-DD') AND TO_DATE('1981-12-31','YYYY-MM-DD');

IN操作符允许在一组值中进行选择
WHERE job IN (‘销售人员’,’职员’,‘分析人员’):
LIKE条件将字符串值进行通配符搜索。使用LIKE查询通常也称为模糊字符串搜索
%通配符:表示零个或多个字符
_通配符:表示一个字符

SELECT empno,ename, job,mgr,hiredate,sal FROM emp 
WHERE ename LIKE 'J%'
SELECT empno,ename,job,mgr,hiredate,sal FROM emp
WHERE hiredate LIKE '%81'

要查询员工名称第三个字符为A的员工列表

SELECT empno,ename,job,mgr,hiredate,sal FROM emp
WHERE ename LIKE '__A%';

排序
数据类型排序规则

日期类型:较早的日期在前面显示
字符类型:依字母顺序显示
空值:升序时显示在最后,降序时显示在最前

SELECT empno,ename,job,mgr,hiredate,sal,deptno FROM emp
WHERE deptno = 20 ORDER BY ename DESC;

先用员工编号排序,再按员工名称进行排序

SELECT empno,ename,job,mgr,hiredate,sal,deptno FROM SCOTT.emp
WHERE deptno = 20  ORDER BY empno,ename DESC;

函数

SELECT empno, INITCAP(ename) ename,hiredate FROM emp
WHERE deptno = 20 ;

函数之间可以嵌套

SELECT CONCAT (empno, INITCAP(ename)) ename,hiredate FROM emp
WHERE deptno = 20;

对于数字型的值,可以使用四舍五入函数来获取整型结果值

SELECT empno,ename,hiredate,ROUND(comm) comm FROM emp
WHERE deptno = 20;

记录函数
要统计表的记录条数或特定的WHERE条件下记录条数,可以使用COUNT(*)函数

SELECT COUNT(*)  记录条数 FROM emp WHERE deptno = 20;

获取唯一记录数,可以使用DISTINCT关键字

SELECT COUNT(DISTINCT job) 职位个数 FROM emp;

汇总和平均值

SELECT SUM(sal) 薪水总计,SUM(comm) 提成总计 FROM emp;

与SUM函数类似的是AVG函数

SELECT AVG(sal) 平均薪资,AVG(comm) 平均提成 FROM emp;

统计函数的NULL值处理
所有统计函数都会忽略列中的空值,因此对于空值需要转化,可以使用NVL函数将列中包含的NULL值的列转换成具体的值。

SELECT MIN(NVL(comm,0)) 最低提成, MAX (NVL(comm,0)) 最高提成 FROM emp;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值