MySQL基础内容(三、DQL语言的学习)

本文详细介绍了DQL语言的基础知识,包括SELECT查询的使用,如字段选择、去重、别名设定和条件筛选。重点讲解了SELECT常用的函数,如字符函数、数学函数和日期函数,并给出了各种函数的实例。此外,还涵盖了排序查询、分组查询、连接查询、子查询和分页查询的用法,以及SQL的不同版本语法。内容深入浅出,适合数据库初学者和开发者参考。
摘要由CSDN通过智能技术生成

三、DQL语言的学习

SELECT基础知识点

  1. SELECT 查询列表 FROM 表名

    1)查询列表:表中字段、常量值(‘ ’)、表达式(100%98)、函数(version())

    2)查询结果:虚拟表格

    3)起别名

    SELECT 原名 as 别名;
    SELECT 原名 空格 别名;
    (别名:建议加上双引号)

    4)去重:SELECT DISTINCT 查询列表 FROM 表名;

    5)+号的作用:

    运算符(操作数为数值型);
    如果其中一方为字符型,则字符试图转换为数值型,成功则继续加法运算,否则字符型转换为0;
    只要加数一方为NULL,这结果肯定为NULL

  2. SELECT 查询列表 FROM 表名 WHERE 筛选条件

    1)条件运算符:> < = !=(<>) >= <=

    2)按逻辑表达式筛选:and or not

    3)模糊查询:

  • LIKE

    • 一般与通配符 “ % ” ,“ _ ” 搭配,可以判断字符或数值型数值;

      • “ % ”:任意多个字符,“ _ ”:任意单个字符,“ \ ”:转义字符
      • 规定转义字符:ESCAPE ‘ 自定义符号 ’
  • BETWEEN AND:

    • 字段 BETWEEN X1 AND X2 ;

    • 注意事项:包含临界值,X1与X2的数值大小不可以颠倒

  • IN:

    • 可以将要寻找的字段的值放入()中,用IN进行判断寻找 ;
    • IN列表的数值必须 同一类型
    • 不能对带有“%”、“_”的数值进行判断
  • IS NULL:

    • “ = ”不能判断NULL,只能使用IS NULL(同理IS NOT NULL);

    • IS 不等于 “=”

  • <=>: 意思为(判断)等于 ; 可以等于NULL和普通的数值

  • WHERE:不支持列别名

SELEC常用函数
  • CONCAT(A,B);

    拼接字符;其中用逗号隔开(A、B自动转为字符型)

  • IFNULL (被判断的值,指定输出的值);

    判断是否为NULL,如果为NULL则输出指定输出的值,否则输出被判断的值

  • ISNULL();

    是则返回1,否则返回0

  • LENGTH();
    返回字段字节长度

常见函数

方法:SELECT 函数名(实参列表)【from 表】;

单行函数

