大数据_MySQL之DQL(数据查询语言)

目录

引言

 一、MySQL概念、常见指令函数

1. MySQL

1.1.MySQL概念

1.2.MySQL的优点

1.3.MySQL服务的启动和停止

1.4.MySQL服务的登录和退出

1.5.MySqL的常见命令

2. 常见函数:

2.1.函数概念

2.2.常见函数分类(单行函数)

2.3.常见函数分类(分组函数)

三、基础查询 

1.语法 

 2.简单查询

3.起别名 

 4.计算列

5.补充知识

四、条件查询

1.概念

2.分类

3.特殊查询案例

五、排序查询

 1.概念

 2.排序分类

六、分组查询

1.语法概念 

2.特点

七、连接查询(重点)

1.背景概念

2.分类

2.1.按年代分类

2.2.按功能分类

 3.补充

八、子查询

 1.概念

 2.分类

2.1.按子查询出现的位置

2.2.按结果集的行列数不同

3.子查询的特点

九、分页查询(limit)

1.应用场景

2.语法

3.分页查询的特点 

十、联合查询(union)

十一:推书


引言


MySQL语言大致有以下几种:

DDL(Data definition language)数据定义语言,主要的操作对象是数据库和表的create、drop、alter。
DML(Data manipulation language) 数据操纵语言,主要的是对表进行insert、delete、update。
DQL(Data query language)数据查询语言,主要是对表数据进行各维度的select查询。
DCL(Data control language)数据控制语言, 用来设置或更改数据库用户或角色权限的语句,在默认情况下只有系统管理员有权利执行DCL。
TCL(transaction control language)事务控制语言, 主要有save、commit、roll、back等命令。
 

 今天先给大家跳个舞......哦不,给大家讲讲DQL数据查询语言吧。

 一、MySQL概念、常见指令函数


在给大家介绍DQL之前,我们先来了解一下MySQL与一些常见函数,方便我们在进行语言操作中的代码大家能够知道这个关键字、函数是什么意思。

1. MySQL

1.1.MySQL概念

MySQL 是最流行的关系型数据库管理系统,在 WEB 应用方面 MySQL 是最好的 RDBMS(Relational Database Management System:关系数据库管理系统)应用软件之一。

是基于客户机——服务器的DBMS(MySQL、Oracle、SqlServer)其中之一,是数据库管理系统分类之一。而既然是管理系统,那么必然有它自己的一套生态语言。

而我们进行MySQL操作,使用的语言呢?就是SQL

SQL:指的是结构化查询语言,用于和数据库通信的语言。其中分类之一,就有我们今天的重点——DQL数据查询语言

1.2.MySQL的优点

1、成本低:开放源代码,一般可以免费试用

2、性能高:执行很快

3、简单:很容易安装和使用

1.3.MySQL服务的启动和停止

方式一:计算机——右击管理——服务——MySQL

​方式二:通过管理员身份运行cmd命令提示行

        net start mysql(启动服务)

        ​net stop mysql(停止服务)

1.4.MySQL服务的登录和退出

方式一:通过MySQL自带的客户端(只限于root用户)

方式二:通过cmd命令提示行关闭,未配置MySQL环境变量,需在MySQL安装的bin下启动cmd。

        登录:​mysql 【-h主机名 -P端口号 】-u用户名 -p密码

                例如:【mysql -h localhost -P 3306 -u root -p】,回车,最后输入密码

                或者:【mysql -h localhost -P 3306 -u root -p密码】,直接回车

                如果本机,则可以简写为:【mysql -u root -p密码】

        ​退出:​exit或ctrl+C

 

1.5.MySqL的常见命令

1、查看当前所有的数据库
    show databases;
2、打开指定的库
    use 库名
3、查看当前库的所有表
    show tables;
4、查看其他库的所有表
    show tables from 库名;
5、创建表
    create table 表名(  列名  列类型,   列名   列类型,...... );
6、查看表结构
    desc 表名;
7、查看服务器的版本
    方式一:登录到mysql服务端    select version();
    方式二:没有登录到mysql服务端   mysql --version 或者 mysql --V

 

2. 常见函数:

