初识数据库(函数)

函数

  --单行函数

    --函数: 能够接收参数,完成某些计算,并且返回结果

    --测试表: dual

    select * from dual

  --字符串函数

    --大小写转换函数

    --将 ‘I Love sql‘ 转换成大写、小写、首字母大写

    select UPPER(‘I Love sql‘),lower(‘I Love sql‘),initcap(‘I Love sql‘) from dual

  --字符串拼接

    -- 将 ‘I‘,‘Love‘,‘sql‘连接到一起

    select ‘I ‘||‘Love ‘||‘sql‘ from dual

    select concat (concat(‘I ‘,‘Love ‘),‘sql‘) from dual

  --截取函数: substr(源字符串,m[,n])

    --m : 从源字符串的第几位开始截取

     --n :  从截取开始位置截取几位

    select substr(‘I Love sql‘,3,4) from dual

    select substr(‘I Love sql‘,-5) from dual

    select substr(‘I Love sql‘,-5,3) from dual

  --查询emp表中职位是以‘MAN‘结尾的员工信息

    select * from emp where substr(job,-3) = ‘MAN‘

  --查询首字母是‘K‘的员工信息

    select * from emp where substr(ename,1,1) = ‘K‘

  --字符串长度函数: length(p1)

    --返回‘I Love sql‘长度

    select length(‘I Love sql‘) from dual

  --返回子串在源字符串中的位置 : instr(源字符串,子串[ , m , [n] ] )

    --m: 从第几位开始查起

    --n:  第几次出现的下标位置

    select instr(‘I Love sql‘,‘L‘) from dual

    select instr(‘I Love sqL‘,‘L‘,4,1) from dual

    select instr(‘I Love sqL‘,‘L‘,1,2) from dual

    instr(‘192.168.101.123‘)

  --查询emp表中 员工名字至少含有一个‘E‘的员工

    select * from emp

    where instr(ename,‘E‘,1,1) != 0

  --填充函数: LPAD() - 左侧填充、RPAD() - 右侧填充

    --LPAD(源字符串,m,子串)、RPAD(源字符串,m,子串)

    select lpad(‘abc‘,10,‘*‘) from dual

  --查询员工的工资,1000,显示一个* ,2000,显示两个*

    select ename, lpad(‘*‘,sal/1000,‘*‘)

    from emp

  --去掉函数: trim(字符 from 源字符串)

    --将源字符串头尾两端的字符去掉

    select trim(‘L‘ from ‘LEVEL‘) from dual  --默认both

    select trim(leading‘L‘ from ‘LEVEL‘) from dual

    select trim(trailing‘L‘ from ‘LEVEL‘) from dual

    select trim(both‘L‘ from ‘LEVEL‘) from dual

  --替换函数

    --replace(源字符串,查找字符串,替换字符串)

    --将源字符串中的所有查找的字符串替换成替换字符串

    --将‘I Love sql‘中的‘sql‘替换成oracle

    select replace(‘I Love sql‘,‘ql‘,‘oracle‘) from dual

  --数字函数

    --四舍五入 : round(数据源,位数)

    select round(657.36,1) from dual

    select round(657.36,0) from dual

    select round(657.36,-1) from dual

  --截断函数 : trunc(数据源,位数)

    select trunc(657.32,1) from dual

    select trunc(657.32,-1) from dual

  --取余 mod(m,n)

    select mod(10,3) from dual

  --绝对值 abs(m)

    select abs(-5.2) from dual

  --日期函数

    --sysdate : 返回当前系统的时间,没有参数,不需要括号

    select sysdate from dual

  --months_between(p1,p2) 返回两个日期之前相差多少个月

    --查询emp表中所有员工工作了多少个月

    select months_between(sysdate,hiredate) from emp

    select months_between(hiredate,sysdate) from emp

  --计算自己的年龄

    select trunc(months_between(sysdate,‘10-2月-1987‘)/12,2)

    from dual

  --add_months(指定的日期,n) 返回指定日期加 n个月的日期

    --计算emp表中每一个员工转正日期

    select add_months(hiredate,3) from emp

    --注意: 如果给定日期是某个月的最后一天,其结果也是这个月的最后一天

  --返回给定日期后七天内的星期几: next_day(给定日期,‘星期几‘)

    select next_day(sysdate,‘星期二‘) from dual

  --返回给定日期的当月的最后一天

    --last_day(给定日期)

    select last_day(sysdate) from dual

