mysql——查询命令简单汇总

原文:https://blog.csdn.net/weixin_42057767/article/details/82861873

 

一、简单查询

1.数据查询      

 SELECT colName1,colName2,colName3,.. FROM tName [约束]
 

    SELECT 选择查询列表    FROM 提供数据源(表、视图或者其他数据源)

    //查询所有的列,显示顺序和创建表中的顺序一致

    SELECT * FROM tName 
 

=======================================
                        全列/投影查询
=======================================
练习
1,查询所有员工信息
select * from emp;
2,查询每个员工的编号、姓名、职位
select empno,ename,job form emp;
3,查询所有部门信息
select * from dept; 

 

 

2.避免重读(去重)-DISTINCT

SELECT DISTINCT colName FROM tName
 

  =======================================
                        消除重复
=======================================
distinct关键字可以用于一列,也可以用于多列

练习
1,查询所有有员工的部门编号
select distinct deptno  from emp;
2,查询哪些部门和职位有员工
select distinct job,deptno from emp;
 只有当job和deptno相同,才认为是重复的数据。

 

3.数据运算查询

        对NUMBER类型,可以使用算术操作符创建表达式 (+ - * /)
        对DATE类型,可以使用部分算术运算符创建表达式(+ -)
        运算符优先级
            1.先乘除后加减
            2.同级运算符,从左到右
            3.表达式中使用“括号”,可强行改变运算顺序
=======================================
                        算术操作符
=======================================
练习
1,查询所有员工的年薪
select ename,sal * 12 '年薪' from emp;
2,查询所有员工的年薪(使用别名)
3,查询每月都有500元的餐补和200元交通补助并且年底多发一个月工资的年薪
select ename,(sal + 500 + 200)*12+sal '年薪'from emp;
4,演示date类型数据的运算:查询员工的雇佣日期加上10
select DATE_ADD(hiredate,INTERVAL 10 DAY) from emp;

 

 

4.空值查询-IS NULL

WHERE colName IS NULL
 

=======================================
                        空值判断
=======================================
空值:
1、空值是指不可用、未分配的值,也就是没有值。
2、空值不等于零或空格
3、任意类型都可以支持空值,也就是说任何类型的字段都可以允许空值作为值的存在
*注意:包括空值的任何算术表达式都等于空

练习:
查询所有员工的年终奖((月薪+奖金)*12)
select ename,(IFNULL(comm,0)+sal)*12 '年薪' from emp ;
函数:IFNULL(expr1,expr2)          
如果expr1不是NULL,IFNULL()返回expr1,否则它返回expr2

使用IS NULL(IS NOT NUll)运算符
1,查询有奖金的员工信息
SELECT * from emp where comm is not NULL;
2,查询公司的老板
select * from emp where mgr is null;   

 

 

5.where子句  

    使用WHERE子句限定返回的记录
  

 SELECT colName1,colName2 FROM tName [WHERE 限制条件 AND/OR 限制条件2]
 

=======================================

                        限定查询
=======================================
注意:
1、字符串和日期要用单引号扩起来
2、数字类型直接书写
3、字符串是大小写不敏感的,日期值是格式敏感的
4、字符串敏感,需要添加binary关键字

练习
要求查询出基本工资高于1500的所有员工信息
select * from emp where sal >= 1500;
1,查询名字叫SCOTT的员工所从事的工作
select * from emp where ename = 'scott';
严格区分大小写,binary
select * from emp where binary ename = 'SCOTT';
2,查询1981年入职的员工信息.
select * from emp where hiredate between '1981-01-01' and '1981-12-31';

 

6.比较运算符(字符串类型和日期类型需要加上单引号)

        >,<,>=,<=,=,!=(<>)
  =======================================
                        比较运算符
=======================================
常用算术比较运算符:
1,=,!=,<>,>,>=,<,<=:等于和不等于
2,BETWEEN ... AND  ...:在两值之间 (包含开始和结尾);
3,IN(list):匹配列出的值;
4,LIKE :匹配字符串模式;
5,IS NULL:是否为空;

