MySQL第四天0319 日期函数,流程函数,多表连接查询~等值、非等值、自身连接,ANSL SQL~自然、using、on、外连接

本文详细介绍了SQL中日期时间函数的使用方法,包括NOW、CURDATE、CURTIME、TIMEDIFF、DATEDIFF等,以及如何进行日期时间的加减操作。同时,深入解析了流程函数如CASE、IF、IFNULL的应用场景,并提供了多表连接查询的基本写法和注意事项。
  • 日期函数
    • 1、NOW():返回服务器的当前日期和时间
    • 2、CURDATE():返回当前日期;
    • 3、CURTIME():返回当前时间,只包含时分秒
      • select now(),curdate(),curtime(),utc_date(),utc_time()
      • select now(),now()+10,now()+90
      • select curdate(),curdate()+0,curdate()+20,
      • date_add(curdate(), interval 10 day),
      • date_add(curdate(), interval 20 day)
      • select curtime(),curtime()+10
    • 4、TIMEDIFF(expr1, expr2):返回两个时间的时间差
      • select timediff('09:50:20','08:15:10')
    • 5、DATEDIFF(expr1, expr2):返回两个日期相差的【天数】
      • select datediff('2020-3-19','2020-02-17')
    • 6、DATE_ADD(date, INTERVAL expr unit) 给date增加一个间隔
      • 增加20年、月、日
        • select curdate(),date_add(curdate(), interval 20 year)
        • select curdate(),date_add(curdate(), interval 20 month)
        • select curdate(),date_add(curdate(), interval 20 day)
      • 增加20小时、分钟
        • select now(),date_add(now(), interval 20 hour)
        • select now(),date_add(now(), interval 20 minute)
      • 增加10年5个月
        • select now(),date_add(now(), interval '10-5' YEAR_MONTH)
      • 增加10小时20分钟5秒
        • select now(),date_add(now(), interval '10:20:5' HOUR_SECOND)
      • date_add()简写为+
        • select now(), now()+interval '10-5' YEAR_MONTH
        • select now(), now()+interval '10:20:5' HOUR_SECOND
    • 7、DATE_SUB(date, INTERVAL expr unit) 给date减去一个间隔
      • 减少20天
        • select curdate(),date_sub(curdate(), interval 20 day)
    • 8、提取日期时间的各个部分:
      • date() time()
      • year() month() day() quarter() week()
      • hour() minute() second() microsecond()
      • 也可以使用 EXTRACT(unit FROM date)
        • select now(),date(now()),time(now()),year(now())
        • select year(now()), day(now()), week(now()), extract(year from now())
        • select hiredate, year(hiredate), extract(year from hiredate) from emp
    • 9、dayofweek(date)、dayofmonth(date)、dayofyear(date)
      • select now(),dayofweek(now()),dayofmonth(now()),dayofyear(now())
    • 10、日期时间格式化函数:DATE_FORMAT(date,format)、TIME_FORMAT(time,format)
      • %Y:代表4位的年份
      • %y:代表2为的年份
      • %m:代表月,格式为(01……12)
      • %c:代表月,格式为(1……12)
      • %d:代表天数,格式为(00……31)
      • %e:代表天数,格式为(0……31)
      • %H:代表小时,格式为(00……23)
      • %h:代表小时,格式为(01……12)
      • %i:代表分钟,格式为(00……59)
      • %s:代表秒,格式为(00……59)
      • select now(), DATE_FORMAT(now(),'%Y/%m/%d---%H:%i:%s')
    • 11、补充函数:TIMESTAMPDIFF(type,开始时间,结束时间)
      • type取值:year、month、day、hour、minute、second、week、quarter
        • select timestampdiff(month,'20000101',now())
    • 12、补充函数:FORMAT(data,精度)
      • select sal,format(sal,2) from emp
  • 流程函数
    • 1、case
      • select sal,
      • case
        • when sal<1000 then 'low'
        • when sal>=1000 and sal<3000 then 'middle'
        • when sal>=3000 and sal<4000 then 'high'
        • else 'very high'
      • end
      • from emp
      •  
      • select sal,
      • case sal<1000
      • when true then 'low'
      • when false then 'high'
      • end
      • from emp
    • 2、if、ifnull
      • SELECT IF(1<2,2,3);
      • SELECT IF(1<2,'success','fail');
      • select ifnull(comm,0) from emp
    • 3、其他
      • 明文 ename
      • 秘文 md5(ename)
        • select ename, md5(ename) from emp
  • 多表连接查询
    • 基本写法
      • 笛卡尔积
        • 两个表所有行都发生连接
        • 连接条件不足
      • 等值连接
        • and
        • 多表
      • 限制歧义列
        • 查询工作地点在NEW YORK的员工编号,姓名,部门编号,工作地点
        • deptno是歧义列,因为emp表中有deptno,dept表中有deptno,到底哪个?
        • 需要明确指出哪个表的deptno,否则报错
      • 表的别名
        • emp e, emp m
      • 非等值连接
      • 自身连接
        • emp e, emp p 理解成类和对象
    • ANSI SQL
      • 交叉连接
        • cross join
      • 自然连接
        • natural join 对两个表之间相同名字和数据类型的列进行的等值连接
      • using 子句
        • select * from emp join dept using (deptno)
      • on子句
        • select * from emp join dept on(emp.deptno=dept.deptno)
      • 外部连接
        • left outer join
        • right outer join
在Keil MDK-ARM(通常称为Keil5)中使用 ANSI C 标准进行开发,可以通过配置编译器选项来实现。ANSI C 是指符合美国国家标准协会(ANSI)发布的 C 语言标准的编程规范,通常指的是 C89 或 C90 标准。 ### 配置步骤 1. **打开 Keil5 工程** 启动 Keil µVision5 并加载你的工程。 2. **进入目标选项设置** 在项目窗口中右键点击目标(Target),选择“Options for Target...”或直接按快捷键 Alt + F7。 3. **选择 C/C++ 编译器标准** 在弹出的窗口中,选择 "C/C++" 选项卡,在 "Language" 部分找到 "C Language" 设置项。选择以下之一: - **C89 (ANSI)**:用于传统的 ANSI C 标准 - **C90**:与 C89 基本一致,是国际化的 ISO 标准版本 4. **控制字符串设置(Compiler Control String)** 如果需要更精细的控制,可以在 "Misc Controls" 字段中添加特定的编译器指令。例如: ``` --c90 ``` 这样可以确保编译器严格按照 ANSI C 标准进行编译,避免使用 C99 或更高版本的扩展特性 [^3]。 5. **保存并重新编译工程** 确认所有设置后,点击 “OK” 并重新编译整个工程以应用新的标准配置。 ### 示例代码验证 为了验证是否成功启用 ANSI C 标准,可以编写一个简单的 C 程序: ```c #include <stdio.h> int main(void) { int i; for(i = 0; i < 5; i++) { printf("Iteration %d\n", i); } return 0; } ``` 注意:在 ANSI C 中,变量必须在函数开始处声明,能像 C99 及以后标准那样在循环中声明(如 `for(int i=0; ...)`)。 ### 注意事项 - Keil MDK 使用的是 Arm Compiler,其默认可能支持较新的 C 标准(如 C99 或 C11),因此明确指定 ANSI C 模式常重要。 - 若使用 Arm Compiler 6,可通过命令行参数 `--c90` 来强制使用 ANSI C 标准 [^4]。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值