类型转换

  --隐式转换

    select * from emp where deptno = ‘10‘

    select * from emp where deptno = 10

  --显式转换

    --可以确保sql语句的正确性

    --利用oracle 给提供的转换函数,把对应的数据类型进行转换

  --to_char(日期|数字, ‘fmt‘) 字符串转换函数

    --查询当前系统的日期,格式2016-03-22,星期二

    select to_char(sysdate,‘yyyy-mm-dd dy‘) from dual

  --查询当前系统的时间,格式 :时间格式 时:分:秒

    select to_char(sysdate,‘yyyy-mm-dd hh24:mi:ss dy ‘) from dual

  --查询当前系统时间

    --格式: xxxx年xx月xx日

    select to_char(sysdate,‘yyyy"年"mm"月"dd"日"‘) from dual

  --数字转换成字符串

    --查询员工表中King的工资,格式要求以人民币的格式进行显示

    select to_char(sal,‘L99,999.99‘) from emp where ename = ‘KING‘

  --查询emp表中在1980年12月17日入职的员工

    select * from emp where hiredate = to_date(‘1980-12-17‘,‘yyyy-mm-dd‘)

  select to_number(‘123‘) from dual

  --空值转换函数

    --1、nvl(p1,p2) 如果p1不为null, 则返回p1, 否则返回p2

      --查询员工表中,员工姓名,工资,年薪

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

      from emp

    --2、nvl2(p1,p2,p3) 如果p1不为null, 则返回p2,否则返回p3

      select ename,sal,sal*12+nvl2(comm,comm,0)

      from emp

    --3、coalesce(p1,p2,p3,p4……) 返回第一个不为null的参数值

      select ename,sal,coalesce(sal+comm,sal,0)*12

      from emp

  --case 表达式

    --语法结构

    case 列 |表达式

     when 值1 then 返回值1

     when 值2 then 返回值2

     when 值3 then 返回值3

     when 值4 then 返回值4

     ... ...

     when 值n then 返回值n

     else 默认返回值

     end

  --需求: 查询员工表中 10部门下的员工信息,要求职位用中文输出

    select ename,job,(case job

        when ‘CLERK‘ then ‘办事员‘

        when ‘SALESMAN‘ then ‘经理‘

        when ‘PRESIDENT‘ then ‘董事长‘

          else ‘员工‘

         end)

    from emp where deptno = ‘10‘

  --decode 表达式

    语法结构

    默认返回值

    --decode(列 |表达式,值1,返回值,值2,返回值……,返回值n)

    select ename,job,decode(job,‘CLERK‘,‘办事员‘,‘SALESMAN‘,‘经理‘,‘PRESIDENT‘,‘董事长‘,‘员工‘)

    from emp where deptno = ‘10‘

