2020-11-09

本文介绍了SQL的各种语言分类,包括数据查询语言DQL(如SELECT)、数据操作语言DML(如INSERT、DELETE、UPDATE)、数据定义语言DDL(如CREATE、DROP、ALTER)以及数据控制语言DCL。此外,还详细讲解了SQL中的函数用法,如单行函数、多行函数,以及日期和转换函数等。文章还涉及到了表连接、子查询和事务控制,深入解析了SQL在数据库管理和数据操作中的应用。
摘要由CSDN通过智能技术生成

/**sql的分类
数据查询语言DQL
   --DQL语句 select 
 
数据操作语言DML
  --DML语句 insert delete update merge 
  --作用操作行
数据定义语言DDL
   --DDL语句create drop alter truncate  rename comment
   --作用 操作数据库对象(表、视图等)
数据控制语言DCL
    --DCL语句  grant revoke(允许客户访问 、撤销客户访问)
    --作用 操作对数据和数据库对象的访问
事务控制语言TCL
    DCL语句 commit rollback savepoint
    --作用对事务进行控制

**/

/**sql的分类
数据查询语言DQL
   --DQL语句 select
   所有算数表达式有一个为空,就为空
   比较:>,>=,<,<=,=,  后面都是不等于<>,!=,^=
   特殊运算符:
   between....and 条件之间的
   like 模糊
   in 范围
   is null 判断空
   多条件可以使用not ,and ,or链接
   
   单行函数:
   函数的概念:具有某种功能的程序块,通常包括输入端和输出端
               分类:单行函数:接收一个数据,输出一个数据
                    多行函数:聚合函数  分行函数  接受一组数据  输出一组数据
   常见字符函数:
       大小写相关: lower ,upper inincap(小写 大写 首子母大写)
       其他:trim ,ltrim rtrim ,lpad,
       instr 查找字符串位置返回索引 从1开始
       ,substr 截取字符串
       length 字符串长度
       concat 链接字符串 拼接
       peplace 替换的
       
   常见数值函数:某种功能的程序块
         round 四设五入
         trunc 去尾
         mod:求摸(求余数)
   常键日期函数:
       sysdate :获取当前系统时间
       months_between:获取两个日期相差月数
       add_month:获取几个月后的日期
       last_day:获取本月最后一天的日期
       extract:从日期中获取某一部分
   常见转换函数
      to_char:将日期或数值转换为指定格式的字符
      to_date:将指定格式字符串转换为日期
      to_number:将指定格式字符转换为数值
   其他函数
   
   **/
   select ename,job,sal+1000 ff,deptno from emp ; 
    
   select concat(ename,job) from emp;
   
   select lower('HELLO'),upper('hello'),initcap('hello') from dual;--字母小写   字母大写   首字母大写
   
   
    select trim('H' from 'HelloHH'),ltrim('HelloHH','H'),rtrim('HelloHH','H') from dual; --去掉所有带H的   去掉右边H  去掉左边的H
    select 'ss ' from dual;
    select lpad(1000,5,'*'),rpad(1000,5,'*') from dual;  --左补齐  右补齐
    select inset('hello tom','tom') from dual; --查早字符串在字符中的位置 从索引一开始的
    
    select substr('hello',3) from dual;  --截取从第3位开始截取之后的,可以n-n个三个参数
    
    select concat('aa','bb'), length('tom') from dual; --concat链接字符串  ,length求长度
    
    select replace('hello','h','t') from dual;  --替换
    --数字函数
    select round(123.456,2),round('123.456',-2),round(123.456,0),round(123.456) from dual; --四舍五入
    select trunc(123.456,2),trunc('123.456',-2),trunc(123.956,0),trunc(123.956) from dual; --去尾

    select mod(12,5) from dual;
    --日期函数
    
    select sysdate+2 from dual;
    
    select add_months(sysdate,3) from dual;  --三个月后
    
    
   select ename, months_between(sysdate,hiredate) from emp; --入职时间到今天又多少个月
   
   
   select  last_day(sysdate) from dual;  --当前月的最后一天
   
   select  extract(year from sysdate) from dual; --当前日期年
   select  extract(month from sysdate) from dual; --当前日期月
   select  extract(day from sysdate) from dual; --当前日期日
   
   --转换函数
   --to_char:将日期或数值转换为指定格式字符
   --to_date:将指定格式字符转换为日期
   --to_number:将指定格式字符转换为数值

    select to_char(sysdate,'yyyy-mm-dd') from dual;
    select to_char(123.45,'L9,999,999.00') from dual;
   
    select to_date('1980-01-01','yyyy-MM-DD') from dual;
 
    select to_number('$222','$999') from dual;
    
    --空值转换函数 nvl,nvl2,nullif
    
    select ename,comm,nvl(comm,0) from emp;
     select ename,comm,nvl(to_char(comm),'char') from emp;
     --给各个部门涨工资
     select ename,deptno,sal,
     decode(deptno ,
      10 ,sal+100,
      20, sal+1000,
      sal ) --其他)
       from emp;
       
       select ename,deptno,sal
          ,case deptno
          when 10 then sal+100
          when 20 then sal+200
          else deptno end alll
            from emp;
            
          select ename,deptno,sal
          ,case 
          when deptno=10 then sal+100
          when deptno=20 then sal+100
          when deptno=30 then sal+100
          else sal end
            from emp;
    --聚合函数 和分组函数
    --聚合函数:
       --max:求最大值 
       --min:求最小值
       --sum:计算和
       --avg: 计算平均值
       --count:统计行数
       
       --max,min  可以应用在字符、数值和日期类型数据上
       --sum,avg: 可以应用在数值类型上
       --count:统计行数、值不为空的行数 
       
       select max(HIREDATE),min(HIREDATE),max(sal),min(sal) from emp;        
        select count(*) from emp;
        
         select count(comm) from emp;
         
           select * from emp;
           --分组 group by:根据指定的列进行分组统计
           --having 限定显示分组后的数据
           
           --求每个部门的最高工资
           
           select deptno,max(sal),min(sal) 
           from emp
           group by deptno
           having min(sal)>20;
           
           --在select子句中出现的非分组列,必须出现在group by 子句中
           select deptno,job,avg(sal) from emp
           group by deptno,job
           order by deptno desc;
   
 /***
数据操作语言DML
  --DML语句 insert delete update merge 
  --作用操作行
数据定义语言DDL
   --DDL语句create drop alter truncate  rename comment
   --作用 操作数据库对象(表、视图等)
数据控制语言DCL
    --DCL语句  grant revoke(允许客户访问 、撤销客户访问)
    --作用 操作对数据和数据库对象的访问
事务控制语言TCL
    DCL语句 commit rollback savepoint
    --作用对事务进行控制

**/

