前言
        初步学习了数据库与MySQL,接下来就一起了解SQL语言中的DQL语言的相关知识,数据查询语言(DQL)全称是Data Query 
Language,主要分为八个大类,是用来进行数据库中数据的查询的,即最常用的select语句。
一、基础查询
注意事项!
1.建议在最开始先启用库 use 库名
2.着重号 (``):避免字段名与关键字冲突而使用的标识符
3.执行,格式化
            - - - 前提 选中的命令行时合法的
            - - - 执行     - - - F9
            - - - 格式化 - - - F12
特点 :
1.查询列表可以是表中的字段、常量值、表达式、函数
2.查询结果是一个虚拟的表格
语法:
select 查询列表 from 表名 ;
分类
1.查询单个字段
     select 字段名(列名)from 表名 ;
 2.查询多个字段
     select 字段名1,字段名2... from 表名 ;
 3.查询所有字段
     1)select 双击选中要查询的字段,选完即可 from 表名 ;
         双击选中字段,会自动使用着重符``修饰,``是为了避免字段名于关键字冲突
     2)select * from 表名 ;
         规定了顺序,与表一致
 4.查询常量值
     格式:
         selcet 常量值 ;
     常量值
         100、'john'
 5.查询表达式
     select 100*98 ;
 6.查询函数
     select 函数名() ;
补充 :
1.起别名
     注意:
         别名与关键字冲突时 使用 ""or'' 修饰,推荐使用 ""
         表也可以起别名,但之后查询不能使用原来的表名
     好处:
         1.便于理解,增强可读性
         2.如果查询的字段遇到重名的情况,使用别名可以区分开来
     方法:
         1. 使用 as 关键字
             select 100%98 as 别名 ;
             select 字段名 as 别名 from 表名 ;
         2.直接用空格分隔,紧跟字段名
             select 字段名1 别名1,字段名2 别名2 from 表名 ;
2.去重
     案例:
         查询员工表涉及的部门编号(即有重复值的应用场景)
     select distinct 字段名 from 表名 ;
3.+号作用
补充:
          concat() 函数 
          - - - 功能:拼接
           - - - 使用:select concat(字段名1,字段名2.....) as 别名 from 表名 ;
Java 中的 + 号:
        1.运算符:两个被操作数据都是数值型
         2.连接符:只要有一个被操作数据为字符串
mysql 中的 + 号:
         仅仅只有一个功能:运算符
         不同场景
             1.select 100+90 ; 
                 两个被操作数都是数值型,则做加法运算
             2.select '123'+90 ;
                 其中一个为字符型,尝试将其转换为数值型
                 成功,继续做加法运算
                 失败,则字符型数值转为0
             3.selcet null+90 ;
                 只要其中一方为null,则结果肯定为null
二、条件查询
含义:
使用 WHERE 子句来指定查询条件,从 FROM 子句的中间结果中选取适当的数据行,达到数据过滤的效果。
语法:
     select 查询列表 from 表名 where 筛选条件 ;
     筛选条件 - - - 类似于java 中的if判断语句
分类:
1.按条件表达式筛选(>,<,>=,<=,=,!=/<>)
2.按逻辑表达式筛选(&& || !)--- (and or not)
3.模糊查询
      like                        判断是否相似
      between and        判断是否在给定区间
      in                          判断在集合中
      is null                   判断是否为空
三、排序查询
含义:
        将查询的结果集按照指定的字段升序或降序显示。
语法:
         select 查询列表 from 表 【where 筛选条件】 order by  排序列表 【asc(升) (可省略) | 
desc(降)】 
特点:
1.asc 代表升序,desc 代表降序,如果( order by  排序列表 )之后不写,默认升序
2.order by 子句中可以支持单个字段,多个字段,表达式,函数,别名
3.order by 子句 一般是放再查询语句的最后面,limit子句除外
四、分组查询
含义:
        将查询结果按照1个或多个字段进行分组,字段值相同的为一组其实就是按照某一列进行分类。
语法:
select
分组函数,列(要求出现在group by 后)
from 表
【where 筛选语句】
group by 分组的列表
【order by 子句】
特点:
1.分组查询种少选条件【两类】
           分组前: 
                  数据源 —— 原始表
                  位置 —— group by 前
                  关键字 —— where
           分组后:
                  数据源 —— 分组后的结果集
                  位置 —— group by 后
                  关键字 —— having
           补充:1)分组函数做条件,放在having子句中
                      2)能用分组前筛选的,优先考虑分组前筛选【考虑性能】
2.group by 子句 ,支持 单个/多个 字段分组 ( ','分隔 ,顺序没有要求),支持表达式或函数(使用较少)
3.可排序(order by 添加到 句末)
五、连接查询
含义:
连接查询是关系数据库中最主要的查询,主要包括 内连接 、 外连接 和交叉连接等。 通过
接 运算符 可以实现多个表查询。 连接是 关系数据库模型 的主要特点,也是它区别于其它
型 数据库管理系统 的一个标志。
补充:
笛卡尔乘积现象
表现:表1 有 m行 ;表2 有n行 , 结果 = m*n 行
如何避免: 添加有效连接条件
分类:
1.按版本(年份)
   sql192标准:在 mysql中 仅支持 内连接,和一部分外连接
   sql199标准:支持内连接+外连接(左外+右外)+交叉连接
   比较:sql199标准 功能更多/可读性较高
2.按功能
内连接:等值连接/非等值连接/自连接
外连接:左外连接/右外连接/全外连接
交叉连接:连接结果是笛卡尔乘积形式   
六、子查询
含义:
子查询(Sub Query)或者说内查询(Inner Query),也可以称作嵌套查询(Nested
Query),是一种嵌套在其他 SQL 查询的 WHERE 子句中的查询。特点:
分类:
    按子查询出现的位置:
     select后面
         支持标量子查询
     from后面
         表子查询
     where或haveing后面
         标量子查询/列子查询/行子查询(较少)
     exists后面(相关子查询)
         表子查询
         判断是否有结果 --- 返回 1/0
         案例:
             查看所有员工的部门名
             判断结果为true,就执行
             :
                 select department _name
                 from department d
                 where exists(
                                 select * 
                                 from employees e
                                 where d.did = e.did ) ;
    按结果集的行列数不同:
     标量子查询(结果只有一行一列)
         又称单行子查询
     列子查询(结果只有一列多行)
         又称多行子查询
     行子查询(有一行多列)(有结果为多行多列的情况)
     表子查询(结果一般多行多列)
七、分页查询
应用场景:
当需要展示数据量过大,不适合直接展示,需要分页提交sql请求
语法:
select 查询列表
from 表
【jointype join 表
on
where
group by
having
order by 】
limit offset,size;
size --- 要显示的条目个数
特点:
1.放在查询语句最后 --- (语句位置,和执行顺序都是)
2.offset 索引 是从 0 开始的
3.公式
要显示页数 page
每页的条目数 size
limit (page -1 )* size,size
八、union联合查询
含义:
将多条查询语句的结果合并成一个结果
应用场景:
要查询的结果来自多个表,且多个表没有直接的连接关系,但查询的信息类型一致
特点:
1.要求多条查询语句的查询列数是一致的
2.要求多条查询语句的查询的每一列的类型和顺序最好一致
3.union 关键字默认去重,如果使用 union all 可包含重复项
语法:
select ******
union
select ******* ;