字符函数
  • LENGTH();
    获取参数值的字节个数(gbk汉字两字节,utf-8三字节)

  • CONCAT(,);
    拼接字符串

  • GROUP_CONCAT( 【DISTINCT】字段 【ORDER BY 字段 】【SEPARATOR ’ 分隔符 '】) ;
    将group by产生的同一个分组中的值连接起来,返回一个字符串结果

  • UPPER();
    变大写

  • LOWER();
    变小写

  • SUBSTR(字段(字符串),起始索引,【截取长度】);
    截取字符,索引从1开始;截取长度默认为从起始索引开始的整个字段

  • INSTR(x字段(字符串),y字段(字符串));
    返会y在x中的起始索引(第一次出现),如果找不到返回0

  • TRIM(【A FROM 字段(字符串)】);
    无参数清除字段(字符串)的首尾空格符;添加【】内容后,清除字段中的A内容

  • LPAD(字段(字符串),指定长度,填充符号); RPAD();
    用指定的字符实现左(右)填充指定长度

  • REPLACE(A,B);
    A被B替换


数学函数
  • ROUND(【A,B】)
    无参四舍五入(不管正负);【A,B】B为A要保留的小数点位数
  • CEIL();
    向上取整,返回大于等于该参数的最小整数
  • FLOOR();
    向下取整,返回小于等于该参数的最大整数
  • TRUNCATE(A,B);
    截断;使A保留小数点后B位
  • MOD();
    取余;余数正负与被除数相同
  • RAND()
    返回0-1之间的小数

日期函数
  • NOW();
    返回当前系统日期+时间

  • CURDATE();
    只返回当前系统日期

  • CURTIME();
    只返回当前系统时间

  • YEAR();MONTH();DATY();
    HOUR();MINUTE();SECOND();

    年月日分秒;
    MONTHNAME()为月英文

  • DATEDIFF(日期类型A,日期类型B);
    返回A和B的日期差值

  • STR_TO_DATE(,);
    将日期格式的字符转换成指定格式的日期;
    SA:STR_TO_DATE(‘4-6-2022’,‘%m-%d-%Y’)->输出2022-04-06

  • DATE_FORMAT(,)
    将日期转换成字符(与STR_TO_ADTE作用相反)

序号格式符功能
1%Y四位的年份
2%y两位的年份
3%m月份(01,02,…11,12)
4%c月份(1,2,…11,12)
5%d日(01,02,…)
6%H小时(24小时制)
7%h小时(12小时制)
8%i分钟(00,01,…59)
9%s秒(00,01,…59)

其他函数
  • VERSION(); 查看版本号

  • DATABASE();查看当前数据库名称

  • USER(); 查看当前用户

  • PASSWORD(‘字符’)MD5(‘字符’);返回该字符的加密型式


流程控制函数
  • IF(表达式1,表达式2,表达式3);

    如果表达式1成立, 则IF函数返回表达式2的值, 否则返回表达式3的值

  • CASE

    • CASE 变量、字段或者表达式

      WHEN 常量1 THEN 要显示的值1或(语句1;)

      WHEN 常量2 THEN 要显示的值2或(语句2;)

      ELSE 要显示的值n或(语句n;)(可省略)

      END(语句时使用END CASE);

      (等值判断)

    • CASE

      WHEN 条件1 THEN 要显示的值1或(语句1;)

      WHEN 条件2 THEN 要显示的值2或(语句2;)

      ELSE 要显示的值n或(语句n;)(可省略)

      END(语句时使用END CASE);

      (条件判断)


分组函数
  • SUM();求和;只能对数值型作用

  • AVG();求平均值;只能对数值型作用

  • MIN();求最小值;对可以排序(比较)的字段(字符串)进行作用

  • MAX();求最大值;同MIN

  • COUNT()
    统计个数;支持任何类型;
    COUNT(*)统计元组个数;
    COUNT(1)赋予一列1统计元组个数;

    以上所有分组函数都支持DISTINCT且忽略NULL要求与GROUP BY配合

常用查询


排序查询
  • ORDER BY()F;

    F = DESC 降序,F = ASC 升序(默认升序);

    可以根据单、多字段,表达式、函数、别名进行排序


分组查询
  • GROUP BY 字段(函数、表达式);

    按字段(函数、表达式)分组;

    在分组前进行筛选,搭配WHERE(不可使用分组函数);

    在分组后进行筛选,搭配HAVING(可使用分组函数);


连接查询

为表起别名,可搭配分组、筛选、排序)

SQL92语法
  • 等值连接(交集)

    连接条件:表1.id = 表2.id;

  • 非等值连接

    连接条件:表1.id # 表2.id;
    ‘ # ’部分可替换为:> < = >= <= BETWEEN AND

  • 自连接

    一表作两表用(起别名区分),找到对应关系连接

SQL99语法

FROM 表1【别名】连接类型 JOIN 表2【别名】
ON 连接条件(WHERE\GROUP BY\HAVING\ORDER BY)

  • 内连接:【INNER】

  • 外连接:
    内连接结果+主表中有而从表中没有的记录;
    无记录则返回NULL

  • 左外连接:LEFT 【OUTER】;左主表

  • 右外连接:RIGHT 【OUTER】;右主表

  • 全外连接:FULL 【OUTER】;表1有表2无+表2有表1无

  • 交叉连接:两表的笛卡尔积


子查询

(出现在其他语句中的SELECT语句,称为子查询或内查询)

  • 标量子查询(一行一列)

  • 列子查询L(一列多行)

    操作符含义
    IN / NOT IN等于列表中的任意一个
    ANY / SOME和子查询返回的某一个值比较
    ALL和子查询返回的所有值比较
  • 行子查询(一行多列)

  • 表子查询(一般为多行多列)

子查询放在小括号内;子查询一般放在条件的右侧

注意
SELECT仅仅支持标量子查询;FROM支持表子查询;
WHERE和HAVING支持标、列、行子查询;
EXISTS支持全部


分页查询
  • SELECT 查询列表 FROM 表 【…】LIMIT 【offset,】size;

    offset:显示条目的起始索引(默认从0开始,可省略);

    size:要显示的条目个数;

  • SELECT 查询列表 FROM 表 【…】
    LIMIT 显示的条目数 OFFSET 起始索引

分页查询通式 = LIMIT (page-1)*size,size;
放在查询语句的最后


联合查询
  • UNION

    查询结果来自多表;

    查询信息一致(列相同、查询字段信息类型相对应);

    默认去重(UNION+ALL可包含重复项)


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

努力学习的小白P

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

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

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

打赏作者

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

抵扣说明:

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

余额充值