• SQL操作数据——SQL组成,查询基础语法,where,Oracle常用函数等



    SQL组成:

    DML(数据操作语言)

    插入、删除和修改数据库中的数据
    INSERT、UPDATE、DELETE等。

    DCL(数据控制语言)

    用来控制存取许可、存取权限等。
    GRANT、REMOKE等。

    DQL(数据查询语言)

    用来查询数据库中的数据。
    SELECT等。

    DDL(数据定义语言)

    用来建立数据库、数据库对象和定义表的列。
    CREATE TABLE、DROP TABLE等。


    查询基础语法

    语法:

    SELECT <列名>
    FROM <表名>
    [WHERE <查询条件表达式>]
    [ORDER BY <排序的列名>[ASCDESC]]     ----默认为ASC

    记录筛选 where 子句

    where子句:

    关系运算 >、<、=、!、<>、>=、<=
    逻辑运算 not 、 and 、 or
    IS NULL(是否为空)
    BETWEEN (在某两个值之间)
    IN(一系列值中)
    LIKE(相似值的比较)
    EXITS(是否存在符合条件的数据)
    UNIQUE(是否唯一)
    ALL/ANY(一组数据的所有/其中的任何一个)

    记录筛选 where 子句 实例练习
    --查询里面不是CLERK的人员信息
    select * from emp where job<>'CLERK';
    --查询所有的销售人员或者办事人员
    select * from emp where job='SALESMAN'or job='CLERK';
    --查询所有的销售人员或者办事人员并且工资大于1250
    select * from emp where (job='SALESMAN'or job='CLERK') and sal>1250;
    --查询奖金为空的所有人信息
    select * from emp where comm is NUll or comm=0;
    --查询所有办事人员,销售人员,管理者
    select * from emp where job in('CLERK','SALESMAN','MANAGER');
    --查询姓名之中 姓名以M开头的所有人
    -- % 匹配符 ,匹配0个或多个任意字符
    select * from emp where ename like 'M%';
    --查询姓名以S结尾的
    select * from emp where ename like '%S';
    --查询姓名之中包含A的
    select * from emp where ename like '%A%';
    -- EXISTS 是否存在满足条件的语句
    -- 查询
    select * from emp WHERE EXISTS (select * from emp where sal>4000);

    模糊查询中:

    % 代表任意0至多个字符
    _ 代表任意一个字符

    实例练习

    该实例是在表scott中操作。

    实例练习:
    --查询里面不是CLERK的人员信息
    select * from emp where job<>'CLERK';
    --查询所有的销售人员或者办事人员
    select * from emp where job='SALESMAN'or job='CLERK';
    --查询所有的销售人员或者办事人员并且工资大于1250
    select * from emp where (job='SALESMAN'or job='CLERK') and sal>1250;
    --查询奖金为空的所有人信息
    select * from emp where comm is NUll or comm=0;
    --查询所有办事人员,销售人员,管理者
    select * from emp where job in('CLERK','SALESMAN','MANAGER');
    --查询姓名之中 姓名以M开头的所有人
    -- % 匹配符 ,匹配0个或多个任意字符
    select * from emp where ename like 'M%';
    --查询姓名以S结尾的
    select * from emp where ename like '%S';
    --查询姓名之中包含A的
    select * from emp where ename like '%A%';
    -- EXISTS 是否存在满足条件的语句
    -- 查询
    select * from emp WHERE EXISTS (select * from emp where sal>4000);

    Select语句中的列表达式

    – 列表达式
    – 开始:case 结束:end 当…条件:when 就then 否则else

    – 字符串拼接
    select ename,’基本工资:’||sal from emp

    – 字段别名
    select ename name,’基本工资:’||sal s from emp

    实例练习:

    select sal,sal+comm from emp
    -- 显示员工各项工资明细和各项工资总和
    select '基本工资:'||sal sal,',奖金:'||comm comm, 
    case
      when comm is null
        then sal
      when comm=0
        then sal
      else sal+comm
    end total
    from emp
    -- 列表达式
    -- 开始:case 结束:end 当...条件:whenthen 否则else
    
    -- 显示员工各项工资之和大于2000的雇员信息
    select * from emp where
    case 
      when comm is null
        then sal
      else sal+comm
    end >2000

    Oracle常用函数

    使用函数可以大大提高SELECT语句操作数据库的能力。

    Oracle中函数划分为单行函数和多行函数。

    单行函数作用于数据库表的某一行并返回一个值。

    字符函数 数字函数 日期函数 转换函数 其他函数

    多行函数基于数据库表多行进行运算,返回一个值。

    Oracle常用函数:

    这里写图片描述

    Oracle常用数字函数

    这里写图片描述

    数字函数 实例练习题
    -- 数字函数
    --ROUND 四舍五入的操作
    select round(3.1415926,2) from dual
    --TRUNC 舍弃指定位置的内容
    select trunc(3.6415926,3) from dual
    select trunc(255,-2) from dual
    --MOD 取模,取余数
    select mod(10,3) from dual

    Oracle常用日期函数

    这里写图片描述

    日期函数 实例练习题
    -- 日期函数
    --获取当前日期 sysdate 当前系统时间
    select ename,sysdate from emp
    --得到3天以后的时间
    select sysdate+3 from dual
    --获取日期的最后一天 , 获取当月最后一天
    select last_day(sysdate) from dual
    select last_day(hiredate) from emp
    select * from emp where last_day(hiredate)='31-12月 80'
    -- 下个星期几的日期 next_day
    select next_day(sysdate,'星期一') from dual
    --求出若各个月以后的日期 add_months
    --加减月份
    select add_months(sysdate,3) from dual
    --months_between 获取两个日期间的间隔月份
    select trunc(months_between('1-2月 17', sysdate)) from dual

    Oracle常用转换函数

    这里写图片描述

    转换函数 实例练习题
    -- ORACLE 数据库中的三种数据:NUMBER,CHAR,DATE
    --转换函数
    --TO_CHAR 将日期或者是数字变为字符串显示
    select sysdate||'' from dual
    select to_char(sysdate,'yyyy-mm-dd') from dual
    select to_char(123456789,'999,999,999,999') from dual
    --TO_DATE 将字符串变为DATE数据显示
    select to_char(to_date('1999-1-1 20:20:20','yyyy-mm-dd hh24:mi:ss'),'yy-mm-dd hh24:mi:ss') from dual
    --TO_NUMBER  将字符串变为数字显示
    select to_number('123')+123 from dual
    select '123'+'123' from dual

    Oracle练习题

    --找出佣金高于薪金的60%的员工。
    select * from emp where sal>(sal+comm)*0.6
    --找出各月倒数第3天受雇的所有员工。
    select ename,last_day(hiredate)-3 from emp
    --找出早于12年前受雇的员工。
    select ename,add_months(sysdate,-12*12) from emp
    --显示正好为5个字符的员工的姓名。
    select ename from emp where ename like'_____'
    select ename from emp where length(ename)=5
    -- 显示满10年服务年限的员工的姓名和受雇日期。
    select ename,hiredate from emp where months_between(sysdate,hiredate)/12 >10 ;
    --显示在一个月为30天的情况所有员工的日薪金,忽略余数。
    select last_day(sysdate) from emp
    select sal/30 sal from emp where last_day(hiredate)
    select trunc(sal/30) sal from emp where  to_char(last_day(hiredate),'dd')=30
    --显示所有员工姓名、加入公司的年份和月份,按受雇日期所有月排序,若月份相同则将最早年份的员工排在最前面。
    select ename,to_char(hiredate,'yyyy-mm')from emp 
    order by to_char(hiredate,'mm') ASC ,to_char(hiredate,'mm') DESC
    --找出在(任何年份的)2月受聘的所有员工。
    select ename, hiredate from emp where to_number(to_char(hiredate,'mm'))=2
    --对于每个员工,显示其加入公司的天数。
    select trunc(to_number(sysdate-hiredate)) from emp
    --以年月日的方式显示所有员工的服务年限。
    select hiredate,trunc((sysdate-hiredate)/365) 年,
    trunc(mod((sysdate-hiredate),365)/30) 月,
    trunc( mod (mod((sysdate-hiredate),365),30) ) 日
    from emp;
  • 相关阅读:
    Android自定义权限和使用权限
    SendInput模拟Win(VK_LWIN)键的问题
    难以置信,根本就没拖延症!
    Android RecyclerView单击、长按事件:基于OnItemTouchListener +GestureDetector标准实现(二),封装抽取成通用工具类
    Android RecyclerView单击、长按事件标准实现:基于OnItemTouchListener + GestureDetector
    Android ViewPager Fragment使用懒加载提升性能
    Android快捷便利但不常被使用的原生工具类
    Android TextView图文混合编排
    JQuery中$.ajax()方法参数详解 及 async属性说明
    jQuery.ajaxComplete() 函数详解
  • 原文地址:https://www.cnblogs.com/aixing/p/13327707.html
Copyright © 2020-2023  润新知