今日Mysql总结

目录

​编辑

1.导入数据

2.简单查询(查询表中数据)

3.查看表结构

4.查询多个字段

5.条件查询 

6. 排序

7.数据处理函数 

8.分组函数(多行处理函数)

9.分组查询

10.总结


1.导入数据

 show databases;------->create database bjpowernode;------->use bjpowernode;-------->source 文件的绝对路径/相对路径

2.简单查询(查询表中数据)

select 字段名 from 表名;

select ,from是关键字。字段名和表名是标识符。

sql不区分大小写。

3.查看表结构

不看表中的数据,只看表的结构

desc 表名;

4.查询多个字段

(1)select 字段名,字段名 from 表名

字段名之间用“,”隔开

(2)给查询的列起别名

select deptno,dname as deptname from dept;

注意:

只是将显示的查询结果列名显示为deptname,原表列名还是叫:dname
select语句是永远都不会进行修改操作的。(因为只负责查询)

as 可以省略。当别名内有空格时必须使用单引号或者双引号括起来,数据库中的字符串都是采用单引号括起来。这是标准的。双引号不标准。

5.条件查询 

select 字段名,字段名 from 表名 where 条件;

    语法格式:
        select
            字段1,字段2,字段3....
        from 
            表名
        where
            条件;

    = 等于
    查询薪资等于800的员工姓名和编号?
        select empno,ename from emp where sal = 800;
    查询SMITH的编号和薪资?
        select empno,sal from emp where ename = 'SMITH'; //字符串使用单引号

    <>或!= 不等于
    查询薪资不等于800的员工姓名和编号?
        select empno,ename from emp where sal != 800;
        select empno,ename from emp where sal <> 800; // 小于号和大于号组成的不等号

    < 小于
    查询薪资小于2000的员工姓名和编号?
        mysql> select empno,ename,sal from emp where sal < 2000;

    <= 小于等于
    查询薪资小于等于3000的员工姓名和编号?
        select empno,ename,sal from emp where sal <= 3000;


    > 大于
    查询薪资大于3000的员工姓名和编号?
        select empno,ename,sal from emp where sal > 3000;

    >= 大于等于
    查询薪资大于等于3000的员工姓名和编号?
        select empno,ename,sal from emp where sal >= 3000;

    between … and …. 两个值之间, 等同于 >= and <=
    查询薪资在2450和3000之间的员工信息?包括2450和3000
        第一种方式:>= and <= (and是并且的意思。)
            select empno,ename,sal from emp where sal >= 2450 and sal <= 3000;

        第二种方式:between … and …
            select 
                empno,ename,sal 
            from 
                emp 
            where 
                sal between 2450 and 3000;
            
            注意:
                使用between and的时候,必须遵循左小右大。
                between and是闭区间,包括两端的值。

    is null 为 null(is not null 不为空)
    查询哪些员工的津贴/补助为null?
        mysql> select empno,ename,sal,comm from emp where comm = null;

        mysql> select empno,ename,sal,comm from emp where comm is null;
    

    and 并且
    查询工作岗位是MANAGER并且工资大于2500的员工信息?
        select 
            empno,ename,job,sal 
        from 
            emp 
        where 
            job = 'MANAGER' and sal > 2500;
        

    or 或者
    查询工作岗位是MANAGER和SALESMAN的员工?
        select empno,ename,job from emp where job = 'MANAGER';
        select empno,ename,job from emp where job = 'SALESMAN';

        select 
            empno,ename,job
        from
            emp
        where 
            job = 'MANAGER' or job = 'SALESMAN';
        
  
    
    and和or同时出现的话,有优先级问题吗?
    查询工资大于2500,并且部门编号为10或20部门的员工?
        select 
            *
        from
            emp
        where
            sal > 2500 and deptno = 10 or deptno = 20;
            and优先级比or高。
            以上语句会先执行and,然后执行or;

        select 
            *
        from
            emp
        where
            sal > 2500 and (deptno = 10 or deptno = 20);
        
        and和or同时出现,and优先级较高。如果想让or先执行,需要加“小括号”
        以后在开发中,如果不确定优先级,就加小括号就行了

    in 包含,相当于多个 or (not in 不在这个范围中)
     
            select empno,ename,job from emp where job = 'MANAGER' or job = 'SALESMAN';
            select empno,ename,job from emp where job in('MANAGER', 'SALESMAN');
            注意:in不是一个区间。in后面跟的是具体的值。

        查询薪资是800和5000的员工信息?
            select ename,sal from emp where sal = 800 or sal = 5000;
            select ename,sal from emp where sal in(800, 5000); //这个不是表示800到5000都找出来。
            select ename,sal from emp where sal in(800, 5000, 3000);

            // not in 表示不在这几个值当中的数据。
            select ename,sal from emp where sal not in(800, 5000, 3000);

    not 可以取非,主要用在 is 或 in 中
        is null
        is not null
        in
        not in

    like 
        称为模糊查询,支持%或下划线匹配
        %匹配任意多个字符
        下划线:任意一个字符。
        (%是一个特殊的符号,_ 也是一个特殊符号)

        找出名字中含有O的?
        mysql> select ename from emp where ename like '%O%';
        +-------+
        | ename |
        +-------+
        | JONES |
        | SCOTT |
        | FORD  |
        +-------+

        找出名字以T结尾的?
            select ename from emp where ename like '%T';
            
        找出名字以K开始的?
            select ename from emp where ename like 'K%';

        找出第二个字每是A的?
            select ename from emp where ename like '_A%';
        
        找出第三个字母是R的?
            select ename from emp where ename like '__R%';
       

        找出名字中有“_”的?
            select name from t_student where name like '%_%'; //这样不行。

            mysql> select name from t_student where name like '%\_%'; // \转义字符。
            +----------+
            | name     |
            +----------+
            | jack_son |
            +----------+

