MySQL之浅谈DQL(查询语句)

Posted Michelhjx

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL之浅谈DQL(查询语句)相关的知识,希望对你有一定的参考价值。

目录

前言

一、简单查询

1.1 查询表中所有数据

1.2 基础查询

1.2.1 多个字段查询

1.2.2 起别名 as

1.2.3 去重 distinct

1.2.4 concat() 字段拼接

1.2.5 计算列

二、条件查询

2.1 基本用法

2.2 运算符

2.3 模糊查询

三、排序查询

四、常用函数

4.1 字符函数

 4.2 数学函数

 4.3 日期函数

 4.4 流程控制函数

4.5 其他函数

五、分组查询

 六、连接查询

 七、子查询

八、分页查询

九、联合查询

总结

               


前言

 

        在上一篇文章MySQL简介_Michelhjx的博客-CSDN博客中,我们介绍了数据库以及mysql的概念,这篇文章我们就来介绍学习MySQL中的查询语句。同样,话不多说,走着!

一、简单查询

1.1 查询表中所有数据

        语法:        select * from 表名;

        在查询语句中,我们通常使用*来表示所有数据。

        案例: 查询员工表中的所有数据。

        

        查询结果:

           

         我们可以看到,通过查询员工表中有107条数据。

1.2 基础查询

1.2.1 多个字段查询

        语法:        select 字段1,字段2... from 表名;

1.2.2 起别名 as

        在查询字段时,如果有重复的字段,我们可以给字段其别名,这样就便于理解和区别。当然我们也可以用空格来代替as。

1.2.3 去重 distinct

        在查询数据的时候,有时候会出现重复数据,这时候我们在select后面使用distinct关键字进行书籍去重。

        案例: 查询部门编号,且不出现重复。

        

        查询结果:

          

1.2.4 concat() 字段拼接

        使用方式:        concat(str1,str2,..)

        案例:查询员工的姓名。

        

        查询结果:

         

        通过查询我们得到107行员工姓名,跟之前的查询所有员工信息的行数吻合。

1.2.5 计算列

        1.一般可以使用四则运算计算一些列的值。(一般只会进行数值型的计算)

                这里要着重说一下+这个运算符。

                        (1).当两个数值型相加时,直接作加运算。

                        (2).当一个为数值型,另一个为字符型的数值,则把字符型转换成数值型再进行加运算。 

                        (3).当某一个为字符,则加运算时值为0。

                        (4).当某个为null,则加运算后的值为null。
        2.ifnull(表达式1,表达式2):null参与的运算,计算结果都为null。

                表达式1:哪个字段需要判断是否为null。

                如果该字段为null后的替换值。

二、条件查询

2.1 基本用法

        语法:select 字段名 from 查询表名 where 筛选条件

        案例:查询员工编号为160的员工信息。

        

        查询结果:

        

2.2 运算符

        条件运算符:> 、< 、<= 、>= 、= 、<>

        逻辑运算符:and  或 &&、or  或 || 、not  或 !

        案例:选择在20或50号部门工作的员工姓名和部门号

        

        查询结果:

         

2.3 模糊查询

        BETWEEN...AND   

        IN( 集合) 

        LIKE:模糊查询

        这里强调一个点:

                占位符:

                        _:单个任意字符

                         %:多个任意字符

        案例:选择员工姓名的第三个字母是a的员工姓名。

        

        查询结果:

         

        IS NULL

        案例:选择公司中没有管理者的员工姓名及job_id

        

        查询结果:

         

三、排序查询

        语法: select 要查询的东西

                    from 表
                    where 条件
                    order by 排序的字段|表达式|函数|别名 【asc|desc】

        排序方式:       

                        ASC:升序(默认)

                        DESC:降序

        排序分类:

                        1. 按单个字段进行排序

                        2. 按多个字段进行排序

                        3. 按表达式进行排序

                        4. 按别名进行排序

                        5.按函数进行排序

        案例:查询员工的姓名和部门号和年薪,按年薪降序按姓名升序

               :年薪 = salary * 12 * (1+奖金率)

        这里我们通过前面的查询信息可知,奖金率有为空的数据,所以我们要使用IFNULL()

        

SELECT 
CONCAT(last_name,first_name)AS 姓名,department_id,salary*12*(1+IFNULL(commission_pct,0))AS 年薪
FROM employees ORDER BY 年薪 DESC,姓名;

        这里还要注意一点,按姓名升序的时候,因为SQL语句里默认数据是升序,所以ASC可以省略不写。

        查询结果:

         

四、常用函数

4.1 字符函数

