MySQL学习笔记5||数据查询select

本文详细讲解了MySQL的基础查询、条件查询、排序与分组、连接查询、子查询、分页、联合查询等技巧,包括去重、运算符、逻辑表达式、模糊查询、连接类型及条件筛选等,并介绍了如何使用limit进行分页和union进行数据整合。

备注:该博客内容根据技术教学视频整理与总结而成,原视频来自于尚硅谷MySQL教程。

一、基础查询 select from

语法:        SELECT 要查询的东西【FROM 表名】;
特点:       ①通过select查询完的结果 ,是一个虚拟的表格,不是真实存在
                  ② 要查询的东西 可以是常量值、可以是表达式、可以是字段、可以是函数

要点:

  1. 去重        select distinct 字段名 from 表名;
  2. 运算符”+“做加法运算
    select 数值+数值:直接运算
    select 字符+数值:先试图将字符转换成数值,如果转换成功,则继续运算;否则转换成0,再做运算
    select null+值:结果都为null    (★)

二、条件查询 where

语法:               select  要查询的字段|表达式|常量值|函数  from  表 where  条件 ; 
条件分类:        条件表达式、逻辑表达式、模糊查询

  1. 条件表达式:示例:salary>10000
    条件运算符:> < >= <= = !=(不等于) <>(不等于)
  2. 逻辑表达式:示例:salary>10000 && salary<20000
    逻辑运算符:and(&&):两个条件如果同时成立,结果为true,否则为false
                         or(||):两个条件只要有一个成立,结果为true,否则为false
                         not(!):如果条件成立,则not后为false,否则为true
  3. 模糊查询:like  特点:一般和通配符搭配使用  
                      between and 特点: a.使用between and 可以提高语句的简洁度
                                                        b.包含临界值
                                                        c.两个临界值不要调换顺序
                      in  含义:判断某字段的值是否属于in列表中的某一项
                           特点:a.使用in提高语句简洁度
                                      b.in列表的值类型必须一致或兼容
                                      c.不支持通配符的使用
                      is null|is not null  注意:=或<>不能用于判断null值
                                                               is null或is not null可以判断null值
    通配符:% 任意多个字符,包含0个字符
                   _ 任意单个字符

三、排序查询 order by

语法:        select 查询列表 fromwhere 筛选条件 order by 排序列表 【asc|desc
特点:        1、asc :升序,如果不写默认升序     desc:降序
                   2、排序列表 支持 单个字段、多个字段、函数、表达式、别名
                   3、order by的位置一般放在查询语句的最后(除limit语句之外)


四、分组查询 group by、having

语法:        select 查询的字段,分组函数 fromgroup by 分组的字段
特点:        1、可以按单个字段分组;可以按多个字段分组,字段之间用逗号隔开;
                   2、可以支持排序;having后可以支持别名
                   3、和分组函数一同查询的字段最好是分组后的字段
                   4、分组筛选

针对的表位置 关键字
分组前筛选:原始表group by的前面where
分组后筛选:分组后的结果集group by的后面have