练习:
使用比较运算符
1,查询1981年之后入职的员工信息
select * from emp where hiredate > '1981-12-31';
2,查询年薪小于3W的员工
select * from emp where (sal * 12) < 30000;
3,查询所有不是销售人员的员工信息
select * from emp where not job = 'salesman';
使用BETWEEN运算符
1,查询工资在2000-3000之间的员工信息
select * from emp where sal between 2000 and 3000;
2,查询工资不在2000-3000之间的员工信息
select * from emp where  not sal between 2000 and 3000;
3,查询1981年入职的员工
select * from emp where hiredate between '1981-01-01' and '1981-12-31';
        限制区分大小写,在WHERE子句后面加上BINARY(很少用)

 

 

7.集合查询

        IN运算符,判断列的值是否在指定的集合中
      

 WHERE colName in(value1,value2...)
 

1,查询工资为800或1600或3000的员工
select * from emp where sal in(800,1600,3000);
2,查询工资不为800或1600或3000的员工
select * from emp where not sal in(800,1600,3000);

 

8.模糊查詢

        使用LIKE运算符执行通配符查询,查询条件可包含文字字符或数字,  使用LIKE运算符LIKE运算符必须使用通配符才有意义:
        通配符:用来实现匹配部分值的特殊字符
        匹配单个字符:_;             ->  1个
        匹配任意多个字符:%;      ->  0个、1个、多个
=======================================
                        like运算符
=======================================
1.查询出所有雇员姓名是以A开头的全部雇员信息。
select * from emp where ename like 'A%';
2.查询出雇员姓名第二个字母是M的全部雇员信息。
select * from emp where ename like '_M%';
3.查询出雇员姓名任意位置上包含字母A的全部雇员信息。
select * from emp where ename like '%a%';

 

9.逻辑运算符    

 

AND                      组合条件都是TRUE,返回TRUE
OR 一个条件为TRUE,返回TRUE
NOT     如果跟上的条件为TRUE,返回FALSE

        优先级    比较运算符>NOT>AND>OR
    范围查询-BETWEEN minvalue AND maxvalue[闭区间范围]
        使用between运算符显示某一值域范围内的记录,这个操作符最常见的使用在数字类型和日期类型数据的范围上,但对于字符类型和日期类型同样可用
        select * from tName where colName between minvalue and maxvalue

=======================================
                        逻辑运算符
=======================================
AND:如果组合的条件都是true,返回true.  
OR:如果组合的条件 之一是true,返回true.
NOT:如果下面的条件是false,返回true.

优先级规则:    比较运算符 > NOT > AND > OR

SQL的执行顺序是from-->where-->select-->ORDER BY

练习:
1,查询姓名中有e或者a的员工姓名
select * from emp where ename like '%e%' or ename like '%a%';
2,查询工资在1500~3000之间的全部员工信息
select * from emp where sal between 1500 and 3000;
3,查询出职位是办事员(CLERK)或者是销售人员(SALESMAN)的全部信息,并且工资在1000以上.
select * from emp where (job = 'CLERK'or job ='SALESMAN') and sal >= 1000;

 

 

10.结果排序

    排序语法和规则
        使用ORDER BY 子句将查询记录进行排序
        ASC:升序,缺省
        DESC:降序
        ORDER BY 子句在SELECT子句的最后
    
    按单列排序

  SELECT * FROM tName ORDER BY colName [DESCASC]    
 

    按多列排序(先后)

SELECT * FROM tName ORDER BY colName1 [DESCASC],colName2 [DESCASC]
 

    列的别名排序(别名使用单引号之后不能排序)

 
 
  1. SELECT colName AS cn FROM tName ORDER BY cn [DESCASC]

  2. SELECT colName AS 'c n' FROM tName ORDER BY 'c n' [DESCASC] FALSE

=======================================
                        结果排序
=======================================
使用ORDER BY 子句将记录排序
ASC: 升序,缺省
DESC: 降序

