SQL含义+单行函数

1.SQL含义

SQL(Structured Query Language)结构化查询语言。
   查询是一种从一个或多个表或视图中检索数据的操作,不会改变表中的数据。
   查询数据是数据库的核心操作,是使用频率最高的操作。

2.select的表结构

select语句的基本用法格式
   select【distinct】* |列名1【as c1】,列名2[as c2]...,列名n,组函数(...)
   from 表名1 别名1,表名2 别名2...
   [where 条件]
   [group by 列名1,列名2....,列名n ]
   [having 条件]
   [order by 排序列名1  ASC|DESC(降序),排序列名2 ASC(升序)|DESC ]

3.SQL执行计划顺序,及其distinct(去重)、||、nvl空置置换函数

   SQL执行计划
      (8)SELECT (9)DISTINCT (11)<Top Num> <select list>

      (1)FROM [left_table]

      (3)<join_type> JOIN <right_table>

      (2) ON <join_condition>

      (4)WHERE <where_condition>

      (5)GROUP BY <group_by_list>

      (6)WITH <CUBE | RollUP>

      (7)HAVING <having_condition>

      (10)ORDER BY <order_by_list>

   表的别名,列的别名
   distinct    关键字: 去重,必须放在开头字段前,会作用于后面所有的字段
                   本身是 二重循环查询,当数据量较大时,不适用

        ||   表示拼接(拼接符为||‘这里可以添加内容‘||
     nvl(列,值)  表示空值置换函数
  !!注意:null值和所有数据计算,结果都为null

4.dual是oracle中的虚拟表

dual :是Oracle自带的一张虚拟表,没有任何意义,为了保证sql语句的完整性。
--查询当前数据库系统时间(sysdate)
   select sysdate from dual;
-- 获取 ‘hello’
  select  ‘hello‘  from dual;

5.SQL的单行函数

单行函数

   第一种:数字函数 round() 和  trunc()

     round(列 | 值 | 表达式,小数的有效位数)  四舍五入
        select round(3.141592,3)from dual;
   结果:3.142  那么(3.141592,3)里面3为取小数点第三位,四舍五入后的结果
     trunc(列 | 值 | 表达式,小数的有效位数) 直接截取
         select trunc(3.141592,3) from dual;
  结果:3.141  那么(3.141592,3)里面3同上,不四舍五入

  补充:select round(3.14159,0) from dual;
        (3.14159,0)里面的0代表取整,即结果为3

       select round(33.14159,-1) from dual;
         (33.14159,-1) 里面的-1代表取十位数30
                      换成-2取百位数,这里取0

     trunc同上!!!!

--查询订单表s_ord中总金额total(取整)
select trunc(total,0) from s_ord where trunc(total,0)=200;(不四舍五入)
select round(total,0) from s_ord;(四舍五入)

第二种  求余数  mod()
  mod(列|值,列|值)     求余数
--求5/2的余数
  abs(列|值)        求绝对值
--求-2的绝对值

--查询订单表s_ord中总金额total(取整)
select trunc(total,0) from s_ord where trunc(total,0)=200;(不四舍五入)
select round(total,0) from s_ord;(四舍五入)

第三种 求绝对值  abs()
 abs(列|值)        求绝对值
--求-2的绝对值


第四种  字符函数   length()
  length(列 | 值 | 表达式):求长度

--获取员工表中员工名字及其名字长度
select  first_name,length(first_name) from  s_emp;
    ;
--查询出员工姓名长度为6的员工信息
select * from s_emp where length(first_name)=6;

第五种  大小写字母转换 upper(),lower(),initcap()
upper(列|值|表达式);全部转大写字母
lower(列|值|表达式);全部转小写字母
initcap(列|值|表达式);每个单词首字母大写
%(百分号),_(下划线)为通配符

select upper(‘abc‘)from dual;==>ABC
select lower(‘ABC‘)from dual;==>abc
select initcap(‘hello world‘)from daul;==>Hello World

第六中  填充补全 lpad(),rpad()
lpad(列|值,宽度,填充字符);从左边补不足宽度个填充字符
rpad(列|值,宽度,填充字符);从右边补不足宽度个填充字符

select lpad(‘abc‘,10,‘de‘)from dual;
----------------
    dedededabc

select rpad(‘abc‘,10,‘de‘)from dual;
------------------
    abcdededed
注意:包含自己在内10个

第七种  左右截取  ltrim(),rtrim()
ltrim(列|值,截取字符);从左边截取字符
rtrim(列|值,截取字符);从右边截取字符

select rtrim(‘abcdedede‘,‘de‘) from dual;
------------
    abc
select rtrim(‘abcddedede‘,‘de‘) from dual;
--------------
    abc  ==》表示从右边开始截取de|d|e,直到不同于截取字符的字符为止

第八种 置换指定字符即替换  replace()
replace(列|值,被置换的字符,置换的字符);置换指定字符

select replace(‘helloworld‘,‘owo‘,‘***‘)from dual;==》hell***rld

select replace(111222333,22222,666)from dual;==>111666333

第八种 转换指定字符
translate(参数一,参数二,参数三);转换指定字符
参数一:要处理的内容,列|值
参数二:要检索的内容      先执行
参数三:检索后,与检索内容一一对应替换的内容(如果无替换值,则全部去掉)

select translate(‘zhongg48‘,‘z23090o45664g‘,‘p23tddy67‘) from dual;
===》  phyn68

参数1和参数2对比,数字都有,参数3没有去掉;参数1中的字母,参数2中有的按参数2的位置和参数三一一对应

第九种 查询指定字符串的下标  instr()
instr()查找指定字符窜中所在的位置下标
select instr(‘go,go,come on!‘,‘go‘)from dual;==>1
select instr(‘go,go,come on!‘,‘go‘,2)from dual;==>4
select instr(‘go,go,come on!‘,‘go‘,-1)from dual;==>4

select instr(‘go,go,come on!‘,‘go‘,-1,2)from dual; ==>1
 -1代表从右边数,从第一位开始数,2为第二次出现的位置下标

select instr(‘go,go,come on!‘,‘go‘,-2,5)from dual;==>0                    -2也是从右边开始,从第二位开始数,5 为第五次出现的位置下标

 总结:负数从右边开始,正数从左边开始
 注意:数据库字符串下标从1开始计数。


第十种  获取从指定下标开始的字符串 substr() 

substr(列|值,指定位置下标,保留几位)
select substr(‘hello world!‘,3)from dual;表示:
 从指定下标处开始即从下标3开始,一个位数为:llo world;
两位数为(3,3):llo即第二个数为取3个数也是其长度(length)用公式表示为下面

select length(substr(‘hello world!‘,3,4))from daul;表示:4

第十一种  decode()及case when then ;
decode()
a.类似一个三目运算符
比较第一和第二个参数,如果相等取第三个参数,如果不相等取第四个参数。

select decode(‘A‘,‘A‘,‘B‘,‘C‘)from dual;==》B
select decode(1,1,2,3)from dual;==》2
select decode(1,2,2,3)from dual;==》3

b.if else if else
decode(A,b,c,d,e,f,g,h)
如果A=b,输出c;
如果A=d,输出e;
如果A=f,输出g;
如果b,d,f都不满足A,输出h.

--输出显示每个订单编号及支付方式,支付方式要么是现金,要么是信用卡,否则就是未知数。
select id,decode(payment_type,‘CASH‘,‘现金‘,‘CREDIT‘,‘信用卡‘,‘未知数‘ )fro s_ord;

--输出区域表(s_region)中,每个地区对应的中文
select id,decode(name,‘North America‘,‘北美‘,‘South America‘,‘南美‘,‘Africa / Middle East‘,‘非洲/中东‘,‘Asia‘,‘亚洲‘,‘Europe‘,‘欧洲‘) from s_region;

case when 可以把它看成switch功能;
select name "部门名",
case region_id
    when 1 then ‘北美‘
    when 2 then ‘南美‘
    when 3 then ‘中东‘
    when 4 then ‘亚洲‘
    when 5 then ‘欧洲‘
    else ‘未知区域‘
end "区域名"
from s_dept;

--请把员工工资分为3等,超过2000员的为高等在1500到2000之间的为中等,低于1500的为低等

select first_name,salary,
case
  when salary>2000 then ‘高等‘
    when salary between 1500 and 2000 then ‘中等‘
      when salary<1500 then ‘低等‘
   else‘‘
end " 薪资"
from s_emp;    

 注意:case后面是否出现列名,取决于when后面条件是否出现比较列
       如果when后面已经出现列名,那case后面务必不能写列名,
       如果when后面是值,那么必须在case后面指定列名,否则无法确定所给的值的真正含义。

第十二中 日期函数
oracle默认的日期格式为 dd-MON-yy
select sysdate from daul;

dd            表示2位数的日
mon/month    表示月份,如:6月
mm            表示2位数的月,如:06
yyyy        表示4位数的年份
HH24        表示24小时
HH            表示12小时
mi            表示分钟
ss            表示秒
fm               表示去掉前面的0,如:fm 06,值为6 = fmmm
day            表示星期几

日期函数:
sysdate      当前日期
months_between(date1,date2)  2个日期之间的月数
--查询2014年11月1日和2016年12月9日之间的间隔月数
select trunc(abs(months_between(to_date(‘2014-11-1‘,‘yyyy-mm-dd‘),to_date(‘2016-12-9‘,‘yyyy-mm-dd‘))),2) from dual;

add_months(date1,n),在date1的基础上加n个月
--半年后的日期是什么?
select add_months(system,6) from dual;

--半年前的日期是什么?
select add_months(sysdate,-6) from dual;

next_day(date1,‘星期几‘),在date1的基础上,下星期几是什么时候
--即将到来的星期五是几号?
select next_day(sysdate,‘星期五‘) from dual;

last_day(date1),date1日期所在月的最后一天是什么时候
--查询当月底是几号
select last_day(sysdate) from emp;

--查询所有员工的工作月数
select trunc(months_between(sysdate,start_date),0) from s_emp;

--查询所有员工的工作天数
select round(sysdate-start_date) from s_emp;

--显示41 号部门员工 姓名, 进入公司的天数,年数,月份数,星期数【分别加上中文别名】
  select  e.first_name 姓名,
                  sysdate -  e.hiredate 天数,
                  months_between(sysdate,e.hiredate) 月数,
                  (months_between(sysdate,e.hiredate))/12年分数
  from s_emp  e
  where e.deptno = 41 ; 

第十三种 转换函数 to_number,to_date,to_char
to_number:字符转换成数字
                    select to_number(‘9837492.563‘,‘999999999.999‘) from dual            

   to_date:字符转换成日期
                      select to_date(‘2009-10-3 15:10:23‘,‘yyyy-mm-dd hh24:mi:ss‘) from dual
   to_char:日期/数字 转换成 字符  --获得当前年份,月份,日期
         select to_char (sysdate,‘yyyy-mm-dd hh24:mi:ss‘)     from dual
         select to_char(9837492,‘$999,999,999.99‘) from dual
         select to_char(9837492.563,‘999999999.99‘) from dual

to_date()        把字符串改为日期
to_number()        把字符装换成数字
to_char            把数字或日期转换为字符串
    1.to_char(number,fmt);格式化数字
    2.to_char(date,fmt);格式化日期

    9 代表任意数据
    L 代表本地的货币符号
    $ 代表美元
    0 代表0
    . 代表.
    , 代表,

--格式化输出员工工资($1,500.00)
select to_char(1500,‘$999,999,999.99‘) from dual;

--找出每个员工的名字和它的薪水(如:$2,500.00)
select ename,to_char(sal,‘$999,999.99‘) from emp;

--将‘2011-09-12 ‘  转换成 date 类型
select to_date(‘2011-09-12‘,‘yyyy-mm-dd‘) from dual ;
==>2011/09/12
-- 获得字符串 ‘2011-09-12 ‘ 的月份
select  to_number(to_char( to_date(‘2010-09-18‘,‘yyyy-mm-dd‘) , ‘mm‘)) from dual;
==>9
--获得 8732034.56 用如下形式表示: 8,732,034.56
select  to_char( 8732034.56,‘9,999,999.99‘) from dual; 

--获得 8732034.56 用如下形式表示: $8,732,034.56
  select  to_char( 8732034.56,‘$9,999,999.99‘) from dual;
时间: 2024-08-03 16:43:39

SQL含义+单行函数的相关文章

SQL之单行函数

单行函数语法: function name(column|expression,[arg1,arg2,...]) 参数说明: function name:函数名称 column:数据库列名 expression:字符串或计算机表达式 arg1,arg2:在函数中使用参数 单行函数分类: 字符串函数:接受字符输入并且返回字符或数值 upper()   --转换成大写 initcap()  --将首字母大写 substr()  --字符串截取 replace() --内容替换 数值函数:接受数值输入

sql的基础语句-单行函数,dual,数字函数,日期函数,表连接,集合运算,分组报表,单行子查询,多行子查询

3. 单行函数 3.1 转换函数 select ascii('A'),chr(65) from dual; select to_char(1243123),1231451 from dual;靠左边的就是字符串,靠右边的就是数字 select to_char(123512a121) from dual;   --错误的写法,没有引号表示数字,但是数字里面包含了字母,不合法的输入值 select to_number('123141211') from dual; select to_number(

ORACLE SQL单行函数(一)【weber出品必属精品】

1.SUBSTR:求父串中的子串 SUBSTR('HelloWorld',1,5) 1:代表子串的起始位置,如果为正,正数,如果为负,倒数 5:代表字串的终止位置,只能向右数,可以省略,如果省略就是数到最后 SUBSTR:求父串中的子串 SUBSTR('HelloWorld',1,5) 1:代表子串的起始位置,如果为正,正数,如果为负,倒数 5:代表字串的终止位置,只能向右数,可以省略,如果省略就是数到最后 2.LENGTH:求字符串的长度 SQL> select LENGTH('HELLOWO

ORACLE SQL单行函数(二)【weber出品必属精品】

11.dual:虚表,任何用户都可以使用,表结构如下: SQL> desc dual Name Null? Type ----------------------------------------- -------- ---------------------------- DUMMY VARCHAR2(1) 12.dual的作用: 1. 查询数据库系统日期 2. 进行四则运算 SQL> select sysdate from dual; ---这里查询数据库系统日期 SYSDATE ---

ORACLE SQL单行函数(三)【weber出品必属精品】

16.L:代表本地货币符,这个和区域有关.这个时候我们想来显示一下人民币的符号:¥ $ vi .bash_profile ---写入如下内容: export NLS_LANG='SIMPLIFIED CHINESE'_CHINA.AL32UTF8 ---修改成简体中文+地区+字符集 source .bash_profile ---让环境变量生效 [[email protected] ~]$ sqlplus scott/tiger SQL*Plus: Release 10.2.0.5.0 - Pr

SQL基础术语和单行函数

1.SQL基础术语 Sql语言:结构化查询语言(Structured Query Language) 查询语句 SELECT DML数据操作语言 INSERT ,UPDATE,DELETE DDL数据定义语句 CREATE,ALTER,DROP,RENAME,TRUNCATE 事务控制语句 COMMIT,ROLLBACK 数据控制语句 GRANT,REVOKE Dual空表任何含有空值的数据表达式计算出的结果都是空 例如: SQL> select 3*2 from dual; 3*2 -----

Netsuite Formula &gt; Oracle函数列表速查(PL/SQL单行函数和组函数详解).txt

PL/SQL单行函数和组函数详解 函数是一种有零个或多个参数并且有一个返回值的程序.在SQL中Oracle内建了一系列函数,这些函数都可被称为SQL或PL/SQL语句,函数主要分为两大类: 单行函数 组函数 本文将讨论如何利用单行函数以及使用规则. SQL中的单行函数 SQL和PL/SQL中自带很多类型的函数,有字符.数字.日期.转换.和混合型等多种函数用于处理单行数据,因此这些都可被统称为单行函数.这些函数均可用于SELECT,WHERE.ORDER BY等子句中,例如下面的例子中就包含了TO

SQL单行函数和多行函数

单行函数和多行函数示意图: 单行函数分为五种类型:字符函数.数值函数.日期函数.转换函数.通用函数 单行函数: [sql] view plaincopy --大小写控制函数 select lower('Hello World') 转小写, upper('Hello World') 转大写 from dual; --initcap: 首字母大写 select initcap('hello world') 首字符大写 from dual; --字符控制函数 -- concat: 字符连接函数, 等同

oracle sql单行函数 常用函数实例

无结果函数 1 --一.单列函数 2 --1.字符串函数 3 --将字符串大写,因为emp表里面有15条数据,所以 4 select upper('hello world') from emp; 5 select lower(ename) from emp where ename='SCOTT'; 6 --dual表中只用一行一列,可以用来测试函数 7 --inintcap是让单词的首字母大写,后面的都是小写 8 select initcap('hello world') from dual;