6. 排序

select  ename,sal  from  emp  order by  sal; // 默认是升序

指定降序:select ename,sal from emp order by sal desc;

指定升序:select ename,sal from emp order by sal asc;

多个字段排序

select  ename,sal from emp order by sal asc, ename asc; // sal在前,起主导,只有sal相等的时候,才会考虑启用ename排序。

7.数据处理函数 

数据处理函数又被称为单行处理函数

  单行处理函数的特点:一个输入对应一个输出。

  和单行处理函数相对的是:多行处理函数。(多行处理函数特点:多个输入,对应1个输出!)
常见单行处理函数

lower 转换小写

select lower(ename) as ename from emp;

upper 转换大写

select * from t_student;

select upper(name) as name from t_student;

    +----------+
       | name     |
        +----------+
        | ZHANGSAN |
        | LISI     |
        | WANGWU   |
        | JACK_SON |
        +----------+

substr 取子串(substr( 被截取的字符串, 起始下标,截取的长度))

select substr(ename, 1, 1) as ename from emp;注意:起始下标从1开始,没有0.

首字母大写

select name from t_student;
            select upper(substr(name,1,1)) from t_student;
            select substr(name,2,length(name) - 1) from t_student;
            select concat(upper(substr(name,1,1)),substr(name,2,length(name) - 1)) as result from t_student;
            +----------+
            | result   |
            +----------+
            | Zhangsan |
            | Lisi     |
            | Wangwu   |
            | Jack_son |
            +----------+

concat函数进行字符串的拼接

select concat(empno,ename) from emp;

length 取长度

select length(ename) enamelength from emp;

trim 去空格

select * from emp where ename = '  KING';

select * from emp where ename = trim('   KING');

str_to_date 将字符串转换成日期
date_format 格式化日期
format 设置千分位

case..when..then..when..then..else..end

round 四舍五入

select round(1236.567, 2) as result from emp; //保留2个小数
select round(1236.567, -1) as result from emp; // 保留到十位。

rand() 生成随机数

select round(rand()*100,0) from emp; // 100以内的随机数

ifnull 可以将 null 转换成一个具体值
ifnull是空处理函数。专门处理空的。
在所有数据库当中,只要有NULL参与的数学运算,最终结果就是NULL。

ifnull函数用法:ifnull(数据, 被当做哪个值)
如果“数据”为NULL的时候,把这个数据结构当做哪个值。

补助为NULL的时候,将补助当做0

 select ename, (sal + ifnull(comm, 0)) * 12 as yearsal from emp;

8.分组函数(多行处理函数)

多行处理函数的特点:输入多行,最终输出一行。

5个:
        count    计数
        sum    求和
        avg    平均值
        max    最大值
        min    最小值
    
    注意:
        分组函数在使用的时候必须先进行分组,然后才能用。
        如果你没有对数据进行分组,整张表默认为一组。

第一点:分组函数自动忽略NULL,你不需要提前对NULL进行处理。

第二点:分组函数中count(*)和count(具体字段)有什么区别?

count(具体字段):表示统计该字段下所有不为NULL的元素的总数。
            count(*):统计表当中的总行数。(只要有一行数据count则++)
                        因为每一行记录不可能都为NULL,一行数据中有一列不为NULL,则这行数据就是有效的。

9.分组查询

书写顺序,执行顺序

 

 分组函数不能直接使用在where后面,因为分组函数在使用的时候必须先分组之后才能使用。
 where执行的时候,还没有分组。所以where后面不能出现分组函数。

在一条select语句当中,如果有group by语句的话,select后面只能跟:参加分组的字段,以及分组函数。其它的一律不能跟。

having

使用having可以对分完组之后的数据进一步过滤。having不能单独使用,having不能代替where,having必须和group by联合使用。使用having可以对分完组之后的数据进一步过滤having不能单独使用,having不能代替where,having必须和group by联合使用。.

where和having,优先选择where,where实在完成不了了,再选择having。

10.总结

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值