• MySQL的内置函数&复合查询&内外连接


    内置函数

    时间函数

    函数描述
    current_date()当前日期
    current_time()当前时间
    current_timestamp()当前时间戳
    date(datetime)返回datetime参数的日期部分
    date_add(date, interval val)在date中加上参数的日期或时间
    date_sub(date, interval val)在date中加上参数的日期或时间
    datediff(date1, date2)返回两个日期之间的时间差,单位为天
    now()当前日期和时间

    image-20230902055611224

    字符串函数

    函数描述
    charset(str)返回字符串的字符集
    concat(str2 [, …])连接字符串
    instr(string, ch)返回ch在string中出现的位置,没有返回0
    ucase(str)转换为大写
    lcase(str)转换为小写
    left(str, length)从str中的左边起取length个字符
    length(str)str的长度
    replace(string, str, replace_str)在string中用replace_str替换str
    strcmp(str1, str2)逐字符比较两字符串的大小
    substring(str, pos [, length])从str的pos开始取length个字符
    ltrim(str) rtrim(str) trim(str)去除前空格或者后空格
    select concat(name, '的语文是',chinese,'分,数学是',math,'分') as '分数' from
    student;
    
    • 1
    • 2

    数学函数

    函数描述
    abs(num)绝对值函数
    bin(num)十进制转换二进制
    hex(num)转换为十六进制
    conv(num, from_base, to_base)进制转换
    ceiling(num)向上去整
    floor(num)向下去整
    format(num, decimal_places)格式化,保留小数位数
    rand()返回随机浮点数,范围[0.0, 1.0)
    mod(num, denominator)取模,求余

    向上去整:往上找比数值大的最小整数

    向下去整:往下找比数值小的最大整数

    0向去整:找比数值更靠近0的并且里数值最近的整数

    其他函数

    函数描述
    user()查询当前用户
    md5(str)对一个字符串进行md5摘要,摘要后得到一个32为字符串
    database()显示当前正在使用的数据库
    password()对用户加密
    ifnull(val1, val2)如果val1为null,返回val2, 否则返回val1

    复合查询

    为了更好演示效果,演示的数据库中有三张表, emp(员工信息)、dept(部门信息)、salgrad(薪资信息)

    多表笛卡尔积

    如果想要查询的结果需要多张表结合才能搜索出,则可以直接多表结合去查询。

    需要注意,如果查询的列中有大于一张表拥有同名的列信息则需要指明表

    image-20230902192332359

    可以看到如图的写法就会出现很多重复的员工信息,这是因为直接结合的话会把所有表的数据都结合进去,这样并不符合实际场景。

    因此可以加上筛选条件,因为两张表是具有外键关联的,所以可以使用外键的列作为结合的条件

    image-20230902192616487

    自连接

    并不需要有多张真实存在的物理属性的表才可以结合,因为单张表操作得出的结果也可以看作是一张表,在MySQL中一切皆为表结构,所以单张表得出的虚拟表也可以和其本身去结合

    不过需要注意如果使用自连接需要对表进行不同的别名,这样系统才能分辨出区别

    例如:找出名为SMITH的员工的上级领导的编号和姓名(mgr是员工领导的编号–empno)

    image-20230902193239466

    在where中使用子查询

    子查询是指嵌入在其他sql语句中的select语句,也叫嵌套查询

    例如:显示SMITH同一部门的员工

    image-20230902193358516

    例如:查询和10号部门的工作岗位相同的雇员的名字,岗位,工资,部门号

    image-20230902193744471

    其中关键字in的作用是,查询集合是否包含了该条件

    例如:显示工资比部门30的所有员工的工资高的员工的姓名、工资和部门号

    image-20230902194108556

    其中关键字all表示:集合中的所有数据

    例如:显示工资比部门30的任意员工的工资高的员工的姓名、工资和部门号

    image-20230902194242129

    其中关键字any表示:集合中的任意一个数据

    多列子查询

    这是只使用一列作为子查询的条件,也可以同时使用多列作为查询条件

    多列子查询是指查询返回多个列数据的子查询语句

    例如:查询和SMITH的部门和岗位完全相同的所有雇员

    image-20230902194449792

    在from中使用子查询

    子查询语句出现在from子句中。这里要用到数据查询的技巧,把一个子查询当做一个临时表使用

    例如:**查找每个部门工资最高的人的姓名、工资、部门、最高工资 **

    image-20230902194848868

    内连接

    内连接实际上就是利用where子句对两种表形成的笛卡儿积进行筛选

    select 字段 from1 inner join2 on 连接条件 and 其他条件;
    
    • 1

    image-20230903102545320

    外连接

    左外连接

    左侧的表完全显示就是左外连接,如果右侧的表不对应左侧的表则为NULL

    image-20230903102802543

    右外连接

    右侧的表完全显示就是右外连接,如果左侧的表不对应右侧的表则为NULL

    image-20230903102902319

  • 相关阅读:
    大数据分布式处理框架Hadoop
    计算机毕业设计源码——基于Android的真人社交游戏辅助应用开发
    蓝桥杯倒计时48天!二分模板
    mmdet之Loss模块详解
    javascript回调函数有什么用
    SAP ABAP ALV+SMARTFORS 表分页 报表打印程序
    kubernetes kubelet 配置
    SpringBoot+Vue2项目解决前后端跨域方案
    protobuf协议详解
    springboot+java+vue大学生求职招聘就业岗位匹配推荐系统
  • 原文地址:https://blog.csdn.net/CHJBL/article/details/132646211