多表查询

  --将多张表联合到一起进行查询

  --需要将表与表连接起来

  --将连接条件写到 from子句后面

  --查询emp表中 员工姓名,部门编号,以及部门名称

    select *

    from emp,dept

  --如果将两张表简单的连接起来,此时会产生笛卡尔积

  --为两张表创建关联字段,给与关联条件

  --关联字段 -> 侠义角度: 两个字段列名相同,数据类型相同,内容都在同一个范围里

  --广义角度: 两个列要有相同的意义

    select * from dept

    select ename,e.deptno

    from emp e,dept d

    where e.deptno = d.deptno

  --多表关联中

    --1、等值连接: 两个表的公共字段用 = 进行连接

    --2、不等值连接: 两个表的公共字段不用 = 进行连接

    --查询 员工姓名、工资、以及工资等级

    select ename, sal,grade

    from emp e,salgrade s

    where e.sal between s.losal and s.hisal

  --查询emp表中部门号 是 30 的员工姓名、工资、部门编号、以及工资等级、部门名称

    select e.ename,e.sal,e.deptno,s.grade,d.dname

    from emp e,dept d,salgrade s

    where e.deptno = d.deptno

    and e.sal between s.losal and s.hisal

    --注意 n个表进行连接时,至少需要 (n-1) 个条件,否则就会出现笛卡尔积

  --3、外连接: 用符号(+)做连接

    --(+)永远写在缺乏表的一端

    --如果要查询哪一张表的信息,对应的另外一张表就是缺乏表

    --查询各部门有哪些员工,即使这些部门没有员工

    select e.empno,e.deptno,d.dname

    from emp e,dept d

    where e.deptno (+)= d.deptno

    order by e.deptno

  --查询员工信息,即使这个员工没有部门

    select e.empno,e.deptno,d.dname

    from emp e,dept d

    where e.deptno = d.deptno(+)

    order by e.deptno

  --4、自连接 : 查询结果和查询条件都需要在同一张表中

    --查询员工表中和SMITH是同一部门的员工,不包含SMITH

    select e1.ename,e1.deptno

    from emp e1,emp e2

    where e1.deptno = e2.deptno

    and e2.ename = ‘SMITH‘

    and e1.ename <> ‘SMITH‘

SQL99连接语法

  --1、CROSS JOIN : 交叉连接,生成笛卡尔积

    --查询员工表和部门表

    select emp.*,dept.*

    from emp cross join dept

   --2、natural join : 自然连接

    --用于连接两个具有相同列名以及相同类型的表

    --查询员工表和部门表

    select ename,dname

    from emp natural join dept

  --3、using 字节连接,需要写条件

    --查询员工表和部门表

    select *

    from emp join dept using(deptno)

  --4、on 子句连接,指定连接条件

    --查询员工表和部门表

    select *

    from emp join dept on(emp.deptno = dept.deptno)

  --5、left outer join : 左外连接,也称为左连接

    --显示查询结果,左边表的全部,和右边表符合条件的数据

    select *

    from emp left outer join dept

    on(emp.deptno = dept.deptno)

  --6、right outer join : 右外连接,也称为右连接

    --显示查询结果,右边表的全部,和左边表符合条件的数据

    select *

    from emp right outer join dept

    on(emp.deptno = dept.deptno)

  --7、full outer join : 全外连接

    --两个表的数据都显示出来

    select *

    from emp full outer join dept

    on(emp.deptno = dept.deptno)

  --8、inner join : 内连接,两个表中有匹配的数据显示出来

    select *

    from emp inner join dept

    on(emp.deptno = dept.deptno)

时间: 2024-11-10 08:20:41

初识数据库(函数)的相关文章

初识数据库 初识mysql

阅读目录: 初识数据库 为什么要用数据库 认识数据库 初识mysql mysql概念 下载与安装 初识sql语句 返回顶部 初识数据库 返回顶部 为什么要用数据库 用数据库的原因? 第一:将文件和程序存在一台机器上是不合理的. 第二:操作文件是一件很麻烦的事情 用数据库的优势? 程序稳定性:这样任意一台服务所在的机器崩溃了都不会影响数据和另外的服务 数据的一致性:所有的数据都存储在一起,所有的程序操作的数据都是统一的,就不会出现数据不一致的现象 并发:数据库可以良好的支持并发,所有的程序操作数据

1.初识数据库

1.初识数据库 1.数据库在你的程序中扮演什么角色 用户名密码 商品名价格 对数据的处理更便捷 web程序 数据库 database db 文件 表 table 一条一条的数据 data 2.数据库解决了: ? 操作文件的效率和便捷问题 ? 解决了多个服务同时使用数据的一致性问题 ? 解决了安全的问题 ? 解决了并发问题 3.数据库分类: 关系型数据库 :存取效率相对低 数据与数据之间的关联紧密 mysql oracle sqlserver sqllite accesse 非关系型数据库 : 存

初识数据库(分组函数)

