• SQL基础 -DQL 数据查询语言(上)


    一、基础查询

    1.语法

    1.1查询列表可以是:表中的字段、常量值、表达式、函数
    1.2查询的结果是一个虚拟的表格

    2.查询表中的单个字段

    select 查询字段 from 表名;
    

    3.查询表中的多个字段

    select 查询字段,字段名,字段名... from 表名;
    select *from 表名;
    

    4.查询常量值

    select 常量;
    select 字符串;
    

    5.查询表达式

    select 表达式; --如100*98
    

    6.查询函数

    select version();
    

    7.起别名

    1.1 AS 或 省略
    1.2 如果起的别名有关键字,则用双引号区分

    8.去重

    select distinct 字段名 form 表名;
    

    9.连接字段

    select concat(字段,字段) as 别名;
    

    10判断空值

    ifnull(字段,0) --对列中有空值的使用
    

    二、条件查询

    1.1语法:select 查询列表 from 表名 where 筛选条件;
    1.2分类:条件表达式筛选 、逻辑表达式筛选、模糊查询(like, between and, in, is null)

    例如:

    like:select 字段 from 表名 where 字段 like '%a%'; 查询字段中包含a的信息。
    like:select 字段 from 表名 where 字段 like '__a_b%'; 查询字段中第三个字母为 a 第五个字母为b的信息。
    between and : 包含临界值,条件不可调换位置。
    in: 判断某字段的值是否属于in列表中的某一项。类型必须一致或兼容。
    is null 或 is not null :判断是否为空值。

    三、排序查询

    select 查询列表
    form 表名
    【where 筛选条件】
    order by 排序列表 asc|desc; --升序(默认)与降序
    

    可以使用表达式、别名、函数排序

    多个字段排序:select 字段 from 表名 order by 字段 asc,字段 desc;
    一般放在查询语句最后面,limit语句除外。

    四.常见函数

    类似于java中的方法。
    单行函数:

    1.1字符函数:

    1.length() 获取字符长度,utf-8 汉字是占3个,jdk占两个。
    2.concat() 拼接字符串
    3.upper()、lower() 改变字符大小写
    4.substr()或substring() 字符截取
    5.instr() 返回子串第一次出现的索引,如果找不到返回0
    6.trim() 删掉字符集两端的字符
    7.lpad() 用指定的字符实现左填充指定长度
    8.rpad() 用指定的字符实现右填充指定长度
    9.replace() 替换

    1.2数学函数

    1.round() 四舍五入
    2.ceil() 向上取整
    3.floor() 向下取整
    4.truncate() 截断
    5.mod() 取余 返回值的正负参照被除数。a-a/b*b

    1.3日期函数

    1.now() 返回当前系统日期+时间
    2.curdate() 返回当前系统日期不包含时间
    3.curtime() 返回当前系统时间不包含日期
    4.select() YEAR(字段) 年 from 表名; 返回指定的部分,年。
    5.str_to_data() 将字符通过指定的格式转换成日期
    6.date_format() 将日期转换为字符
    7.datediff() 统计两日期之差

    1.4流程控制函数

    1.if() if else 效果
    2.case() switch case 效果。两种方法:

    方法一:

    case 要判断的字段或表达式
    when 常量1 then 要显示的值1或语句1;
    when 常量2 then 要显示的值2或语句2;
    ...
    else 要显示的值n或语句n;
    end
    

    方法二:

    case 
    when 条件1 then 要显示的值1或语句1;
    when 条件2 then 要显示的值2或语句2;
    ...
    else 要显示的值n或语句n;
    end
    

    五、分组函数

    1.功能:用作统计使用,又称为聚合函数或统计函数或组函数
    2.分类:sum 求和、avg 平均值、max最大值、min最小、count个数。
    3.特点:sum、avg一般用于处理数值型。max、min、count可以处理任何类型。都忽略null值。
    4.可以和distinct搭配实现去重运算。
    5.统计行数:select count(*) from 表名;
    6.和分组函数一同查询的字段要求是group by后的字段。

    六、分组查询

    1.添加分组前的筛选

    数据源是原始表,关键字where
    select 分组函数,列(要求出现在group by的后面)
    form 表名
    【where 筛选条件】
    group by 分组的列表
    【order by 语句】;
    

    2.添加分组后的筛选

    数据源是分组后的结果集,关键字having,分组函数做条件优先放在having语句中。
    select 分组函数,列(要求出现在group by的后面)
    form 表名
    【where 筛选条件】
    group by 分组的列表
    【order by 语句】
    having 筛选条件;
    

    3.按多个字段分组

    select 分组函数,列,列
    form 表名
    【where 筛选条件】
    group by 分组的列表,列表
    【order by 语句】;
    

    注意:查询列表必须特殊,要求是分组函数和group by后出现的字段。

    七、连接查询(多表查询)sq199版

    select 查询列表
    from 表1 别名 【连接类型】
    join 表2 别名
    on 连接条件 
    【where 筛选条件(主键列)】
    【group by 分组】
    【having 筛选条件】
    【order by 排序列表 desc】;
    

    分类:

    内链接:inner
    外连接:

    左外:left 【outer】
    右外:right 【outer】
    全外:full 【outer】

    交叉连接:cross

    内连接

    1.等值连接

    select 字段1 字段2
    from 表1
    inner join 表2
    on 表1.查询字段 = 表2.查询字段
    

    2.非等值连接

    select 字段1 字段2
    from 表1
    inner join 表2
    on 表1.查询字段 between 表2.查询字段1 and 表2.查询字段2
    

    3.自连接

    select 字段1 字段2
    from 表 别名1
    inner join 表 别名2
    on 别名1.查询字段1 = 别名2.查询字段2
    

    外连接

    应用场景:用于查询一个表中由,另一个表没有的记录
    特点:外连接的查询结果为主表中的所有记录,如果从表中有则和它匹配,没有则显示null
    左外连接:left join 左边的是主表
    右外连接:right join 右边是主表
    全外连接 = 内连接的结果 + 表1中有但表2中没有的 + 表2中有但表1中没有的

    1.左外连接

    select 字段1,字段2 from 表1
    left outer join 表2
    on 表1.字段1 = 表2.字段2
    【where 表2.key is null】;
    

    2.右外连接

    select 字段1, 字段2
    from 表1
    right outer join 表2
    on 表1.字段1 = 表2.字段2
    【where 表1.key is null】;
    

    3.全外连接 --MySQL不支持

    select 字段1, 字段2
    from 表1
    full outer join outer join 表2
    on 表1.字段1 = 表2.字段2;
    

    4.交叉连接 -- 结果为笛卡尔乘积

    select 字段1, 字段2
    from 表1
    cross join 表2
    on 表1.key = 表2.key
    【where 表1.key is null or 表2.key is null】;
  • 相关阅读:
    win10 彻底删除mysql步骤
    IDEA中添加类的创建者信息
    针对标签中设置 disabled="true",$("#id").serialize()获取不到value的解决方法
    使用Vue-cli创建project遇到的坑
    Jmeter压测总结
    Java通过ssh远程连接服务器
    Django 学习笔记(一)
    Python 测试框架基础
    Python 基础&Excel操作
    Appium环境搭建及计算器小实验
  • 原文地址:https://www.cnblogs.com/nnadd/p/12547463.html
Copyright © 2020-2023  润新知