Oracle_DAY02

本文深入讲解了SQL查询的基础知识及高级技巧,包括WHERE子句的使用、字符串与数字的比较、逻辑运算符的应用、模糊查询的方法、数据排序的实现、单行函数与组函数的功能介绍等,帮助读者掌握高效SQL查询的要点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    where 子句-----限制行的返回

     1.符合where后条件的数据返回,不符合where后条件的就过滤掉

     查询工资大于1200的first_name,salary

     select first_name,salary 

         from s_emp

             where  salary>1200;


     2.字符串和数字的对比

     查询工资等于2500的人的first_name 

     select first_name,salary 

         from s_emp

             where salary=2500;

     查询first_name是Carmen的工资

     select first_name,salary 

         from s_emp

             where first_name='Carmen';

     select first_name,salary 

         from s_emp

             where first_name='carmen';

     //no rows selected


     注意:字符串的值是区分大小写的,字符串是大小写敏感。例如:'a'   'A' 是不同的。


    3.sql中的运算(比较)符号

      <1>.逻辑比较运算符号

       =   < >  >= <=

      <2>.sql的比较运算符号

       between 低值  and  高值 

       表达一个闭区间[1500,2500],找出工资在[1500,2500]之间的first_name,salary 

       select first_name,salary 

           from s_emp 

         where  salary 

         between 1500 and  2500; 

 

      4. in (列表)

       列表  -----用逗号隔开的一组值

       找出id 是1或者是3或者是9的first_name,

       salary

       select first_name,salary 

           from s_emp  

         where id in(1,3,9); 

       in:列表中的顺序和数据组成相关

       把出现概率高的放前面 

 

       5.is  null ----判断一个值是不是NULL

       找出提成是NULL的first_name,salary

       select first_name,salary  from 

       s_emp where commission_pct is null;


       6.模糊查询

       like '字符串'

       龙  成龙   李小龙   龙孩儿  龙龙 

       找出所有的first_name 带a的,like '通配字符串'

       sql的通配符

       %   代表任意字符 0-n

       _   代表一个任意字符 1(能且只能是一个)

       select first_name from s_emp where

       first_name like '%a%';

       找出第二个字符是a的first_name 

       select first_name from s_emp where

       first_name like '_a%';



      1.数据字典表:

       user_tables   

       table_name  表名

       s_emp   s_dept  

       select table_name from  user_tables;

       把s_开头的表名列出来

       select table_name from  user_tables where table_name  like 's_%';


      2. 数据字段表把所有数据的值 默认处理成大写

       select table_name from  user_tables where table_name  like 'S_%';

       通配符的转义:

       select table_name from  user_tables where table_name  like 'S\_%' escape '\';


      3.条件连接符号

      c 和c++

       int  a=10;

       if(5<a<9){

          printf("shenma shidao");

       }

      与   and

      或   or 

      非   not 

      找出工资在[1500,2500]之间的

      first_name,salary

      select  first_name,salary from s_emp 

      where salary>=1500 and salary<=2500; 


      找出工资在(1500,2500)之间的

      first_name,salary

      select  first_name,salary from s_emp 

      where salary>1500 and salary<2500;


      找出id 是1或者是3或者是9的first_name,

       salary

      select first_name,salary from s_emp 

      where id=1 or id=3 or id=9;


      >              <=

      <              >=

      =              !=  ^=  <>

      between and    not between and 

      in             not in

      like           not  like

      is null        is not  null


      找出提成不是NULL的first_name,salary

      select first_name,salary from s_emp

      where manager_id   is  not null;


     4.条件的优先级问题

       那个sql语句查出的结果可能会多

 

order by 子句

     1.数据的排序

     order  by 肯定是出现在sql语句最后

     order  by  排序标准  排序的形式(升序 asc,可以省略,默认的顺序;降序 desc,不可省略,反自然顺序)

     按照工资排序 显示id,first_name

     select id,first_name,salary from s_emp  order by salary;

     等价于

     select id,first_name,salary from s_emp  order by 3;

     等价于

     select id,first_name,salary from s_emp  order by salary asc;


     2.多字段排序 第一排序字段 第二排序字段

     按工资排序 显示first_name ,salary 

     如果工资相同则按照first_name 降序

     select id,first_name,salary  from s_emp order by salary asc,first_name desc;   

     第一排序字段不同则按照第一排序字段排序,第一排序字段相同则启用第二排序字段规则

 