ORDER BY 子句出现在SELECT语句的最后
ORDER BY 可以使用别名

练习:
1,查询所有员工信息,按照工资排序
select * from emp order by sal ASC;
2,查询所有员工信息,按照年薪降序排序;
select ename,sal * 12 '年薪' from emp ORDER BY (sal * 12) DESC;
3,查询所有员工信息,按照部门和年薪降序排序;
select ename,deptno,sal * 12 '年薪' from emp ORDER BY deptno desc,sal * 12 ASC;
 

 

11.列別名

        1.改变列的标题头       
        2.用于表示计算结果的含义
        3.作为列的表名
        4.如果别名中使用特殊字符,或者强制大小写敏感,或者有空格的时候,都需要加单引号(不建议使用列的别名使用单引号,因为一旦使用,该列不能排序)
        5.as可以省略(不建议省略)
        SELECT colName as newName FROM tName

 

 

 

MySQL查询函数

    函数的分类:
    1,单行函数:将每条数据进行独立的计算,然后每条数据得到一条结果。
    2,多行函数:多条数据同时计算,最终得到一条结果数据。也成为聚集函数、分组函数, 主要用于完成一些统计功能。

 

 

 

二、聚合函数(组函数、多行函数)

 聚合函数作用于一组数据,并且对一组数据返回一个值

    统计结果记录数:COUNT
    统计计算最大值:MAX
    统计计算最小值:MIN
    统计计算求和:   SUM
    统计计算平均值:AVG

 
 
  1. SELECT AVG(colName1) FROM tName

  2. SELECT COUNT(*)COUNT(id) FROM tName

=======================================
            多行函数--->常用的统计函数
=======================================
分组函数在计算时省略列中的空值
不能在where语句中使用分组函数

查询所有员工每个月支付的平均工资及总工资
select AVG(sal),sum(sal) from emp;
查询月薪在2000以上的员工总人数.
select COUNT(*) from emp where sal > 2000;
查询员工最高工资和最低工资差距
select MAX(sal),MIN(sal) from emp;

 

 

 

三、单行函数

1.字符函数

=======================================
            单行函数--->字符函数
=======================================

    (1).字符串大小写转换

    LOWER(str):返回字符串str变为小写字母的字符

 

    UPPER(str):返回字符串str变为大写字母的字符
    --------------------------------------------------------
    把HelloWorld转换为全大写,全小写.
    select LOWER('HelloWorld');
    select UPPER('HelloWorld');

    (2).字符串拼接

    CONCAT(str1,str2,...):

 

    1,返回结果为连接参数产生的字符串。
    2,如有任何一个参数为NULL ,则返回值为 NULL
    3,允许有一个或多个参数
    -------------------------------------------------------
    1,查询所有员工的全名
    select CONCAT('查询出',ename,'的全名') from emp;
    2,查询得到输出结果:某某's'的月薪是:xx
    select CONCAT(ename,'的月薪是',sal) from emp;

    (3).查看字符串长度

    CHAR_LENGTH:字符串长度;

 

    LENGTH:字符串长度(单位为字节);

    对比试验:
    SELECT CHAR_LENGTH('龙哥17岁') FROM DUAL;
    SELECT LENGTH('龙哥17岁') FROM DUAL;
 

    (4).字符串填补

    LPAD(str,len,padstr)

 

    1,返回字符串str, 其左边由字符串padstr 填补到len字符长度。
    2,假如str 的长度大于len, 则返回值被缩短至len 字符。
    SELECT LPAD('ABC',7,'X'),LPAD('ABC',5,'X'),LPAD('ABC',3,'X'),LPAD('ABC',1,'X') FROM DUAL;
    返回的结果是XXXXABC             XXABC             ABC                A

    RPAD(str,len,padstr)

 

    1,返回字符串str, 其右边被字符串padstr填补至len 字符长度。
    2,假如字符串str 的长度大于 len,则返回值被缩短到与len 字符相同长度。
 

    (5).字符串去空格

    LTRIM(str):左边空格被trim掉;
    RTRIM(str):右边空格被trim掉;

    TRIM(str)=LTRIM+RTRIM
    TRIM([{BOTH | LEADING | TRAILING} [remstr] FROM] str):高级用法,从str中按照指定方式截取remstr;
    TRIM(remstr FROM] str):相当于TRIM(BOTH remstr FROM str);

    SELECT LTRIM(' A B C '),RTRIM(' A B C '),TRIM(' A B C ') FROM DUAL;
    返回的结果是   A B C_          _A B C           A B C

    

     (6).字符串替换

    REPLACE(str,from_str,to_str):

 

    1,在str中把from_str全部替换为to_str;
    2,大小写敏感;

    SELECT REPLACE('ABCDaBCABA','A','X') FROM DUAL;
                                XBCDaBCXBX

   

    (7).字符串截取

    SUBSTRING(str,pos):

 

    从字符串str返回一个子字符串,起始于位置pos
    SELECT SUBSTRING('asdfghijkl', 3);         [0,3)       dfghijkl

   

    SUBSTRING(str,pos,len):

    从字符串str返回一个长度同len字符相同的子字符串,起始于位置pos
    SELECT SUBSTRING('asdfghjkl', 3, 2);                df

    如果pos是负数,从字符串尾部开始计算;
    SELECT SUBSTRING('ABCDEF',-3),SUBSTRING('ABCDEF',-3,3) FROM DUAL;

                                    def                                                def

 

 

