数据库语言学习之DQL

本文详细介绍了SQL查询语言的基础操作,包括简单查询、字段选择、多字段查询、全表信息获取、别名、条件查询、排序、数据处理函数以及分组查询和去重。内容涵盖了数据选择、过滤、排序和聚合的关键概念。
摘要由CSDN通过智能技术生成

数据查询语言(凡是带有select关键字的都是查询语言)

                Select…

1.简单查询,查询一个字段:

                        Select  字段名 from 表名;

                                Select和from:关键字

                                字段名和表名:标识符(可改)

2.查询两个或多个字段:

                        以,隔开;

                        mysql> select deptno,dname from dept;

                        +--------+------------+

                        | deptno | dname      |

                        +--------+------------+

                        |     10 | ACCOUNTING |

                        |     20 | RESEARCH   |

                        |     30 | SALES      |

                        |     40 | OPERATIONS |

3.查询全表信息:

mysql> select * from dept;

   效率低,可读性差,不建议

+--------+------------+----------+

| DEPTNO | DNAME      | LOC      |

+--------+------------+----------+

|     10 | ACCOUNTING | NEW YORK |

|     20 | RESEARCH   | DALLAS   |

|     30 | SALES      | CHICAGO  |

|     40 | OPERATIONS | BOSTON   |

mysql> select deptno,dname,loc from dept;

   实际开发中建议讲*写成字段的形式。

+--------+------------+----------+

| deptno | dname      | loc      |

+--------+------------+----------+

|     10 | ACCOUNTING | NEW YORK |

|     20 | RESEARCH   | DALLAS   |

|     30 | SALES      | CHICAGO  |

|     40 | OPERATIONS | BOSTON   |

+--------+------------+----------+、

4.查询的列起别名:

                给查询结果的列重命名?

               select ename,sal * 12 as yearsal from emp;

                        其中的as可省略。

        别名中有中文?

               select ename,sal * 12 as 年薪 from emp; // 错误

                select ename,sal * 12 as '年薪' from emp;

注意:标准sql语句中要求字符串使用单引号括起来。虽然mysql支持双引号,尽量别用。

查询的字段中可以使用数学表达式:(as不改变原列名)

mysql> select ename as '姓名',sal*12 as '年薪' from emp;

+--------+----------+

| 姓名   | 年薪     |

+--------+----------+

| SMITH  |  9600.00 |

| ALLEN  | 19200.00 |

| WARD   | 15000.00 |

| JONES  | 35700.00 |

| MARTIN | 15000.00 |

| BLAKE  | 34200.00 |

| CLARK  | 29400.00 |

| MILLER | 15600.00 |

5.条件查询:

查询显示符合条件的数据;

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

        执行顺序:先from,然后where,最后select

Between  …  and  … 

闭区间,其包括两端的值,必须遵循左大右小的原则,否则报错!

数据库中null不能使用等号进行衡量,需要使用is null

        Null 代表啥也没有,不是值,无法用等号衡量。

and和or联合起来用:先执行and后执行or

select

ename,sal,deptno

from

emp

where   

sal > 1000 and deptno = 20 or deptno = 30; // 错误的

select

ename,sal,deptno

from     

emp

where

sal > 1000 and (deptno = 20 or deptno = 30); // 正确的。

                        注意:当运算符的优先级不确定的时候加小括号。

                                        in等同于or:in不是一个区间,in后面跟着一个具体的值

                        select ename,job from emp where job = 'SALESMAN' or job = 'MANAGER';

                        select ename,job from emp where job in('SALESMAN', 'MANAGER');

                        select ename,job from emp where sal in(800, 5000);

 // in后面的值不是区间,是具体的值。

                        +-------+-----------+

                        | ename | job       |

                        +-------+-----------+

                        | SMITH | CLERK     |

                        | KING  | PRESIDENT |

                        +-------+-----------+

               

                not in: 不在这几个值当中。

                        select ename,job from emp where sal not in(800, 5000);

                模糊查询:like支持%或下划线匹配

                        %匹配任意多个字符

                        _任意一个字符

(%和_都属于一个特殊的字符)

                                select name from t_user where name like '%_%'; //错误

                                select name from t_user where name like '%\_%';      //正确

使用/_转义特殊字符
  1. 排序(升序、降序)

select

         ename,sal

from

         emp

order by

         sal;

默认是升序!!!

注意:默认是升序。怎么指定升序或者降序呢?asc表示升序,desc表示降序。

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

        select ename , sal from emp order by sal asc; // 升序

       select ename , sal from emp order by sal desc; // 降序。

按照工资的降序排列,当工资相同的时候再按照名字的升序排列。

        select ename,sal from emp order by sal desc;

        select ename,sal from emp order by sal desc , ename asc;

        注意:越靠前的字段越能起到主导作用。只有当前面的字段无法完成排序的时候,才会启用后面的字段。

关键字顺序不能变!!! 

select

                字段                                       第三步

        from

                表名                                       第一步

        where

                条件                                       第二步

        order by

                ....                                           第四步

       

        order by是最后执行的。

  1. 数据处理函数:

数据处理函数又称单行处理函数。

        特点:一个输入对应一个输出

trim()去两边, LTRIM()去左边,RTRIM()去右边

Concat(字符串1,字符串2)函数:用来拼接字符串

Substr()取子串起始下标是由1开始

mysql的字符串转日期的函数用法_order by 字符串日期-CSDN博客

Str_to_date 字符串转日期

Date_format 日期转换成具有一定格式的字符串

MySQL format()函数_mysql format函数-CSDN博客

格式化数字: format(数字,‘格式’);

mysql> select ename,format(sal,'$999,999') as sal from emp;

Rand()函数生成0——1之间的随机数

       

下面的脚本使用 DATE_FORMAT() 函数来显示不同的格式。我们使用 NOW() 来获得当前的日期/时间:

DATE_FORMAT(NOW(),’%b %d %Y %h:%i %p’)

DATE_FORMAT(NOW(),’%m-%d-%Y’)

DATE_FORMAT(NOW(),’%d %b %y’)

DATE_FORMAT(NOW(),’%d %b %Y %T:%f’)

结果类似:

Dec 29 2018 11:45 PM

12-29-2018

29 Dec 18

29 Dec 2018 16:25:46.635

select

    ename,job,sal,

       (case job when 'manager' then sal*1.1when 'salesman' then sal*1.5 else sal end)

        as result

from

emp;

相对函数叫做多行处理函数。

        特点:多个输入对应一个输出,输入多行,输出单行

count 计数

sum 求和

avg 平均值

max 最大值

min 最小值

分组查询group by

  1. 分组函数自动忽略NULL,无需提前处理NULL
  2. 分组函数中count(*)和count(具体字段)的区别?

  1. 分组函数不能直接使用在where子句中

 

  1. 分组查询******非常重要

Select…(字段)

from…(表名)

where….(条件)

group by…(分组查询,某个字段)having…(条件)

order by…(排序)

能使用where过滤掉的,先用where

Where和having,优先选择where,where实在完成不了再考虑having

  1. 把查询结果去除重复记录distinct

去重关键字:Distinct

注意:原表数据不会被修改,只是查询结果去重

基本语句:

  • 29
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值