sql 语句2

查询

select empno,ename,sal from emp; -- 只看部分列
select empno,ename,sal from emp  where sal>2000; -- 看部分列 和sal大于2000的数据
select empno as'员工 编号',ename as '姓名',sal as '工资' from emp; -- 起别名
​
--  查询到的用运算符:
select empno,ename,sal,sal+100 as '涨薪后',deptno from emp where sal < 2500;
select empno,ename,sal,comm,sal+comm from emp;
​
-- 去重
select distinct job from emp; 
select distinct job,deptno from emp; -- 对所有列组合去重 而不是单独列
​
-- 排序
select * from emp order by sal asc; -- 对sal进行升序排列
select * from emp order by sal desc; -- 对sal进行降序排列
select * from emp order by sal asc deptno desc; -- 再sal升序中 如果sal相同 deptno降序排列
​
-- where 将过滤条件放在where子句的后面,可以筛选/过滤出我们想要的符合条件的数据
​
--  where 子句+关系运算符  && (and) 
select * from emp where  sal >1500 and sal<3500;
select * from emp where  sal >1500 && sal<3500;
select * from emp where job = 'clerk'; -- m默认不区分大小写
select * from emp where  binary job = 'clerk'; -- binary区分大小写
select * from emp where sal >1500 and  sal <3000 order by sal asc; -- 再1500<sal<3000进行升序排列 [1500,3000)
select * from emp where sal between 1500 and 3000;  -- [1500,3000]
​
-- where 句子+关系运算符   ||(or)
select * from emp where deptno = 10 or deptno = 20;
select * from emp where deptno = 10 || deptno = 20;
select * from emp where deptno in(10,20);
select * from emp where job in('CLERK','ANALYST');
​
​
-- where 子句 +模糊查询    %代表任意多个字符 0,1,2。。。。
select * from emp where ename like '%A%';
​
-- _任意字符  可以加两个就表示第三位的查询(ADAMS,CLARK,BLAKE)
select * from emp where ename like '__A%';
​
-- 关于null的判断  is(是)     is not(不是)
select * from emp where comm is null;
select * from emp where comm is not null;
​
-- 小括号的使用     
select * from emp where job = 'SALESMAN' or job = 'CLERK' amd sal >= 1500;  -- 先and  再 or     amd  > or
select * from emp where job = 'SALESMAN' or (job = 'CLERK' amd sal >= 1500);
select * from emp where (job = 'SALESMAN' or job = 'CLERK') amd sal >= 1500;

函数

单行函数

-- 1  单行函数     lower(转小写)     upper(转大写)
select empno,ename,lower(ename),upper(ename),sal from emp;
​
-- 2   单行函数    length(长度)  substrng(截取)   
select enmae,length(ename),substring(ename,2,3) from emp;
​
-- 3   单行函数  abs(绝对值)   ceil(向上取整数)  floor(向下取整数)  round(四舍五入)    dual实际就是一张伪表
select abs(-5),ceil(5.3),floor(5.9),round(3.14) from dual;
select abs(sal) as '工资绝对值',ceil(sal) as'工资向上取整数',floor(sal) as'向下取整数',round(sal) as '四舍五入' from emp;
select 10/3,10%3 ,mod(10,3);  -- mod 模型
​
-- 4 日期函数   --curdate()年月日     curtime()时分秒    sleep(3)睡了3秒
select curdate(),curtime() from emp;
select now(),sysdate(),sleep(3),sysdate() from dual;    -- now() 当前时间   sysdate()函数执行到这的时间     都表示 年月日 时分秒
​
-- 5 流程函数
        -- if相关
select empno,ename,sal,if(sal>=2500,'高薪','底薪')as '薪资等级'from emp;  -- if -else 双分子
select empno,ename,sal,comm,sal+ifnull(comm,0) from emp; -- 如果comm是null,那么取值为0 -- 单分子
select nullif(1,1),nullif(1,2) from dual; -- 如果value1=value2 ,则返回null, 否则 value1
    
        -- case 相关的;  
                -- case 等值判断    
        select empno,job,
        case job
        when 'CLERK' then '店员'  -- 如果 job 是clerk 就是店员
        when 'SALESMAN' then '销售'  -- 如果 job是salesman 就是销售
        when 'MANAGER'then '经理'
        else '其它'   -- 其它 
        end '岗位',
        sal from emp;
        
        -- case 区间判断
        select empno,ename,sal,
        case 
        when sal<= 1000 then 'A'  -- 0< sal <=1000 就是A
        when sal<= 2000 then 'B'  -- 1000< sal <= 2000 就是B
        when sal<= 3000 then 'c'  -- 2000< sal <= 3000 就是C
        else 'D'                  -- 其它 都是 D
        end '工资等级',
        sal from emp;
    
    -- 6 其它函数   database()当前用的数据是什么名字   user() 用户是什么  version() 数据库的版本
    select database(),user(),version() from emp;