单行函数

     单行函数:sql语句影响多少行,就针对每一行返回一个结果 

     select upper(first_name),first_name from s_emp;

     select upper(first_name) from s_emp where salary>3500;


     组函数:对一组数据处理之后得到一个结果

     count  统计个数

     select count(first_name) from s_emp;

     select count(first_name) from s_emp where salary>1500;

     select count(first_name) from s_emp where salary>3500;


     测试当行函数----测试表-----dual

     这个表是一个单行单列的表

     单行函数:

     1.字符串处理函数

       upper-----把数据变大写

       lower-----把数据变小写

       initcap ----把字符串的每个单词首字母变大写 

       select initcap('one world  one dream') from dual;


       concat   ----连接两个字符串

       select concat('hello','world') from dual;


       substr(参数1,参数2,参数3)

       参数1 要截取的字符串

       参数2 从什么地方开始截取 第一个是1

       参数3 截取多长

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

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

       第二个参数可以是负数

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


       显示first_name 的后三个字符,使用两种不同的方式完成

       length -------得到字符串的长度

       select length('hello')  from dual;

 

       select first_name,upper(substr(first_name,1,3)) from s_emp;

<think>好的,我现在需要帮助用户查找Oracle数据库中关于add_day函数的用法或相关信息。首先,用户提到的是“add_day”函数,但根据我对Oracle的了解,标准的日期函数中并没有这个名称的函数。可能用户记错了函数名,或者指的是其他数据库中的类似函数。因此,我需要先确认Oracle中是否有add_day函数,或者是否有等效的日期操作函数。 首先,我应该回忆一下Oracle的日期函数。常见的日期操作函数包括ADD_MONTHS、日期加减运算等。例如,Oracle允许使用日期加减数字来表示天数的加减,比如SYSDATE + 7表示一周后的日期。这可能就是用户需要的功能,但用户可能误以为是add_day函数。 接下来,我需要验证这一点。根据引用中的资料,比如引用[2]提到的Oracle诊断事件,虽然没有直接提到日期函数,但可以确认用户是在Oracle环境下工作。因此,我应该详细说明Oracle中如何处理日期的加减。 另外,用户可能需要了解如何增加天数以外的其他日期部分,比如月份或年份。这时ADD_MONTHS函数就派上用场了。此外,Oracle还提供了INTERVAL类型,可以更灵活地处理时间间隔,比如增加小时、分钟等。 还需要考虑用户可能遇到的常见问题,例如如何处理月末日期,比如给2023-02-28加一个月,ADD_MONTHS会返回2023-03-31吗?需要说明这种情况下的处理方式。 此外,用户可能需要示例来更好地理解如何使用这些函数。因此,提供具体的SQL示例会很有帮助,比如使用加减操作符增加天数,或者使用ADD_MONTHS增加月份,以及使用INTERVAL来增加更复杂的时间段。 最后,生成相关问题,帮助用户进一步探索Oracle的日期函数,比如如何计算两个日期的差异,如何处理时区转换等,这样用户可以根据自己的需求继续深入学习。</think>在Oracle数据库中,并没有内置的$add\_day()$函数,但可以通过以下方式实现日期加减操作: ### 一、Oracle日期操作方法 1. **基础天数加减** 使用加减运算符直接操作日期值: ```sql SELECT sysdate + 7 FROM dual; -- 加7天 SELECT sysdate - 3 FROM dual; -- 减3天 ``` 2. **月份加减函数** $$ ADD\_MONTHS(date\_expr, num\_months) $$ ```sql SELECT ADD_MONTHS(SYSDATE, 2) FROM dual; -- 加2个月 ``` 3. **精确时间间隔** 使用$INTERVAL$表达式处理更细粒度的时间计算: ```sql SELECT SYSDATE + INTERVAL '2' HOUR FROM dual; -- 加2小时 SELECT SYSDATE + INTERVAL '30' MINUTE FROM dual; -- 加30分钟 ``` ### 二、特殊日期处理 当处理月末日期时,需注意: ```sql SELECT ADD_MONTHS(DATE '2023-02-28', 1) FROM dual; -- 返回2023-03-31 SELECT ADD_MONTHS(DATE '2024-02-29', 12) FROM dual; -- 返回2025-02-28 ``` ### 三、完整日期计算示例 ```sql -- 创建测试表 CREATE TABLE orders ( order_id NUMBER, order_date DATE ); -- 插入数据 INSERT INTO orders VALUES(1, DATE '2023-01-15'); -- 查询3天后的订单日期 SELECT order_date + 3 AS due_date FROM orders; ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值