concat()拼接
substr()截取子串
upper()转换成大写
lower()转换成小写
trim()去前后指定的空格和字符
ltrim()去左边空格
rtrim()去右边空格
replace()替换
lpad()左填充
rpad()右填充
instr()返回子串第一次出现的索引
length()获取字节个数

 4.2 数学函数

round()四舍五入
rand()随机数
floor()向下取整
ceil()向上取整
mod()取余
truncate()截断

 4.3 日期函数

now()当前系统日期+时间
curdate()当前系统日期
curtime()当前系统时间
str_to_date()将字符转换成日期
date_format()将日期转换成字符

 4.4 流程控制函数

          if 处理双分支

                case语句 处理多分支

                情况1:处理等值判断

                情况2:处理条件判断

4.5 其他函数

version()    版本
database()当前库
user()当前连接用户

五、分组查询

        语法:        select 查询的字段,分组函数

                           from 表

                           group by 分组的字段

        特点:

                1、可以按单个字段分组

                2、和分组函数一同查询的字段最好是分组后的字段

                3、可以按多个字段分组,字段之间用逗号隔开

                4、可以支持排序

                5、having后可以支持别名

        

        案例:选择具有各个job_id的员工人数

        

SELECT COUNT(*) 人数,job_id
FROM employees 
GROUP BY job_id;

        查询结果:

         

 六、连接查询

                语法:      select 字段列表 
                                from 表名1 
                                [连接类型] join 表名2 on 条件
                                where 筛选条件
                                group by 分组条件
                                having 分组后的筛选条件
                                order by 排序字段

        

        连接类型:内连接        【inner】

                          外连接:

                                        左外连接:left[outer]   左边的为主表

                                        右外连接:right[outer]   右边的为主表

                                        全外连接:full[outer]

                                        交叉连接:cross        笛卡尔积

        案例:查询哪个部门没有员工
        

SELECT d.*,e.employee_id
FROM departments d 
LEFT OUTER JOIN employees e 
ON d.`department_id` = e.`department_id`
WHERE e.`employee_id` IS NULL;

        查询结果:

         

 七、子查询

        概念:查询中嵌套查询,称嵌套查询为子查询
               特点:

                1、子查询都放在小括号内

                2、子查询可以放在from后面、select后面、where后面、having后面,但一般放在条件的右侧

                3、子查询优先于主查询执行,主查询使用了子查询的执行结果

                4、子查询根据查询结果的行数不同分为以下两类:

                        ① 单行子查询

                                结果集只有一行

                                一般搭配单行操作符使用:> < = <> >= <= 

                                非法使用子查询的情况:

                                        a、子查询的结果为一组值

                                        b、子查询的结果为空

                        ② 多行子查询

                                结果集有多行

                                一般搭配多行操作符使用:any、all、in、not in

                                in: 属于子查询结果中的任意一个就行

                                any和all往往可以用其他查询代替

八、分页查询

        语法:

                select 字段|表达式,...

                from 表

                where 条件

                group by 分组字段

                having 条件

                order by 排序的字段

                limit 起始的条目索引,条目数;

        特点:     

                1.起始条目索引从0开始

                2.limit子句放在查询语句的最后

                3.公式:select * from  表 limit (page-1)*sizePerPage,sizePerPage
                    假如:
                                每页显示条目数sizePerPage
                                要显示的页数 page
            

        案例:查询前五条员工信息。

SELECT * FROM employees LIMIT 0,5;

        查询结果:

         

九、联合查询

        语法

                select 字段|常量|表达式|函数 from 表 where 条件 union 【all】

                select 字段|常量|表达式|函数 from 表 where 条件 union 【all】

                select 字段|常量|表达式|函数 from 表 where 条件 union 【all】

                 .....

                select 字段|常量|表达式|函数 from 表 where 条件


        特点

                1、多条查询语句的查询的列数必须是一致的

                2、多条查询语句的查询的列的类型几乎相同

                3、union代表去重,union all代表不去重 

总结

        以上就是查询语句的全部介绍了,虽然看着很多,但是只要多去思考、实践,就会发现好像也不是挺多。动手才是关键! 

   

               

        

        

以上是关于MySQL之浅谈DQL(查询语句)的主要内容,如果未能解决你的问题,请参考以下文章

MySQL数据库之DQL查询语句详解操作

MySQL数据库之DQL查询语句详解操作

MySQL数据库之DQL查询语句详解操作

暴风雨的礼物·MySQL04:使用DQL查询数据

06-mysql基础-mysql中的DQL-子查询

08-mysql基础-mysql中的DQL-联合查询