多行函数 除了多行函数(max,min,count,sum,avg),都是单行函数

-- 多行函数     max(最大值)  min(最小值)   count(个数)   sum(求和)   avg(平均值)
select max(sal),min(sal),count(sal),sum(sal),avg(sal) from emp;
-- count 计数
select count(*) from emp; -- *所有记录

group by 分组

     -- group by 分组
select deptno,avg(sal) from emp group by deptno; -- 先分 按deptno 分组 然后进行 取平均值
​
 -- 先按 deptno 分组 然后取平均值 然后按照deptno 进行排序升序
select deptno,avg(sal) from emp group by deptno order by deptno asc; 
-- 先按 deptno 分组 然后取平均值 然后按照deptno 进行排序降序
select deptno,avg(sal) from emp group by deptno order by deptno desc;    
     
select job,avg(sal) from emp group by job;  -- 先按job分组  然后sal取平均值
select job,lower(job),avg(sal) from emp group by job;  -- 先按job分组  然后sal取平均值 job小写

havign 分组后二次筛选

    -- 分组后二次筛选
-- 先按照 deptno 分组 然后取平均值大于 2000的数据
select deptno,avg(sal) from emp group by deptno having avg(sal)> 2000; 
​
select deptno,avg(sal) as '平均工资' from emp group by deptno having 平均工资>2000; -- 起了别名
 -- 升序排列
select deptno,avg(sal) as '平均工资' from emp group by deptno having 平均工资>2000 order by deptno asc; 
-- 降序排列
select deptno,avg(sal) as '平均工资' from emp group by deptno having 平均工资>2000 order by deptno desc; 

~~~ 统计

-- 统计各个岗位的平均工资 除了MANAGER
        -- 方式1
        select job,avg(sal) from emp where job != 'MANAGER'group by job;
        
        -- 方式2
        select job,avg(sal) from emp group by job having job != 'MANAGER';
        -- where 在分组前进行过滤      having 则是在分组后进行过滤
​

总结

 -- select 语句总结
--          【1】select语句总结
--              select column, group_function(column) 
--              from table 
--              [where condition]                       -- where 进行第一次过滤
--              [group by  group_by_expression]          -- 分组
--              [having group_condition]                 --  二次过滤
--              [order by column];                      -- 进行排序
-- 
--              注意:顺序固定,不可以改变顺序
-- 
--              【2】select语句的执行顺序
--              from--where -- group  by–  select   -  having-   order  by

多表查询

-- 多表查询    cross join 交叉查询  
 -- 笛卡尔乘积    :  没有实际的意义
 select *
 from emp
 cross join dept;
 
 
 --  自然连接  natural join
 -- 优点 : 自动匹配所有的同名列
 select * 
 from emp
 natural join dept;
 
 
-- 内连接  -- using 子句
 -- 缺点 using关联的字段必须是同名的
select * 
from emp e
inner join dept d
using(deptno) 

--  内连接里面的   on子句
select *
from emp e
inner join dept d
on (e.deptno = d.deptno);

-- 多表查询的类型:1.交叉连接 cross join  2, 自然连接 natural join    3, 内连接 inner join  - using子句   4, 内连接 - on子句
-- 条件
-- 1.筛选条件:where having
-- 2.连接条件:on, using, natural 
 

-- 外连接    可以显示一些不匹配的数据 
-- 左外连接 left outer join    展示全部 左边的信息
select * 
from emp e
left outer join dept d
on e.deptno = d.deptno;

-- 右外连接 right  outer join    展示全部 右边的信心
select *
from emp e
right outer join dept d
on e.deptno = d.deptno;


-- 全外连接    union 并集     union all 并集不去重复的
select * 
from emp e
left outer join dept d
on e.deptno = d.deptno
union   -- 取的并集   
select *
from emp e
right outer join dept d
on e.deptno = d.deptno;
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小王学java^

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值