zoukankan      html  css  js  c++  java
  • mysql 第二天 常用的函数

    ---   常用的函数

    --  日期函数

    -- 用date_format将文本'2019-01-01'转换为日期型

    select date_format('2019-01-01','%Y-%m-%d'); ##大写y为四位数字的年,小写为两位数字的年


    -- 用last_day函数返回当前月份的最后一天的日期
    select now();
    select last_day(curdate());


    -- 用datediff函数计算两个日期相隔天数
    select datediff(last_day(curdate()),curdate()); ##第一参数为结束时间,第二位开始时间


    -- 字符串函数
    -- 用instr函数查找w在hello world短语中出现的字符位置
    select instr('cda','c'); ##查找所在位置


    -- 用lower函数将HELLO转换为小写
    select lower('HELLO');


    -- 用upper函数将world转换为大写

    -- 用concat函数将两个文本连接在一起 只能用concat函数 ||拼接是在oracle中 &连接是在excel中

    select concat('c','da');

    -- 用replace函数将hello earth短语中的earth替换为world

    select replace('hello.earth','earth','world');

    -- 用substr函数提取hello world文本中第三位开始5个字符
    select substr('hello world',3,5); ##excal中的mid()函数一样
    select mid('hello world',3,5);

    -- 用cast函数将fruit表中的f_id整数型转换为字符串型
    select cast(f_id as char(9)) from fruit; ##转换类型有一定的局限

    -- 分组合并函数
    -- 查询每个客户购买了哪几种水果

    -- 分组合并函数
    -- 查询每个客户购买了哪几种水果
    
    select s_name  group concat (f_name)
    from fruit
    group by  s_name;
    
    -- 逻辑函数
    -- ifnull 将空值填充为0
    
    select * ,ifnull(f_price,0)
    from fruit;
    
    -- if函数
    -- 查询f_id,f_name,f_price和价格区间(f_price<10低,10<=f_price<20中,f_price>=20高)
    
    select f_id,f_name,f_price,if(f_price<10,'低',if(f_price>=20,'高','中')  as 价格区间
    from fruit;
    
    
    -- 逻辑表达式 case when ... then...else ... end
    -- 查询f_id,f_name,f_price和价格区间(f_price<10低,10<=f_price<20中,f_price>=20高)
    
    select f_id,f_name,f_price,case when f_price <10 then '低' when f_price >=20 then '高' else '中' end  as 价格区间
    from fruit;
    

      单表查询练习

    -- 创建雇员表
    CREATE TABLE emp1 (
        empno INT AUTO_INCREMENT PRIMARY KEY,
        ename VARCHAR(15),
        job VARCHAR(10),
        mgr INT,
        hiredate DATE,
        sal DECIMAL(7 , 2 ),
        comm DECIMAL(7 , 2 ),
        deptno INT
    );
    
    
    -- 导入雇员信息
    INSERT INTO EMP1 VALUES (7369,'SMITH','CLERK',7902,'1980-12-17',800,NULL,20);
    INSERT INTO EMP1 VALUES (7499,'ALLEN','SALESMAN',7698,'1981-2-20',1600,300,30);
    INSERT INTO EMP1 VALUES (7521,'WARD','SALESMAN',7698,'1981-2-22',1250,500,30);
    INSERT INTO EMP1 VALUES (7566,'JONES','MANAGER',7839,'1981-4-2',2975,NULL,20);
    INSERT INTO EMP1 VALUES (7654,'MARTIN','SALESMAN',7698,'1981-9-28',1250,1400,30);
    INSERT INTO EMP1 VALUES (7698,'BLAKE','MANAGER',7839,'1981-5-1',2850,NULL,30);
    INSERT INTO EMP1 VALUES (7782,'CLARK','MANAGER',7839,'1981-6-9',2450,NULL,10);
    INSERT INTO EMP1 VALUES (7788,'SCOTT','ANALYST',7566,'1987-4-19',3000,NULL,20);
    INSERT INTO EMP1 VALUES (7839,'KING','PRESIDENT',NULL,'1981-11-17',5000,NULL,10);
    INSERT INTO EMP1 VALUES (7844,'TURNER','SALESMAN',7698,'1981-9-8',1500,0,30);
    INSERT INTO EMP1 VALUES (7876,'ADAMS','CLERK',7788,'1987-5-23',1100,NULL,20);
    INSERT INTO EMP1 VALUES (7900,'JAMES','CLERK',7698,'1981-12-3',950,NULL,30);
    INSERT INTO EMP1 VALUES (7902,'FORD','ANALYST',7566,'1981-12-3',3000,NULL,20);
    INSERT INTO EMP1 VALUES (7934,'MILLER','CLERK',7782,'1982-1-23',1300,NULL,10);
    
    SELECT * FROM emp1;
    SELECT COUNT(*) FROM emp1;
    
    -- 1.查询基本工资大于1500的员工信息
    
    select *
    from emp
    where sal >1500;
    
    -- 2.查询员工姓名不以S开头的任意长度的员工信息
    
    select *
    from emp
    where  ename  not like 's%';
    
    -- 3.查询职位为president或manager的员工信息
    
    select *
    from emp
    where job = 'president' and job = 'manager'
    
    或者
    
    select *
    from emp
    where job in ('president','manager');
    
    
    
    -- 4.查询工资在2000-3000元之间的员工信息
    
    
    select *
    from emp
    where sal between 2000 and 3000 ;
    
    
    -- 5.查询emp表中没有奖金的员工信息
    
    select *
    from emp
    where comm  is null;
    
    -- 6.查询各部门平均工资、最高工资、最低工资、以及员工数量
    
    select deptno,avg(sal),max(sal),min(sal),count(empno)
    from emp1
    group by deptno;
    
    
    -- 7.查询平均工资在2000元以上的职位信息,并按照平均工资的降序显示
    
    select job, avg(sal)
    from emp1
    group by job
    having avg(sal)>2000
    order by avg(sal) desc;
    
    
    -- 8.查询各部门manager的平均工资
    
    select job ,acg(sal),deptno
    from emp
    where job = 'manager'
    group by deptno;
    
    -- 9.查询员工姓名、入职日期、试用截止日期和工龄   ##工龄的计算now()还可以用curdate()
    
    select ename,hiredate,date_add(hiredate,interval 3 month),datediff(now(),hiredate)/365
    from emp;
    
    
    -- 10.查询上层管理者工号及其对应的下属员工姓名
    
    select mgr,group_concat(ename)    ##group_concat()  分组连接
    from emp
    group by  mgr;
    

       

  • 相关阅读:
    url传参数出现乱码解决方法
    ASP.NET 当GridView中没有数据的时候,显示标题栏 并且给出一行数据提
    纯手工打造 IFAN (光盘回收及午餐筷子回收事业)
    javascript 收集
    Winform 中的控件透明设置要点
    对指定的网页进行截图 C#版
    生成短GUID的两个方法
    按键相关的 JS脚本代码
    ISCSI Enterprise Target 的其他资源和地址
    ORA01403:no data found 解决方法两则
  • 原文地址:https://www.cnblogs.com/manjianlei/p/11278866.html
Copyright © 2011-2022 走看看