--第二套
--1.多表查询
--2.子查询
--3.相关子查询
--第一部分
 --表连接概述
 --使用相等和不等连接
 --使用自连接
 --使用外连接
 --连接更多的表
 
 --1)相等连接
    --from table1 natural join table2
    --from table1 join table2 using(column)
    --from table1 join table2 on table1.col=table2.col
    
    select ename,deptno,dname from emp natural join dept; --等值自然连接
    select ename,deptno,dname from emp join dept using(deptno)
    select ename,emp.deptno,dname from emp join dept on emp.deptno=dept.deptno
    
    
    select * from salgrade; --工资等级
    
    select ename,sal,grade from 
    emp join salgrade on sal between losal and hisal;
   
   --自连接:将一张表作为两张表看待进行的连接
   --格式from table t1 join table t2 on t1.col=t2.col 
    
   select  w.ename,n.ename from emp w join emp n on w.mgr=n.empno ;
   
   select ename,d.deptno,dname from emp join dept d on emp.deptno=d.deptno;
    --子查询 :查询中嵌套查询
    select * from emp;
    select sal from emp where ename='SMITH1';
    select * from emp where sal>1100
    
    --多行子查询
    select * from emp where sal>(select avg(sal) from emp);
    
    select * from emp where sal>all(select avg(sal) from emp  group by deptno) ;--大于部门平均工资的
        select * from emp where sal>any(select avg(sal) from emp  group by deptno) ;--大于任意部门平均工资的
        
        
       --3
       --相关子查询:定义 在子查询中需要使用主查询中行的查询
       --相关子查询的执行流程
           1)首先从主查询中获取一行
           2)利用主查询中获取行执行子查询
           3)在执行一次主查询
           
           --普通相关子查询
          select ename,sal,deptno from emp e where 
          sal>(select avg(sal) from emp where deptno=e.deptno);
           
       --exiats   查询管理者
       select ename,sal,deptno from emp e where exists(select 1 from emp where mgr=e.empno )
       
    select * from emp for update;
    
    
    select avg(sal) from emp  group by deptno
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值