学习MySQL与数据库(二)——DQL的学习

基础查询

语法

select 查询列表
from 表名;

特点

  • 查询列表可以是一个虚拟表
  • 查询列表可以是单个字段,多个字段,常量,表达式,函数,可以是以上的组合

别名

select 字段名 as 别名 from 表名;
select 字段名 “别名” from 表名;

+的作用

  • 如果两个操作数都是数值型,则直接做加法运算
  • 如果其中一个为非数值型,则强制转换成数值型,如果转换失败,则当做0
  • 如果其中一个为null,则结果直接为null

去重

select distinct 字段名 from 表名;

补充函数

select verslon();
select database();
select user();
select ifnull(字段名,表达式);
select concat(字符1,字符2,字符3);
select length(字符/字段); 获取字节长度

条件查询

语法

select 查询列表
from 表名
where 筛选条件;

特点

筛选条件分类:

  • 按条件表达式筛选
    关系运算符:> ; >= ; < ; <= ; <> ; =

  • 按逻辑表达式筛选
    逻辑运算符:and ; or ; not

  • 模糊查询
    like:一般和通配符搭配使用
    _ 任意单个字符
    % 任意多个字符

    between and:一般用于判断某字段是否在指定的区间

    in:一般用于判断某字段是否在指定的列表

    is null:判断null值

排序查询

语法

select 查询列表
from 表名
where 筛选列表
order by 排序列表;

特点:

  • 排序列表可以是单个字段,多个字段,函数,表达式,别名,列的索引,以及以上的组合
  • 升序 asc 降序desc

常见函数

sql中的函数分为单行函数和分组函数
调用语法:select 函数名(实参列表);

  • 字符函数
    concat(str1,str2,……):拼接字符

    substr(str,pos):截取从pos开始的所有字符,起始索引从1开始

    substr(str,pos,len):截取len个从pos开始的字符,起始索引从1开始

    length(str):获取字节个数

    char_length(str):获取字符个数

    upper(str):变大写

    lower(str):变小写

    trim([substr from] str):去前后指定字符,默认是去空格

    left(str,len):从左边截取指定len个数的字符

    right(str,len):从右边截取指定len个数的字符

    lpad(str,substr,len):左填充

    rpad(str,substr,len):右填充

    strcmp(str1,str2):比较两个字符的大小

    instr(str,substr):获取substr在str中第一次出现的索引

  • 数学函数
    ceil(x):向上取整

    floor(x):向下取整

    round(x,d):四舍五入

    mod(x,y):取模/取余

    truncate(x,d):截断,保留小数点后d位

    abs(x):求绝对值

  • 日期函数
    now():获取当前日期——时间

    curtime():只有时间

    curdate():只有日期

    date_format(data,格式):格式日期为字符

    str_to_date(str,格式):将字符转换成日期

    datediff(date1,date2):获取两个日期之间的天数差

    year(date)

    month(date)
    ……

  • 流程控制函数
    ①if(条件,表达式1,表达式2):如果条件成立,返回表达式1,否则返回表达式2

    ②case表达式
    when 条件1 then 结果1
    when 条件2 then 结果2
    ……
    else 结果n
    end

分组函数

sum 求和
avg 平均
max 最大
min 最小
count 个数

特点

  • 实参的字段的类型,sum和avg只支持数值型,其他三个可以支持任意类型
  • 这五个函数都忽略bull值
  • count可以支持以下参数
    count(字段):查询该字段非空值的个数
    count(*):查询结果集的行数
    count(1):查询结果集的行数
  • 分组函数可以和distinct搭配使用,实现去重的统计
    select count(distinct 字段)from 表;

分组查询

语法

select 分组函数,分组的字段
from 表名
where 分组前的筛选条件
group by 分组列表
having 分组后的筛选条件
order by 排序顺序;

特点

  • 分组列表可以是单个字段,多个字段
  • 筛选条件分为两类

连接查询

当查询中涉及到了多个字段,则需要通过多表连接

笛卡尔乘积:
出现原因:没有有效的连接条件
解决办法:添加有效的连接条件

  • SQL92语法

    select 查询列表
    from 表1 别名,表2 别名 ……
    where 连接条件
    and 筛选条件
    group by 分组列表
    having 分组后筛选
    order by 排序列表;

  • SQL99语法

内连接

select 查询列表
from 表1 别名
[innner] join 表2 别名 on 连接条件
[innner] join 表3 别名 on 连接条件
where 筛选条件
group by 分组列表
having 分组后的筛选
order by 列表列表

外连接

select 查询列表
from 表1 别名
left/right/full [outer] join 表2 别名
on 连接条件
where 筛选条件
group by 分组
having 分组后筛选
order by 排序列表
limit 分页参数;

特点

①外连接的查询结果=内连接的查询结果+主表有但从表没有的记录

②区分主从表
left join 左边的是主表
right join 右边的是主表

③一般来讲,外连接往往用于查询主表有但从表没有的记录

子查询

说明:
在一个select语句中,有嵌套了另一个完整的select语句。
里面的select语句称为子查询或内查询,外面的select语句称为主查询或外查询

分类:

  • 放在select后面
  • 放在from后面
  • 放在where或having后面
  • 放在exists后面

特点:

  • 子查询最后用小括号括起来

  • 子查询一般放在条件的右侧

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

  • 放在where或having后面的子查询,一般分为两种

    单行子查询:结果集为单行单列,一般搭配关系运算符使用(> < >= <= = <>)

    多行子查询:结果集为多行多列,一般搭配多行操作符使用(any,some,all,in)

分页查询

语法

select 查询列表
from 表名
where 筛选条件
limit 起始索引,条目数

特点

  • 表中条目索引默认从0开始
  • 如果limit子句中,起始索引为0,则可以不写
    limit 5;等价于 limit 0,5;
  • 公式
    显示第page页,每页size条
    limit(page-1)*size,size;

union联合查询

语法

完整的select语句1 union
完整的select语句2 union
完整的select语句3 union
……
完整的select语句n

特点

  • union默认去重,可以使用union all 包含重复项
  • 多条待合并的查询语句的查询列数必须一致
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

FFFPAG

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

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

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

打赏作者

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

抵扣说明:

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

余额充值