2.数字函数

=======================================
            单行函数--->数字函数
=======================================

    (1).取绝对值

        ABS(x):返回一个数字的绝对值;

        SELECT ABS(-17),ABS(17) FROM DUAL;

        17       17

    (2).取模 

        MOD(N,M):返回N 被 M除后的余数;
        SELECT MOD(10,5),MOD(10,3) FROM DUAL;
        0         1

    (3).取天花板

        CEIL(x):返回不小于X 的最小整数值;

        SELECT CEIL(0.5),CEIL(-1.5),CEIL(1.5) FROM DUAL;
                          1         -1        2

    (4).取地板

        FLOOR(x):返回不大于X的最大整数值;
        SELECT FLOOR(0.5),FLOOR(-1.5),FLOOR(1.5) FROM DUAL;
                                0              -2         1

    (5).四舍五入

        ROUND(X) /ROUND(X,D):

        1,返回参数X, 其值接近于最近似的整数。  
        2,在有两个参数的情况下,返回X ,其值保留到小数点后D位,而第D位的保留方式为四舍五入。
        3,若要接保留X值小数点左边的D 位,可将 D 设为负值。
        select ROUND(1.5);
        select ROUND(1.49);
        SELECT ROUND(3.1465926,2);            3.15
        SELECT ROUND(321.1415926,-2);
        TRUNCATE(X,D)

        (6).截去函数

        1,返回被舍去至小数点后D位的数字X。

            select TRUNCATE(3.1415926,2);
        2,若D 的值为 0, 则结果不带有小数点或不带有小数部分。可以将D设为负数,若要截去(归零) X小数点左起  第D位开始后面所有低位的值.
            select TRUNCATE(3.1415926,0);
            select TRUNCATE(312.1415926,-1);

 

3.日期函数

=======================================
            单行函数--->日期函数
=======================================
获取当前系统时间
select NOW();

DATE_ADD(date,INTERVAL expr type)/DATE_SUB(date,INTERVAL expr type)向日期添加指定的时间间隔
1,执行日期运算;
2,date 是一个 DATETIME 或DATE值,用来指定起始时间;
3,expr 是一个字符串表达式,用来指定从起始日期添加或减去的时间间隔值;
4,type 为关键词,它指示了表达式被解释的方式

SELECT DATE_ADD('2016-10-13',INTERVAL 22 DAY) FROM DUAL;        2016-11-4
SELECT DATE_ADD(NOW(),INTERVAL 100 DAY) FROM DUAL;