分组函数 --什么是分组函数 : 可以对结果集中的一组记录进行一次计算 select sal from emp --单行分组函数 --MAX.MIN (最大.最小) --查询emp表中工资最大的和工资最小的工资 select max(sal),min(sal) from emp --SUM.AVG(总和,平均数) --查询员工表中部门号是20的员工工资的总和以及平均工资 select sum(sal),avg(sal) from emp e where e.deptno = '20' --cou

mysql一:初识数据库

阅读目录 一 数据库管理软件的由来 二 数据库概述 三 mysql介绍 四 下载安装 五 mysql软件基本管理 六 初识sql语句 一 数据库管理软件的由来 基于我们之前所学,数据要想永久保存,都是保存于文件中,毫无疑问,一个文件仅仅只能存在于某一台机器上. 如果我们暂且忽略直接基于文件来存取数据的效率问题,并且假设程序所有的组件都运行在一台机器上,那么用文件存取数据,并没有问题. 很不幸,这些假设都是你自己意淫出来的,上述假设存在以下几个问题...... 1.程序所有的组件就不可能运行在一台

Python全栈__函数的初识、函数的返回值、函数的参数

1.函数的初识 def关键字 空格 函数名(与变量名命名规则相同):英文冒号 函数体 执行函数:函数名+() 函数是以功能为导向的. def login(): pass def register(): pass 1 def my_len(): 2 l1 = [1, 2, 3, 1, 6, 9, 10] 3 count = 0 4 for i in l1: 5 count += 1 6 my_len() 2.函数的返回值 return: 1.函数中遇到 return 结束函数,下面代码不执行. d

MySQL之初识数据库

一 数据库管理软件的由来 基于我们之前所学,数据要想永久保存,都是保存于文件中,毫无疑问,一个文件仅仅只能存在于某一台机器上. 如果我们暂且忽略直接基于文件来存取数据的效率问题,并且假设程序所有的组件都运行在一台机器上,那么用文件存取数据,并没有问题. 很不幸,这些假设都是你自己意淫出来的,上述假设存在以下几个问题...... 1.程序所有的组件就不可能运行在一台机器上 #因为这台机器一旦挂掉则意味着整个软件的崩溃,并且程序的执行效率依赖于承载它的硬件,而一台机器机器的性能总归是有限的,受限于目

存储库之 mysql 第一篇:初识数据库

一 数据库管理软件的由来 基于我们之前所学,数据要想永久保存,都是保存于文件中,毫无疑问,一个文件仅仅只能存在于某一台机器上. 如果我们暂且忽略直接基于文件来存取数据的效率问题,并且假设程序所有的组件都运行在一台机器上,那么用文件存取数据,并没有问题. 很不幸,这些假设都是你自己意淫出来的,上述假设存在以下几个问题...... 1.程序所有的组件就不可能运行在一台机器上 #因为这台机器一旦挂掉则意味着整个软件的崩溃,并且程序的执行效率依赖于承载它的硬件,而一台机器机器的性能总归是有限的,受限于目

Python 基础之函数初识与函数参数

一:函数初识 定义:满足某一个方法 满足某一个功能#(1)功能(包裹一部分代码 实现某一个功能 达成某一个目的)#(2)可以反复调用,提高代码的复用性,提高开发效率,便于维护管理#(3)函数的基本格式:#定义一个函数def 函数名():    code1    code2 #调用函数函数名() #例子:(最简单的一个函数)#函数的定义处 def func():    print("我是一个大帅哥") #函数的调用处func() #(4) 函数的命名规则字母数字下划线  首字符不能为数字

mysql数据库—函数、数据备份、流程控制

函数 内置函数 日期相关: 字符串相关: 数字相关: 其他函数: 当然也包括之前学习的聚合函数 自定义函数 语法: CREATE FUNCTION f_name(paramters) returns dataType; return value; 说明: paramters 只能是in 输入参数 参数名 类型 必须有返回值 不能呢加begin 和end returns 后面是返回值的类型 这里不加分号 return 后面是要返回的值 案例: 将两数相加 create function addfu