zoukankan      html  css  js  c++  java
  • Mysql 4 —— select 进阶

    起别名

    • 便于理解
    • 如果要查询的字段有重名的情况,使用别名可以区分开

    方式一:使用as

     mysql> SELECT 100%98 As 结果;
     mysql> SELECT last_name As 姓, first_name As 名 FROM employees;

    方式二:使用空格

     mysql> SELECT last_name 姓 , first_name 名 FROM employees;
    案例:查询salary,显示结果为 out put
     mysql> SELECT salary As "out put" FROM employees; ///注意这边的双引号

    去重

    案例:查询员工表中涉及|到的所有的部门编号   

     mysql> SELECT DISTINCT department_id FROM employees;

    +号的作用

    回顾java中的+号:

    • 运算符,两个操作数都为数值型
    • 连接符,只要有一个操作数为字符串

    mysql中的+号,仅仅只有一个功能:运算符

    mysql>select 100+90;///两个操作数都为数值型,则做加法运算
    mysql>select '123'+90;///其中一方为字符型,试图将字符型数值转换成数值型
                ///如果转换成功,则继续做加法运算
    mysql>select 'john'+90;1     ///如果转换失败,则将字符型数值转换成0

    特别的,只要一方为NULL,结果肯定为null

    在mysql中的拼接有一个函数加concat     

    mysql> concat('a','b','c') as '字符集' from XXX;

     但如果其中有一个是null,那么结果就是null。

    条件筛选

    一、简单条件运算符

    > < <> != = <= >= <=>

    二、按逻辑表达式筛选

    案例1:查询工资z在10000到20000之间的员工名、工资以及奖金

    mysql>SELECT last_name,salary, commission_pct FROM employees WHERE salary>=10000 AND salary<=20000;

    案例2:查询部门编号不是在90到110之间,或者工资高于15000的员工信息

    mysql>SELECT * FROM employees where NOT (department id>=90 ANDdepartment id<=110) OR salary>15000;

    三、模糊查询

    1、like特点:

    —般和通配符搭配使用

        通配符:
        %任意多个字符,包含0个字符任意单个字符

        _任意单个字符。

    案例1:查询员工名中包含字符a的员工信息

    mysql>SELECT * from employees where last name like '%a%';

    案例2:查询员工名中第三个字符为e,第五个字符为a的员工名和工资

    mysql>SELECT * last_name,salary from employees where last_name like '__e_a%';

    案例3:查询员工名中第二个字符为_的员工名

    mysql>SELECT last_name from employees where last_name like '--%';

    mysql>SELECT last_name from employees where last_name like '-&-%' ESCAPE '&';

    2、between and

    可以提高语句的简洁度 包含临界值 两个临界值不要调换

    案例1:查询员工编号在100到120之间的员工信息

    mysql>SELECT * FROM employees WHERE employee_id >=100 AND employee_id<=120;

    mysql>SELECT * FROM employees WHERE employee_id between 100 AND 120;

    3、in

    含义:判断某字段的值是否属于in列表中的某一项

    特点:1、使用in提高语句简洁度 2、in列表的值类型必须统一或兼容3、不支持like语法中的通配符

    案例:查询员工的工种编号IT_PROG、AD_VP、AD_PRES中的一个

    mysql>SELECT last_name , job_id FROM employees WHERE job_id = 'IT_PROG' OR job_id = 'AD_VP' OR job_id = 'AD_PRES';

    mysql>SELECT last_name , job_id FROM employees WHERE job_id IN ('IT_PROG' , 'AD_VP' , 'AD_PRES');

    4、is nulll is not null

    =或<>不能用于判断null值

    is null 或 is not null 可以判断null值

    案例1:查询没有奖金的员工名和奖金率

    mysql>SELECT last_name,commission_pct FROM employees WHERE commission_pct IS NULL;

    mysql>SELECT last_name,commission_pct FROM employees WHERE commission_pct <=> NULL;

    补充  安全等于 <=>

    排序查询 

    语法 SELECT 查询列表 FROM 表 【WHERE 筛选条件】order by 排序序列 【ascldesc】

    特点:

    • asc代表升序,desc代表的是降序,如果不写,默认是升序。
    • order by 子句中国可以支持单个字段、多个字段、表达式、函数、别名
    • order by 子句一般是放在查询语句的最后面,但limit 子句除外。

    案例1:查询员工信息,要求工资从高到低排序 SELECT * FROM employees ORDER BY  DESC;

    SELECT * FROM employees ORDER BY  ASC;

    案例2:查询部门编号>=90的员工信息,按入职时间先后进行排序

    SELECT * employees WHERE department_id>=90 ORDER BY hiredate ASC;

    案例3:按年薪的高低显示员工的信息和年薪【按表达式排序】

    SELECT *,salary*12*(1+IFNULL(commission_pct,0)) 年薪 FROM employees OREDER BY salary*12*(1+IFNULL(commission_pct,0)) DESC;

    案例4:按年薪的高低显示员工的信息和年薪【按别名排序】

    SELECT *,salary*12*(1+IFNULL(commission_pct,0)) 年薪 FROM employees 年薪 DESC;

    案例5:按姓名的长度显示员工的姓名和工资【按函数排序】

    SELECT LENGTH(last_name) 字节长度, last_name, salary FROM employees ORDER BY LENGTH(last_name) 字节长度 DESC;

    案例6:查询员工信息,要求先按工资升序,再按员工编号降序【按多个字段排序】

    SELECT * FROM employees ORDER BY salary ASC, employee_id DESC;

    常见函数

    概念:类似与java的方法,将一组逻辑语句封装在方法体中,对外暴露方法名

    好处:1、隐藏了实现细节  2、提高代码的重用性

    调用 select 函数名(实参列表)【from 表】

    特点:1、叫什么 2、干什么

    分类:1、单行函数 如 concat、length、ifnull      2、分组函数 功能:做统计使用,又称为统计函数、聚合函数、组函数

    一、字符函数

    1、length 获取参数值的字节个数

    SELECT LENGTH('john');///4

    SELECT LENGTH('张三丰hahaha');///15

    SHOW VARIABLES LIKE '%char%'

    2、concat 拼接字符串

    SELECT CONCAT(last_name,'_',first_name) 姓名 FROM employees;

    3、upper、lower

    SELECT UPPER('jhon');

    SELECT lower('jOHn');

    4、substr、substring

    截取从指定索引处后面所有字符

    SELECT SUBSTR ('李莫愁爱上了陆展元',7) out_put;///陆展元

    截取从指定索引处指定字符长度的字符

    SELECT SUBSTR ('李莫愁爱上了陆展元',1, 3) out_put;///李莫愁

    5、instr  返回子串第一次出现的索引,如果找不到返回0

    SELECT INSTR ('李莫愁爱上了陆展元','陆元') AS output;

    6、trim 

    SELECT length(TRIM('         张翠山         ‘)AS output ;//////3

    SELECT TRIM('a' FROM 'aaaaaaaaaaaaa张aaaaaa翠山aaaaaaaaaaaa‘)AS output ;//////张aaaaaa翠山

    7、lpad 用指定的字符实现左填充

    SELECT LPAD('殷素素',10,'*') output;

    8、Rpad 用指定的字符实现左填充

    9、replace 替换

    SELECT REPLACE ('周芷若周芷若周芷若周芷若周芷若张无忌','周芷若','赵敏');///赵敏赵敏赵敏赵敏赵敏赵敏张无忌

    二、数学函数

    round() 四舍五入

    ceil()向上取整,返回>=该参数的最小整数

    floor() 向下取整,返回<=该参数的最大整数

    truncate 截断

    mod取余   a-a/b*b

    三、日期函数

    now() 返回当前系统的日期+时间

    curdate 返回当前系统的日期,不包含时间

    curtime 返回当前系统的时间,不包含日期

    year()  day()  month()  hour() minute() second()

    str_to_date  将字符通过指定的格式转换成日期

    SELECT STR_TO_DATE('1998-3-2' , '%Y-%c-%d' ) As out _put;#查询入职日期为1992-4-3的员工信息
    SELECT *FROM employees WHERE hiredate = '1992-4-3';
    SELECT * FROM employees WHERE hiredate = STR_TO_DATE('4-3 1992', ' %c-%d %Y');

    date_format

    select phone,  date_format(time, '%Y%m%d%H%i%s') from   user   where   phone='xxxxxxxx'   #20160513160750
    select phone,  date_format(time, '%Y%m%d') from   user   where   phone='xxxxxxxx'                #20160513

    四、其他函数

    version 当前数据库服务器的版本

    database当前打开的数据库

    五、流程控制函数

    1、if函数:if else 的效果

    select if (10<5,'大','小');

    2、case 函数的使用一:switch case 的效果

    switch

    java中
    switch(变量或表达式){
    case 常量1:语句1; break;...
    default:语句n; break;
    }
    mysql中
    case要判断的字段或表达式
    when常量1 then要显示的值1或语句1; when常量2 then要显示的值2或语句2;I...
    else要显示的值n或语句n;
    end

    SELECT department_id
    WHEN 30 THEN salary*1.1
    WHEN 40 THEN salary*1.2
    WHEN 50 THEN salary*1.3
    ELSE salary
    END AS 新工资
    FROM employees;

    3、case函数的使用二(类似于多重if):
    java中:if(条件1){
    语句1;
    }else if(条件2){
    语句2;
    }
    else{
    语句n;

    SELECT salary,
    CASE
    WHEN salary>20000 THEN 'A'
    WHEN salary>15000 THEN 'B'
    WHEN salary>10000 THEN 'C'
    ELSE 'D'
    END AS 工资级别
    FROM employees;

     分组函数

    1、sum 求和、avg平均值、max最大值﹒min最小值、count计算个数

    2、以上分组函数都忽略null值

    3、可以和distinct搭配是实现去重的运算

    4、count 函数

    SELECT SUM(salary) FROM employees;

    SELECT AVG(salary) FROM employees;

    SELECT count(*) FROM employees;

    SELECT count(1) FROM employees;

     分页查询

    应用场景:当要显示的数据,一页显示不全,需要分页提交sql请求

    语法:

      SELECT 查询列表

      FROM 表

      【join type join 表2】

      ON 连接条件

      WHERE 筛选条件

      GROUP BY 分组字段

      HAVING 分组后筛选

      ORDER BY 排序后的字段

      LIMIT OFFSER SIZE;

    offset要显示条目的起始索引(起始索引从0开始)

    size 要显示的条目个数

     特点:

    • limit语句放在查询语句的最后
    • 公式
      • 要显示的页数page,每页的条目数size
      • select 查询列表 from 表 (page-1)*size,size;
    转载请注明出处:https://www.cnblogs.com/stu-jyj3621
  • 相关阅读:
    C#自定义控件之数字文本框
    C# 校验字符串是否为IP格式
    C# winform 解决加载闪烁,背景透明等问题
    SQL Server 数据类型
    C#自定义控件之下拉列表框
    C#将 byte[ ] 转换为对应的struct
    AFNetworking图片上传
    xfs删除oracle数据文件恢复
    揭秘String类型背后的故事——带你领略汇编语言魅力
    [批处理]截取for命令里面的变量%%i
  • 原文地址:https://www.cnblogs.com/stu-jyj3621/p/14285853.html
Copyright © 2011-2022 走看看