而常见指令函数,是我们进行操作时,需要或肯定会用上的方法!没错,就是java中的方法,拿来用就行的方法。(重要的东西说三遍!)

2.1.函数概念

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

好处:

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

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

 特点
    1、叫什么(函数名)
    2、干什么(函数功能)

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

 

2.2.常见函数分类(单行函数

字符函数:
    concat: 拼接
    substr: 截取子串
        索引从1开始
        带长度截取,substring\substr(截取处索引,字符长度)
    upper: 转换成大写
    lower: 转换成小写
    trim: 去前后指定的空格和字符
        去字符时,需要在括号里面加一个单引号引出字符 from 字符对象。例如:select trim (‘a' from ’aaaaaaa张嘴山aaa‘)as 别名;
    ltrim: 去左边空格
    rtrim: 去右边空格
    replace: 替换
    lpad: 左填充
        用指定的字符实现左填充指定长度,例如:select lpad(’尹舒舒‘,10,’*‘)as out_put;输出结果:*******尹舒舒   (10 是字符长度,并不是字节长度)
    rpad: 右填充
    instr: 返回子串第一次出现的索引
    length: 获取字节个数    

 数学函数:
    round: 四舍五入
    rand: 随机数
        返回0-1之间的小数,无限接近1
    floor: 向下取整
        返回<=该参数的最大整数
    ceil: 向上取整
        返回>=该参数的最小整数
    mod: 取余
        取余运算mod(a,b),可以理解为:a-a/b*b
    truncate: 截断

 日期函数:
    now: 当前系统日期+时间
    curdate: 当前系统日期
    curtime: 当前系统时间
    str_to_date: 将字符转换成日期
    date_format: 将日期转换成字符
    datediff:
        返回两个日期相差的天数
    year、month、day、hour、minute、second
        返回年月日时分秒
    monthname:
        以英文形式返回月

 流程控制函数:


    if 处理双分支
        语句结构:
            if(条件表达式,表达式1,表达式2);
                如果条件表达式成立,返回表达式1,否则返回表达式2
            例如:select last_name,commission_pct,if(commission_pct is null, '没奖金’,‘有奖金’ ) as 备注;


    case语句 处理多分支
        情况1:处理等值判断
            语句结构1:
                case   要判断的字段或表达式                                                

                when  常量1   then  要显示的值1或语句1;                                

                when  常量2   then  要显示的值2或语句2;                            

                 ......                                                  

                else   要显示的值n或语句n;                                                

                 end
        情况2:处理条件判断
            语句结构2:
                case                                                                                        

                when 条件1 then 要显示的值1或语句1                                      

                when 条件2 then 要显示的值2或语句2                                                            

                ......                              

                else 要显示的值n或语句n                                                        

                end         

其他函数:
    version: 版本
        当前数据库服务器的版本
    database: 当前库
        当前打开的数据库
    user: 当前连接用户
    password(‘字符’)
        返回该字符的密码形式(自动加密)
    md5(‘字符’)
        返回该字符的md5加密形式 

 

2.3.常见函数分类(分组函数

 count:计算个数
    * 一般选择非空的列:主键
    * count(*)
* max:计算最大值
* min:计算最小值
* sum:计算和
* avg:计算平均值
* 特点:
    1、以上五个分组函数都忽略null值,除了 count(*)
    2、sum和avg一般用于处理数值型,max、min、count可以处理任何数据类型
    3、都可以搭配distinct使用,用于统计去重后的结果
    4、count的参数可以支持:
                * 字段、*、常量值,一般放1
注意:聚合函数的计算,排除null值。
    解决方案:
        * 选择不包含非空的列进行计算
        * IFNULL函数
和分组函数一同查询的字段要求是group by后的字段
*datediff(1,2);日期函数只见可以相减得出天数    

 

三、基础查询 


1.语法 

    格式:

        select 查询列表 from 表名;
       上述格式类似于:java中的打印语句System.out.println(打印东西);


    特点:
        1、查询列表可以是:表中的字段(文件名)、常量值(数值、字符(无字符串说法,都是单引号))、表达式(加减乘除取余等)、函数(java的方法)
        2、查询的结果是一个虚拟的表格


   查询表中所有记录:
    * select * from 表名;

 

2.简单查询

查询前,需要先打开库
    use 库名;


查询表中的单个字段
    select 字段名 from 表名;


多个字段的查询
    select 字段名1,字段名2... from 表名;
    * 注意:
        如果查询所有字段,则可以使用*来替代字段列表。(但顺序是表中一致)
        或者,单击表中的字段数据名,会自动写入其名字,可以自己排序。
        f12——自动格式化。

 

3.起别名 

起别名:
    * as(取别名,as可以省略)
    好处:
        便于理解
        如果要查询的字段有重名的情况,使用别名可以区分开来。
    例如:SELECT 100%98 AS 结果;(as可以省略)
        输出的就是:结果  2;
        清晰明了
    注意:
        取别名,有特殊字符(比如空格,比如#等等),要将别名用双引号引起来(单引也可,建议双引)

 

4.计算列

计算列
    * 一般可以使用四则运算计算一些列的值。(一般只会进行数值型的计算)
        +
            只为运算符
            两个操作数都为数值型,则做加法运算
            其中一方为字符型,则mysql试图将字符型数据转换成数值型
                如果转换成功,则继续做加法运算
                如果转换失败,则将字符型数据转换成0
            只要其中一方为null,则结果肯定为null


    * ifnull(表达式1,表达式2):null参与的运算,计算结果都为null
        * 表达式1:哪个字段需要判断是否为null
        * 如果该字段为null后的替换值。

 

5.补充知识

补充知识
    显示表的结构
        desc 表名;


    字段拼接
        concat
            例如:select concat(‘a’,‘b’,‘c’);
            输出:abc


    条件判断函数
        ifnull(判断值,返回值)
            例如:ifnull(”字段为“null,“返回”0);


    去除重复:
        * distinct
            在查询列表前插入即可
                例如:select distinct 字段名 from 表名; 

 

四、条件查询


1.概念

语法格式
    select  查询列表  from  表名  where  筛选条件;
执行顺序
    先表名,再条件,最后查询列表 

2.分类

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


    二、按逻辑表达式筛选
        逻辑运算符:&& || !  and or not


    三、模糊查询
        like、between and、in、is null、is not null
            like特点
                    一般和通配符搭配使用
                    通配符:
                        %  (百分号)任意多个字符,包含0个字符
                        _  (下划线)任意单个字符
                    案例:查询员工名中第三个字符为e,第五个字符为a的员工名和工资
                        select last_name,salary from employees where last_name like‘___e_a%’;
                        通配符中,三个下划线加e加一个下划线加a加%
                    注意:如果想要查询字段中,包含下划线的目标时,因为通配符中有下划线,所以我们需要进行转译操作。在查询字段位置处,加一个\,或者用其他字符,然后在引号后面加escape ‘我们使用的字符’;(推荐escape转译)
                        例如:where last_name like ‘_\_%’;或者where last_name like '_$_% ' escape '$';
            between and特点
                1、使用between and可以提高语句的简洁度
                2、包含临界值
                3、两个临界值不要调换顺序
            in特点
                1、使用 in 可以提高语句简洁度
                2、in 列表的值类型必须一致或兼容
                3、in 列表中不支持通配符的使用
            is null特点
                =或者<>(不等于)不能用于判断null值
                is null 或is not null可以判断null值
                补充:安全等于:<=>
                    <=>
                        既可以判断null值,也可以判断普通类型的数值
                        缺点:可读性不高,容易等于与不等于弄混
                建议用is null 

3.特殊查询案例


    查询员工号为176的员工的姓名和部门号和年薪?

代码如下:

select last_name,department_id,salary*12*(1+if(commission_pct,0)) as 年薪  

from employees  

where department_id=176;

 

五、排序查询


1.概念

语法:
     select
        要查询的东西
    from
        表
    where 
        条件
    order by 排序的字段|表达式|函数|别名 【asc|desc】
    执行顺序:先表,再条件,再查询东西,再排序


排序方式:
    * ASC:升序,默认的
    * DESC:降序


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

2.排序分类

1.按单个字段进行排序
2.按多个字段排序
3.按表达式排序
4.按别名排序
5.按函数排序

代码实例(图)

 

 

 

六、分组查询


1.语法概念 

语法
        select 分组函数,列(要求出现在group by的后面)                     

        from 表                                                                                        

      【where 筛选条件】                                      

        group by 分组的列表                                                        

      【order by 子句】
    注意:查询列表必须特殊,要求是分组函数和group by 后出现的字段
    案例:查询每个工种的最高工资
        select MAX    (salary) , job_id   from  employees  group by  job_id;

 
having后可以支持别名
    可以放在group by后,对count等进行查询。
    where 后不可以跟聚合函数,having可以进行聚合函数的判断

2.特点

特点
    1、分组查询中的筛选条件分为两类
        分组前筛选
            数据源:原始表
                位置:group by 子句的前面
                    关键字:where
        分组后筛选
            数据源:分组后的结果集
                位置:group by 子句的后面
                    关键字:having
        分组函数做条件肯定是放在having子句中
        能用分组前筛选的,就优先考虑使用分组前筛选


    2、group by 子句支持单个字段分组,多个字段分组(多个字段之间用逗号隔开没有顺序要求),表达式或函数(用得较少)


    3、也可以添加排序(排序放在整个分组查询的最后)order by

 

七、连接查询(重点)


1.背景概念

含义:
    又称多表查询,当查询的字段来自多于多个表时,就会用到连接查询


背景:笛卡尔乘积现象
    表1中有m行,表2有n行,结果等于n*m行
    发生原因:
        没有有效的连接条件
    如何避免:
        添加有效的连接条件

 2.分类

2.1.按年代分类


    sql92标准
        仅仅支持:内连接
        sql92标准等值连接
            1、多表等值连接的结果为多表的交集部分
            2、n表连接,至少需要n-1个连接条件
            3、多表的顺序没有要求
            4、一般需要为表起别名
            5、可以搭配前面介绍的所有子句使用,比如排序、分组、筛选等


    sql99标准(推荐)
        ①、支持:内连接+外连接(左外、右外)+交叉连接
                语法:
                  Select 查询列表
                  From 表1 别名 【连接类型
                  Join 表2 别名
                  On 连接条件
                【where 筛选条件】
                【group by 分组】
                【having 筛选条件】
                【order by 排序列表】


        ②、分类:(写在连接类型处)
            内连接: inner
                语法:
                        Select 查询列表
                        From 表1 别名
                        Inner join 表2 别名
                        On 连接条件;
                特点:
                    ①添加排序、分组、筛选都可以
                    ②inner可以省略
                    ③筛选条件放在where后面,连接条件放在on后面,提高分离性,便于阅读
                    ④inner join 连接和sql92语法中的等值连接效果是一样的,都是查询多表的交集
            外连接:
                应用场景:
                    用于查询一个表中有,另一个表没有的记录
                特点:
                    1、外连接的查询结果为主表中的所有记录
                        如果从表中有和它匹配的,则显示匹配的值
                        如果从表中没有和它匹配的,则显示null
                        外连接查询结果=内连接结果+主表中有而从表没有的记录
                    2、左外连接,left join 左边的是主表;                                     右外连接,right join 右边的是主表;
                    3、左外和右外交换两个表的顺序,可以实现同样的效果
                    4、全外连接=内连接的结果+表1中有但表2没有的+表2中有但表1没有的
                分类:
                    左外:left 【outer】
                    右外:right【outer】
                    全外:full【outer】

            交叉连接:cross
                就是一个两表笛卡尔乘积


    推荐sql99标准的理由:
        功能:sql99支持的比较多
        可读性:sql99实现连接条件和筛选条件的分离,可读性较高

2.2.按功能分类

按功能分类
    1.内连接
        等值连接            
        非等值连接
        自连接            
    2.外连接
        左外连接
        右外连接
        全外连接
    3.交叉连接

 

3.补充

为表起别名
    好处
        提高语句的简洁度
        区分多个重名的字段
    注意
        如果为表起了别名,则查询的字段就不能使用原来的表名去限定


加筛选条件
    在where语句后面加and子句;

 

八、子查询


1.概念

出现在其他语句内部的select语句,称为子查询或者内查询(外部的查询语句,称为主查询或外查询)
内部嵌套其他select语句的查询,称为外查询或者主查询

 示例代码

 

 

 2.分类

2.1.按子查询出现的位置

select后面:
    仅支持标量子查询
        案例
from后面:
    支持表之查询
    特点:将子查询结果充当一张表,要求必须起别名
    案例:查询每个部门的平均工资的工资等级
where或having后面:
    标量子查询(单行子查询)
        案例:
        
    列子查询(多行子查询)
    行子查询(结果集一行多列或多列多行)
exists后面(相关子查询):
    表子查询
    语法
        exists是完整的语句,结果返回0/1

2.2.按结果集的行列数不同

标量子查询(结果集只有一行一列)
列子查询(结果集只有一列多行)
行子查询(结果集有一行多列或多行多列)
表子查询(结果集一般为多行多列)

 

3.子查询的特点

1、子查询放在小括号内
2、子查询一般放在条件的右侧
3、标量子查询,一般搭配着单行操作符(>  <  >=  <=   <> )使用
4、列子查询,一般搭配着多行操作符(in、any/some、all)使用
5、子查询的执行优先于主查询执行, 主查询的条件用到了子查询的结果 

 

九、分页查询(limit)


1.应用场景

当要显示的数据,一页显示不全,需要分页提交sql请求。

2.语法

语法
    Select 查询列表
        From 表
      【join type join 表2
        On 连接条件
        Where 筛选条件
        Group by 分组字段
        Having 分组后的筛选
        Order by 排序后的字段】
        Limit 【offset,】size;
                Offset要显示条目的起始索引(起始索引从0开始)
                Size要显示的条目个数


    案例
        查询前五条员工信息
        方法1:select * from employees limit 0,5;
        方法2:select 8 from employees limit 5;

3.分页查询的特点 

特点
    ①limit语句放在查询语句的最后


    ②公式
        要显示的页数 page,每页的条目数size(如下:)

        Select 查询列表
        From 表
        Limit (page-1)*size,size;

 

十、联合查询(union)


union  联合  合并(概念):
    将多条查询语句的结果合并成一个结果。


语法:
               查询语句1                                                                                

                union                                                                                          

               查询语句2                                                                                  

                union                                                                                          

                ............


应用场景:
    要查询的结果来自多个表,且多个表没有直接的连接关系,但查询的信息一致时。


特点:
    1、要求多条查询语句的查询列数是一致的!
    2、要求多条查询语句的查询的每一列的类型和顺序最好一致
    3、union关键字默认去重,如果使用union all可以包含重复项

 

十一:推书


《中国哲学简史》

《蛤蟆先生》

《我想要两颗西柚》

《断舍离》

《解忧杂货店》

《人性的弱点》

......

如果你学不进编程的知识,去看看冯友兰先生的《中国哲学简史》升华自己吧。

如果你觉得生活如一滩死水,失了意义,去看看《蛤蟆先生》的心理历程吧。

如果你对于爱情失了信心,不愿意走出自己的世界,去看看《我想要两颗西柚》的爱情观吧。

如果你总是觉得整个世界都在羁绊着你,让你叫苦不堪,去看看《断舍离》的利落吧。

如果你被忧愁打击,忘了快乐的味道,别怕,去看看东野圭吾《解忧杂货店》的那处港湾吧。 

如果你想更了解自己,也让自己能有能力去了解别人,去看看卡耐基先生的《人性的弱点》吧。

“如果你想看小说,诶!我写了本!要不要看看?点链接直通哦!

昆仑山上人(老爱喝酒的鬼)最新章节免费在线阅读_昆仑山上人小说全文在线阅读-起点中文网

喂喂喂!!

别走啊,点个赞啊...投个推荐票也行啊??

呜呜呜~~

举步维艰啊,生活不易啊,我想恰饭啊,好饿啊!!!”

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

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:技术黑板 设计师:CSDN官方博客 返回首页
评论 50

打赏作者

D大调奏鸣曲_第七序章_

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值