花点时间整理下sql基础,温故而知新。文章的demo来自oracle自带的dept,emp,salgrade三张表。解锁scott用户,使用scott用户登录就可以看到自带的表。

#使用oracle用户登录linux

[oracle@localhost ~]$ sqlplus / as sysdba;

......

SQL> alter user scott account unlock;

四大语句

DQL语句——select

DML语句——insert,upate,delete等(关键字后带表名)

DDL语句——create,alter,drop等(关键字后带table关键字再跟表名)

事务控制语句——commit,rollback

基础select语句

简单select语句

select * from emp;

 

包含算术表达式的语句

--查询出来的sal乘以5

select ename , sal*5 from emp;

 

--表中取出2*3的结果

select 2*3 from emp;在emp;

 

--当我们需要显示一个结果的时候就用系统提供的dual虚表

select 2*3 form dual;

 

获取系统当前的时间

--sysdate在Oracle中表示当前系统时间

select sysdate from dual;

含有别名的语句

--显示出来的是salary字段名而不是sal

select ename, sal*12 salary from emp;

 

含有空值

空值表达式

--含有任何null值的数学表达式最后的结果都为null

select ename, sal*5+comm from emp;

空字符串(字符串、字符串连接符

--含有任何null值的字符串表达式中,null被当作空字符串处理

select empno, ename || 'abc' || mgr from emp;

 

--字符串连接符:||。select语句中用单引号表示字符串

 

distinct消除重复

--用distinct消除结果集中deptno相同的记录

select distinct deptno from emp;

 

--消除结果集中job和deptno都相同的记录

select distinct job, deptno from emp;

 

where 条件过滤

等值判断

select * from emp where empno = 7369;

 

非等值判断

(1)>,<,>=, <= ,<>

 

--取出所有部门号不是10的雇员的名字和薪水

select ename, sal from emp where deptno <> 10;

 

(2)between..and..

 

--包含最大值和最小值

select ename, sal from emp where sal between 800 and 1500;

 

(3)字符串比较

比较字符串ASCII码值的比较,先比较第一字母,依次比较每个字母

 

select ename, sal from emp where ename > ‘DBA’;

 

空值处理

--为空

select ename from emp where comm is null;

 

--不为空

select ename from emp where comm is not null;

注意,select ename from emp where comm = null;这种写法表示comm字段的值等于null,is null 或者is not null返回的boolean值,而=null返回的是null。null是一种特有的数据类型,其等价于没有任何值、是未知数。因此通常会获取不到结果却不提示语法错误。

in语句

--在选定范围

select ename, sal from emp where sal in (800, 1250, 1500, 2000);

 

--不在选定范围

select ename, sal from emp where sal not in  (800, 1500, 2000);

日期处理

--Oracle默认的日期格式为:DD-MON-RR

select ename, hiredate from emp where hiredate > ’20-2月-1981’;

 

--to_char(),把日期类型字段转为指定格式的字符串

--输出2008-04-04

select to_char(sysdate, ‘YYYY-MM-DD-HH24:MI:SS’) from dual;

 

--to_date(),将日期字符串转为指定格式的日期

select * from emp where hiredate > to_date(‘1981-03-02’, ‘YYYY-MM-DD’);

and,or,not语句

--and

select deptno, ename, sal from emp where deptno = 10 and sal > 1000;

 

--or

select deptno, ename, sal from emp where deptno = 10 or sal > 1000;

 

--not

select ename, sal from emp where sal not in  (800, 1500, 2000);

like模糊查询(通配符匹配、单字符匹配、转义字符

(1)通配符%,代表0个或者多个字符

 

select ename from emp where ename like ‘%ALL%’; 

 

(2)单个字符-,代表一个字符

 

select ename from emp where ename like ‘_A%’;

 

(3)转义字符\,统默认的转义字符是 ‘\’

 

--中间的%不表示通配符,而是表示姓名包含%

select ename from emp where ename like ‘%\%%’;

 

order by排序

asc升序

select ename, sal from emp order by ename asc;

desc降序

select ename, deptno from emp order by ename desc;

 

常用sql函数

lower()——将字符串全部转成小写

select lower(ename),sal from emp where lower(ename) like '%a%';

upper()——将字符串全部转成大写

select upper(ename),sal from emp where upper(ename) like '%a%';

substr()——截取字符串

--从第2个字符开始截取ename

select substr(ename, 2) from emp;

 

--substr('hello',1,3),输出hel,第三个参数可以省略

select substr('hello', 1,3) from dual;

 

 

 

 

chr()——求一个与某个ASCII码值对应的字符

select chr(65) from dual;

ascii()——求一个字符的ASCII码值

select ascii(‘A’) from dual;

round()——四舍五入

对参数值进行四舍五入,可以指定四舍五入到小数点后几位,可以用负数指定小数点前面几位

--输出24

select round(23.652) from dual;

 

--输出23.65

select round(23.652,2) from dual;

 

--输出20,-1表示对个位数进行四舍五入

select round(23.652,-1) from dual;

 

--输出0,-2表示对十位数进行四舍五入

select round(23.652,-2) from dual;

to_char()——日期类型转字符串

把日期类型字段转为指定格式的字符串,可以精确到时分秒

--输出2008-04-04

select to_char(sysdate, ‘YYYY-MM-DD’) from dual;

 

--2008-04-04 01:10:21

select to_char(sysdate,'YYYY-MM-DD hh:mm:ss') from dual;

to_date()——字符串转为日期类型

将日期字符串转为指定格式的日期

select * from emp where hiredate > to_date(‘1981-03-02’, ‘YYYY-MM-DD’);

 

to_number()——字符串转数字

将指定的字符串转换成数字格式,第一个参数为要转为数字的字符串(一定要确保所转换字段是可转换为数字的,否则报“invalid number”),第二个参数为指定的格式

select * from emp where sal > to_number(‘$1,200.00’, ‘$9,999.99’);

nvl()——空值处理

这个函数有两个参数:

第一参数:字段名或表达式,如果这个参数值为null,就返回第二参数值,否则返回第一参数值。

select ename, sal*12+nvl(comm, 0) from emp;

 

组函数

min()——求最小值

max()——求最大值

avg()——求平均值

sum()——求总和

select sum(sal), avg(sal), max(sal), min(sal) from emp;

count()——求数量

--求记录数量

select count(*) from emp;

 

--求comm字段中所有非空记录的数量

select count(comm) from emp;

 

--和distinct一起使用,得到所有唯一值记录的数量

select count(distinct deptno) from emp;

 

分组函数

对组函数的查询结果进行分组

group by

使用group by 的规律:出现在select列表中的字段,如果没有出现在组函数中,则必须出现在group by子句中。

select deptno, avg(sal) from emp group by deptno;

 

--典型错误,group by缺少ename

select ename, deptno, max(sal) from emp group by deptno;

 

--求出每个部门中最赚钱的那个人的名字

select ename, deptno, sal from emp where sal in (

select sal from (

select deptno, max(sal) sal from emp group by deptno

))

having

 

having语句的作用是对分组之后的数据进行过滤数据,where 语句的作用是分组之前过滤数据。

--注意不能使用where

select avg(sal), deptno from emp group by deptno having avg(sal) > 2000;

 

综合练习

从emp这张表里把平均工资和部门编号列出来,并且过滤掉大写是A的名字 把剩下的数据按照部门编号进行分组,分组之后的平均薪水必须大于2000,按照部门编号的倒序排列。

分析:分组,过滤,排序;过滤又包含分组前过滤(where)和分组后过滤(having)。编写顺序:分组前过滤(where) > 分组(group by) > 分组后过滤(having) > 排序(order by)

select avg(sal),deptno,ename from emp  where ename not like '%A%' group by deptno,ename having avg(sal) > 2000 order by deptno desc;

 

本文就到此,下一篇我们继续整理多表连接查询、子查询、视图相关内容。

 

 

oracle(sql)基础篇系列(一)——基础select语句、常用sql函数、组函数、分组函数的更多相关文章

  1. oracle(sql)基础篇系列(五)——PLSQL、游标、存储过程、触发器

      PL/SQL PL/SQL 简介 每一种数据库都有这样的一种语言,PL/SQL 是在Oracle里面的一种编程语言,在Oracle内部使用的编程语言.我们知道SQL语言是没有分支和循环的,而PL语 ...

  2. oracle(sql)基础篇系列(五)——PLSQL、游标、存储过程、触发器

    PL/SQL PL/SQL 简介 每一种数据库都有这样的一种语言,PL/SQL 是在Oracle里面的一种编程语言,在Oracle内部使用的编程语言.我们知道SQL语言是没有分支和循环的,而PL语言是 ...

  3. 【目录】mysql 基础篇系列

    随笔分类 - mysql 基础篇系列 mysql 开发基础系列22 SQL Model(带迁移事项) 摘要: 一.概述 与其它数据库不同,mysql 可以运行不同的sql model 下, sql m ...

  4. 撸基础篇系列,JAVA的NIO部分

    前言:撸基础篇系列,避免每次都要从头开始看,写个自己的知识体系树 NIO 核心就是异步, 比如,复制文件,让操作系统去处理,等通知 BIO核心类 一,BIO NIO基本操作类 Bytebuffer 构 ...

  5. oracle(sql)基础篇系列(一)——基础select语句、常用sql函数、组函数、分组函数

    花点时间整理下sql基础,温故而知新.文章的demo来自oracle自带的dept,emp,salgrade三张表.解锁scott用户,使用scott用户登录就可以看到自带的表. #使用oracle用 ...

  6. oracle(sql)基础篇系列(二)——多表连接查询、子查询、视图

        多表连接查询 内连接(inner join) 目的:将多张表中能通过链接谓词或者链接运算符连接起来的数据查询出来. 等值连接(join...on(...=...)) --选出雇员的名字和雇员所 ...

  7. oracle(sql)基础篇系列(二)——多表连接查询、子查询、视图

    多表连接查询 内连接(inner join) 目的:将多张表中能通过链接谓词或者链接运算符连接起来的数据查询出来. 等值连接(join...on(...=...)) --选出雇员的名字和雇员所在的部门 ...

  8. 与你一起学习MS Project——基础篇:Project基础应用

    为了更清晰容易地熟悉掌握Project的基础应用,我们在基础篇中一起来学习掌握在Project中如何做进度计划.资源计划.成本计划以及跟踪项目的执行情况并生成所需的项目报表. 一.进度计划 这里,首先 ...

  9. 【matlab 基础篇 02】基础知识一键扫盲,看完即可无障碍编程(超详细+图文并茂)

    博主快速入门matlab,系统地整理一遍,如何你和我一样是一个新手,那么此文很适合你: 本人能力有限,文中难免有错误和纰漏之处,请大佬们不吝赐教 创作不易,如果本文帮到了您: 请帮忙点个赞

随机推荐

  1. [Machine Learning] logistic函数和softmax函数

    简单总结一下机器学习最常见的两个函数,一个是logistic函数,另一个是softmax函数,若有不足之处,希望大家可以帮忙指正.本文首先分别介绍logistic函数和softmax函数的定义和应用, ...

  2. redis 间断性耗时长问题解决

    我发现开发项目用的redis 隔一两分钟就出现 耗时问题,长达五秒.一开始以为是 redis 服务器不稳定,但运维测试发现redis稳定的,在高并发下最大耗时也就只有100毫秒左右,怎么也不可能达到5 ...

  3. php中的高危函数

    phpinfo() 功能描述:输出 PHP 环境信息以及相关的模块.WEB 环境等信息. 危险等级:中 passthru() 功能描述:允许执行一个外部程序并回显输出,类似于 exec(). 危险等级 ...

  4. less入门

    less入门 安装 首先安装node,执行命令 node install -g less安装完成后可以在任意窗口中使用lessc命令,将.less文件编译成css文件. 变量 可以像其他语言一样声明变 ...

  5. [原创]CSS3打造动态3D气球

    周末在江边晨跑的时候发现很多 当时心血来潮就想,应该可以在网页中实现一下 这几天得闲就做了一下,效果如下 (尽量在最新版本的chrome或者firefox中查看) demo下载在文章最后 预览 --& ...

  6. Makefile的编写

    makefile介绍 makefile的功能是管理源文件的编译链接,在makefile我们可以定义一系列的规则来指定哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能 ...

  7. overridePendingTransition简介

    1 Activity的切换动画指的是从一个activity跳转到另外一个activity时的动画. 它包括两个部分:一部分是第一个activity退出时的动画:另外一部分时第二个activity进入时 ...

  8. C++编译期间字节序判断

    当前常用的字节序一般就两种,大端序和小端序. 下面列出四种字节序的表达方式.在对应平台下,内存布局为{0x,00,0x01,0x02,0x03}的四字节,表示为十六进制的值就如下面代码所示的. END ...

  9. css3 自定义字体的使用方法

    @font-face是CSS3中的一个模块,他主要是把自己定义的Web字体嵌入到你的网页中,随着@font-face模块的出现,我们在Web的开发中使用字体不怕只能使用Web安全字体,你们当中或许有许 ...

  10. ssh配置git clone简易流程

    1. 生成密钥 ssh-keygen -t rsa -C "jaynaruto@qq.com" //如果只有一对密钥,建议不要修改默认的密钥名称,即一直按回车即可 此命令会在你当前 ...