五、连接查询 join

        笛卡尔乘积:如果连接条件省略或无效则会出现,即表1 有m行,表2 有n行,结果=m*n行
        解决办法:添加上连接条件

  1. SQL92语法:
    分类:内连接(等值连接、非等值连接、自连接),也支持一部分外连接(用于Oracle、SQL server,但MySQL不支持
    语法:select 查询列表
               from 表 别名1,表 别名2
               where 等值的连接条件
             【and 筛选条件】
             【group by 分组字段】
             【having 分组后的筛选】
             【order by 排序字段】
    特点:① 等值连接的结果 = 多个表的交集
               ② n表连接,至少需要n-1个连接条件
               ③ 多个表不分主次,没有顺序要求
               ④一般为表起别名,提高阅读性和性能
  2. SQL99语法:通过join关键字实现连接
    分类:内连接(等值连接、非等值连接、自连接)、外连接(左外、右外)、交叉连接
    语法:select 字段,...
               from 表1
             【inner|left outer|right outer|crossjoin 表2 on  连接条件
             【inner|left outer|right outer|crossjoin 表3 on  连接条件
             【where 筛选条件】
             【group by 分组字段】
             【having 分组后的筛选条件】
             【order by 排序的字段或表达式】
    特点:①表的顺序可以调换
               ②n表连接至少需要n-1个连接条件内连接的结果=多表的交集
               ③内连接的结果=多表的交集
               ④外连接查询的结果=主表中所有的行,如果从表和它匹配的将显示匹配行,如果从表没有匹配的则显示null
               ⑤left join 左边的就是主表,right join 右边的就是主表,full join 两边都是主表
               ⑥外连接一般用于查询除了交集部分的剩余的不匹配的行
               ⑦交叉连接类似于笛卡尔乘积
  3. 自连接典型案例:查询员工名和直接上级的名称
    SQL99写法:SELECT e.last_name,m.last_name
                          FROM employees e
                         JOIN employees m ON e.`manager_id`=m.`employee_id`;
    SQL92写法: SELECT e.last_name,m.last_name
                           FROM employees e,employees m 
                           WHERE e.`manager_id`=m.`employee_id`;
  4. 以下图示来自于尚硅谷MySQL教程课件,红色部分为连接查询后的结果:

 六、子查询

 含义: 一条查询语句中又嵌套了另一条完整的select语句,其中被嵌套的select语句,称为子查询或内查询。在外面的查询语句,称为主查询或外查询

特点:1、子查询都放在小括号内
           2、子查询可以放在from、select、where、having、exists后面,但一般放在条件的右侧
           3、子查询优先于主查询执行,主查询使用了子查询的执行结果
           4、子查询根据查询结果的行数不同分为以下两类:
            ① 单行子查询:结果集只有一行,一般搭配单行操作符使用:> < = <> >= <= 
                 非法使用子查询的情况:a、子查询的结果为一组值b、子查询的结果为空
            ② 多行子查询:结果集有多行,一般搭配多行操作符使用:any、all、in、not in
                                      IN 可用 =ANY替代; NOT IN 可用<>ALL替代

操作符含义
IN/NOT IN等于/不等于列表中的任意一个
ANY|SOME和子查询返回的某一个值比较,大于最小值,小于最大值即可
ALL和子查询返回的所有值比较,大于最大值,小于最小值即可

七、分页查询 limit
语法:   select 字段|表达式,...
              from
            【where 条件】
            【group by 分组字段】
            【having 条件】
            【order by 排序的字段】
              limitoffset 起始的条目索引,】size 条目数;

特点:1.起始条目索引从0开始
           2.limit子句放在查询语句的最后
           3.公式:select * from  表 limit (page-1)*sizePerPage,sizePerPage,其中:每页显示条目数sizePerPage,要显示的页数 page
           公式来源:首先假设条件为每页显示10条数据,那么可得下表规律:

页数起始条目索引
10
210
320

             总结规律可得:10 = ( 2 - 1 ) × 10
                                       20 = ( 3 - 1 ) × 10
                                      offset =(page-1)*sizePerPage


八、联合查询 union

语法:select 字段|常量|表达式|函数 【from 表】 【where 条件】 unionall
           select 字段|常量|表达式|函数 【from 表】 【where 条件】 unionall
           select 字段|常量|表达式|函数 【from 表】 【where 条件】 unionall
           .....
           select 字段|常量|表达式|函数 【from 表】 【where 条件】;

特点:1、多条查询语句的查询的列数必须是一致的
           2、多条查询语句的查询的列的类型几乎相同
           3、union代表去重,union all代表不去重


  九、查询总结

查询优先级
select 查询列表 ⑦
from 表1 别名
连接类型 join 表2
on 连接条件
where 筛选  
group by 分组列表
having 筛选
order by排序列表
limit 起始条目索引,条目数;

   

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值