使用方法参考MYSQL 5.5中文参考手册547页;
--------------------------------------------------------------------------
type 参数可以是下列值:
Type 值
MICROSECOND
SECOND
MINUTE
HOUR
DAY
WEEK
MONTH
QUARTER
YEAR
SECOND_MICROSECOND
MINUTE_MICROSECOND
MINUTE_SECOND
HOUR_MICROSECOND
HOUR_SECOND
HOUR_MINUTE
DAY_MICROSECOND
DAY_SECOND
DAY_MINUTE
DAY_HOUR
YEAR_MONTH

SELECT CURRENT_DATE(),CURRENT_TIME() FROM DUAL;

DATEDIFF(expr,expr2):返回起始时间expr和结束时间expr2之间的天数

SELECT DATEDIFF('2016-05-08','2016-11-04')'天数' FROM DUAL;

DAY(date):获取日期中的天数(DAYOFMONTH)
select DAY(NOW());
HOUR(time)
返回time 对应的小时数。对于日时值的返回值范围是从 0 到 23
select HOUR(NOW());
MINUTE(time)
返回 time 对应的分钟数,范围是从 0 到 59
select MINUTE(NOW());
MONTH(date)
返回date 对应的月份,范围时从 1 到 12。
select MONTH(NOW());
YEAR(date)
返回date 对应的年份,范围是从1000到9999。
select YEAR(NOW());
LAST_DAY(date)
获取一个日期或日期时间值,返回该月最后一天对应的值
select LAST_DAY(NOW());
UNIX_TIMESTAMP(date):它会将参数值以'1970-01-01 00:00:00' GMT后的秒数的形式返回
FROM_UNIXTIME(unix_timestamp) , FROM_UNIXTIME(unix_timestamp,format):返回'YYYY-MM-DD HH:MM:SS'或指定format的日期

SELECT UNIX_TIMESTAMP(NOW()) FROM DUAL;

SELECT FROM_UNIXTIME(UNIX_TIMESTAMP(NOW())) FROM DUAL;

 

 

4.转换

=======================================
            单行函数--->转换函数
=======================================
FORMAT(X,D)
将数字X 的格式写为'#,###,###.##',以四舍五入的方式保留小数点后D 位, 并将结果以字符串的形式返
回。若D 为 0, 则返回结果不带有小数点,或不含小数部分。
SELECT FORMAT(123456.789,2) FROM DUAL;

格式:DATE_FORMAT(date,format):把日期转换为字符串.

SELECT DATE_FORMAT(NOW(),'%Y-%m-%d') FROM DUAL;

STR_TO_DATE(str,format):把字符串转换为日期。
SELECT STR_TO_DATE('2015/11/29','%Y/%m/%d') FROM DUAL;


单行函数可被嵌入到任何层在嵌套的时候,最内层的函数最先被执行,执行的结果被传递到它的外层函数,作为参数使用,然后依次从内向外执行,直到所有的函数执行完。


 

三、分页查询

    MySQL的分页设计:
    假分页(逻辑分页,内存分页):
        一次性查询出所有的数据存放在内存中,每次翻页的时候,都从内存中取出
        指定的条数
        特点:翻页比较快,如果数据量过大,可能造成内存溢出,不推荐
    
    真分页(物理分页,数据库分页)(推荐):
        每次翻页都从数据库中截取指定的条数
        假设每页十条数据,第一页0~9,第二页重新查询10~19条数据
        特点:翻页比较慢,不会造成内存溢出

    设计:
        int pageSize=3:表示每页最多显示3条数据
        第一页:SELECT * FROM tName LIMIT 0,3
        第二页:                                                3,3
        第三页:                                                   6,3    

        分页查询结果集的SQL

 
 
  1. SELECT * FROM tName LIMIT ?,?;

  2. 第一个?:(currentPage-1)*pageSize

  3. 第二个?:pageSize

 

你可能感兴趣的