zoukankan      html  css  js  c++  java
  • 2.基础查询、条件查询、排序查询、常见函数(单行函数)

    DQL:data query language 数据查询语言:select

    一、基础查询

    /*
    语法:
    use 指定库名;
    select 查询列表
    from 表名

    特点:
    1.查询列表可以是:表中的字段、常量值(字符型和日期型的常量必须用单引号引起来)、表达式、函数
    2.查询的结果是一个虚拟的表格

    */
    #1.查询表中的单个字段
    #select last_name from employees;

    #2.查询表中的多个字段
    #select last_name,salary,email from employees;

    #3.查询表中所有字段
    #select * from employees;

    #4.查询常量值
    #select 100;
    #select 'john';

    #5.查询表达式
    #select 100%98;

    #6.查询函数
    #select version();

    #7.为字段起别名
    /*
    ①便于理解
    ②如果要查询的字段有重名的情况,可以使用别名可以区分
    */
    #方式一:使用as (当别名中有特殊符号时(空格、关键字等),最好用 as "别名")
    #select 100%98 as 结果;
    #方式二:使用空格
    #select last_name 姓,first_name 名 from employees;

    #8.去重 在字段前面加上关键字 distinct

    #查询员工表中涉及的所有的部门编号
    #select distinct department_id
    #from employees

    #9.+号的作用:运算符
    /*
    mysql中的+号:仅仅只有一个功能 :运算符

    select 100+90; 两个操作数都为数值型,则做加法运算
    select '123'+90; 其中一方为字符型,试图将字符型数值转换成数值型
                               如果转换成功,则继续做加法运算
    select 'john'+90; 如果转换失败,则将字符型数值转换成0,在做加法运算
    select null+10; 只要其中一方为null,则结果肯定为null
    */

    #两个字段拼接 concat
    #案例:查询员工名和姓连接成一个字段,并显示为 姓名
    #select concat('a','b','c') as 结果;
    SELECT CONCAT(last_name,first_name) AS 姓名
    FROM employees;

    #10.显示某个表的结构:DESC 表名

    #11.判断某个字段是否为null :函数IFNULL(表的某个字段,返回值)
    SELECT IFNULL(commission_pct,0) AS 奖金率 #如果有为null的值,则用0代替其值
    FROM employees;

    # isnull(字段) 判断字段值是否为null :如果为null返回1,不是null返回0

    二、条件查询

    /*
    语法
    select 查询列表
    from 表名
    where 筛选条件

    分类:(筛选条件)
    1.按条件表达式筛选
    条件运算符:>、 <、 =、 !=、 <>(不等于)、<=、 >=

    2.按逻辑表达式
    作用:用于连接条件表达式
    逻辑运算符:&& || !
                         and or not

    3.模糊查询
    like:特点:①一般和通配符搭配使用
                     通配符:% 任意多个字符,包含0个字符
                                    _ 任意单个字符

    between and 特点:①使用between and 可以提高语句的简洁度
                                     ②包含临界值
                                     ③临界值不能调换(>=左边值,<=右边值)

    in :判断某字段的值是否属于in列表中的某一项
    特点:①使用in提高语句简洁度
               ②in列表中的值类型必须一致或兼容
               ③列表中不支持通配符

    is null 特点:!= 或<>不能用于判断null值
                         is null 或者 is not null可以判断null值
    */
    #1.条件表达式筛选
    #案例1:查询工资>12000的员工信息
    SELECT *
    FROM employees
    WHERE salary >12000;

    #2.逻辑表达式
    #案例2:查询工资在10000和20000之间的员工信息
    SELECT *
    FROM employees
    WHERE salary >10000 AND salary<20000;

    #3.模糊查询
    #案例3:查询员工名中包含字符a的员工信息
    SELECT *
    FROM employees
    WHERE first_name LIKE '%a%';

    #案例4.查询员工名中第二个字符为_的员工名
    SELECT last_name
    FROM employees
    #where last_name like '_\_%';
    #或者 :escape ‘符号’ 表明该符号为转义字符
    WHERE last_name LIKE '_$_%' ESCAPE '$';

    #案例5:查询员工编号在100和120之间的员工
    SELECT *
    FROM employees
    WHERE employee_id >=100 AND employee_id<=120;
    #-----------------------------------------------
    SELECT *
    FROM employees
    WHERE employee_id BETWEEN 100 AND 120;

    #案例6:查询员工的工种编号是IT_PROG、AD_VP、AD_PRES中的一个员工名和工种编号
    SELECT last_name,job_id
    FROM employees
    WHERE job_id ='IT_PROG' OR job_id='AD_VP' OR job_id='AD_PRES';
    #------------------------------------------------------------
    SELECT last_name,job_id
    FROM employees
    WHERE job_id IN('IT_PROG','AD_VP' ,'AD_PRES');

    #案例7:查询没有奖金的员工名和奖金率
    SELECT last_name,commission_pct
    FROM employees
    WHERE commission_pct IS NULL;

    #安全等于 <=>
    #案例8:查询没有奖金的员工名和奖金率 同案例7
    SELECT last_name,commission_pct
    FROM employees
    WHERE commission_pct <=> NULL;

    #案例9:查询工资=12000的员工信息
    SELECT last_name,salary
    FROM employees
    WHERE salary <=>12000;

    #is null 和 <=>
    IS NULL:仅仅可以判断NULL值 可读性较高
    <=>:既可以判断NULL值,又可以判断普通数值 可读性较低

     三、排序查询

    /*
    语法 select 查询列表
    from 表
    where 筛选条件
    order by 排序列表字段 【asc 升序 | desc降序】默认为升序

    特点;1.asc表示升序,desc表示降序 默认为asc
    2.order by 子句中可以支持单个字段、多个字段、表达式、函数、别名
    3.order by 子句一般放在查询的最后,limit子句除外

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

    #案例2:查询部门编号>=90的员工信息,按照入职时间的先后进行排序
    SELECT *
    FROM employees
    WHERE department_id >=90
    ORDER BY hiredate;

    #案例3:按年薪的高低显示员工的信息和年薪 按表达式排序
    SELECT *,salary*12*(1+IFNULL(commission_pct,0))
    FROM employees
    ORDER BY salary*12*(1+IFNULL(commission_pct,0));

    #案例4:按姓名的长度显示员工的姓名和工资【按函数排序】length
    SELECT LENGTH(last_name) AS 字节长度,last_name,salary
    FROM employees
    ORDER BY 字节长度;

    #案例5:查询员工信息,先按工资排序再按员工编号排序
    SELECT *
    FROM employees
    ORDER BY salary ASC,employee_id DESC;

    四、常见函数-单行函数
    /*
    调用:select 函数名(实参列表)【from 表】
    特点:①叫什么(函数名)
               ②干什么(函数功能)

    分类:①单行函数:
               如 concat、length、ifnull

               ②分组函数
               功能:做统计,又称为统计函数、聚合函数、组函数
    */

    一、字符函数
    #1.length 获取参数值的字节个数
    SELECT LENGTH('john');
    SELECT LENGTH('张三丰');

    #2.concat 拼接字符串
    SELECT CONCAT(last_name,'_',first_name) AS 姓名
    FROM employees;

    #3.upper、lower 大小写
    SELECT UPPER('abcd');
    SELECT LOWER('ssww');
    #示例 将姓变成大写 名变成小写 然后拼接
    SELECT CONCAT(UPPER(last_name),'_',LOWER(first_name))
    FROM employees;

    #4.substr 、substring 截取字符
    #注意:索引都从1开始
    #substr('字符',起始位置) 截取从指定索引处后面所有字符
    SELECT SUBSTR('李莫愁大魔女',4) out_put ; #结果为大魔女
    #substr('字符',起始位置,截取长度) 截取从指定索引处指定字符长度的字符
    SELECT SUBSTR('李莫愁大魔女',1,3); #结果为 李莫愁

    #示例 姓名中首字符大写,其他字符小写,然后用_拼接
    SELECT CONCAT(UPPER(SUBSTR(last_name,1,1)),'_',LOWER(SUBSTR(last_name,2))) out_put
    FROM employees;

    #5.instr 返回子串第一次出现的索引,如果没找到返回0
    SELECT INSTR('张三和李四','李四') AS out_put;

    #6.trim 默认为前后去掉空格 也可以去掉指定字符 前后
    SELECT TRIM(' 张三 ') AS out_put; #结果为 张三
    SELECT TRIM('a' FROM 'aaa张aaaaa三aaa') AS out_put; #结果为 张aaaaa三

    #7.lpad 用指定的字符实现左填充指定长度 总长度为指定长度 超过指定长度 将右边字符截断丢弃
    SELECT LPAD('李三',10,'a');

    #8.rpad 用指定的字符实现右填充指定长度

    #9.replace 替换
    SELECT REPLACE('张三和李四','李四','王五');

    #二、数学函数

    #1.round 四舍五入 先将绝对值四舍五入再加上正负号
    SELECT ROUND(1.65); #2
    #小数点保留指定位数
    SELECT ROUND(1.5678,2);#1.57

    #2.ceil 向上取整,返回>=该参数的最小整数
    SELECT CEIL(1.002);#2

    #3.floor 向下取整,返回<=该参数的最大整数
    SELECT FLOOR(-9.99); #-10

    #4.truncate 截断
    SELECT TRUNCATE(1.65,1); #1.6

    #5.mod 取余 结果正负由被除数决定
    SELECT MOD(10,3);

    #三、日期函数
    #1.now 返回当前系统日期+时间
    SELECT NOW();

    #2.curdate 返回当前系统日期,不包含时间
    SELECT CURDATE();

    #3.curtime 返回当前系统时间,不包含日期
    SELECT CURTIME();

    #可以获取指定的部分,年,月,日,小时,分钟,秒
    SELECT YEAR(NOW()) AS 年;
    SELECT YEAR('1998-1-1');

    SELECT MONTH(NOW()) 月; #3
    SELECT MONTHNAME(NOW()) 月;#March

    #4.str_to_date 将字符通过指定的格式转换成日期
    SELECT *
    FROM employees
    WHERE hiredate = STR_TO_DATE('4-3 1992','%c-%d %Y');

     

    #5.data_format 将日期转换成字符
    SELECT DATE_FORMAT(NOW(),'%Y年%m月%d日') AS out_put;

    #四、其他函数
    SELECT VERSION();
    SELECT DATABASE();
    SELECT USER();

    #五.流程控制函数
    #1.if函数 if else效果 类似于三元运算符 第一个表达式为true时,返回位置二,否则返回魏志三
    SELECT IF(10 < 5,'大','小'); #小
    SELECT last_name,commission_pct,IF(commission_pct IS NULL,'没奖金','有奖金')
    FROM employees;

    #2.casr函数的使用一:switch case 的效果
    /*
    case 要判断的字段或表达式
    when 常量1 then 要显示的值1(或语句1;)
    when 常量2 then 要显示的值2(或语句2;)
    ……
    else 要显示的值n(或者语句n;)
    end
    */

    /*案例:查询员工工资,要求
    部门号=30,显示工资的1.1倍
    部门号=30,显示工资的1.2倍
    部门号=30,显示工资的1.3倍
    其他部门,显示的工资为原工资
    */

    SELECT salary AS 原始工资,department_id,
    CASE 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
    /*
    case
    when 条件1 then 要显示的值1(或语句1;)
    when 条件2 then 要显示的值2(或语句2;)
    ……
    else 要显示的值(或语句2;)
    end

    */
    /*案例 查询员工工资
    如果工资>20000,显示A级别
    如果工资>15000,显示B级别
    如果工资>10000,显示C级别
    否则,显示D级别
    */
    SELECT salary AS 原工资,
    CASE
    WHEN salary>20000 THEN 'A'
    WHEN salary<20000 AND salary>15000 THEN 'B'
    WHEN salary<15000 AND salary>10000 THEN 'C'
    ELSE 'D'
    END AS 等级
    FROM employees;

    TCL:transaction control language 事务控制语言

  • 相关阅读:
    python模块总结(一)命令行解析模块argparse
    TCP(一)三次握手和四次挥手
    容器网络(四)vxlan
    容器网络(三)容器间通信
    kvm虚拟化(二)网络虚拟化
    KVM虚拟化(一)创建虚拟机
    数字操作 —— 9_ 回文数
    数字操作 —— 8_字符串转换整数(atoi)
    数字操作 —— 7_整数反转
    字符串操作 —— 763_划分字母区间
  • 原文地址:https://www.cnblogs.com/sun1997/p/12550426.html
Copyright © 2011-2022 走看看