sql复习(sql基础、过滤和排序数据、单行函数)

news/2025/2/5 14:46:23/

一、sql基础

基础sql
操作符优先级
空值
日期和字符只能在单引号 中出现

在select子句中使用关键字 distinct 删除重复行

select distinct department_id
from employees;

使用 desc(describe)命令,显示表结构

desc employees;

sql是一种语言,sql plus是一种环境,mysql是数据库

二、过滤和排序数据

1.where过滤

where子句紧随from子句,使用where子句将不满足条件的行过滤掉

字符大小写敏感,日期格式敏感
默认的日期格式是DD-MON月-RR

SELECT last_name, hire_date, department_id
FROM   employees
WHERE  hire_date = '7-6月-1994'

建议用这一种↓↓↓

SELECT last_name, hire_date, department_id
FROM   employees
WHERE  to_char(hire_date,'yyyy-mm-dd') = '1994-06-07'

比较运算
其他比较运算

2.like

% 代表零个或多个字符(任意个字符)。
_ 代表一个字符。
%和_可以同时使用

escape转义符

select job_id
from jobs
where job_id like 'IT\_%' escape '\'

3.order by排序

使用order by子句排序
asc(ascend)升序-从小到大,默认是从小到大
desc(descend)降序-从大到小
order by子句在select语句的结尾

三、单行函数

1.字符函数

<1>大小写控制函数

大小写控制
lower-全部小写
upper-全部大写
initcacp-首字母大写

<2>字符控制函数

字符控制函数
concat-连接字符串
substr-从第几个字符开始取,取几个字符(注意:是从1开始)
length-字符数
instr-首次出现的位置。若无返回0(在第一位返回1,也是从1开始)
lpad-补左边,补到几位,用什么补
rpad-补右边,同上
trim-将一个字符从另一个字符串中移除(注意:只能去首尾)
replace-将一个字符串中的某一个字符取代为另一个(注意:全部替换)

select concat('hello','world'),substr('helloworld',2,4),length('helloworld')
from dual;运行结果↓↓↓
CONCAT('HELLO','WORLD') SUBSTR('HELLOWORLD',2,4) LENGTH('HELLOWORLD')
----------------------- ------------------------ --------------------
helloworld              ello                                       10
select instr('helloworld','l')
from dual
select instr('helloworld','s')
from dual
select employee_id,salary,lpad(salary,10,' '),rpad(salary,10,' ')
from employees
select trim('h' from 'hhhhellohworldhh')
from dual
select replace('abcdab','b','m')
from dual

2.数字函数

<1>round

四舍五入,保留到几位小数。如无参数,默认为0,只取整数。

select round(435.45,2),round(435.45),round(435.45,-2)
from dual运行结果↓↓↓
ROUND(435.45,2) ROUND(435.45) ROUND(435.45,-2)
--------------- ------------- ----------------435.45           435              400
select round(435.45,1),round(435.45),round(435.45,-1)
from dual运行结果↓↓↓
ROUND(435.45,1) ROUND(435.45) ROUND(435.45,-1)
--------------- ------------- ----------------435.5           435              440

<2>trunc

截断,不管是几都舍去

select trunc(435.45,1),trunc(435.45),trunc(435.45,-1)
from dual运行结果↓↓↓
TRUNC(435.45,1) TRUNC(435.45) TRUNC(435.45,-1)
--------------- ------------- ----------------435.4           435              430

<3>mod

求余

select mod(1100,300)
from dual运行结果↓↓↓
MOD(1100,300)
-------------200

dual是一个伪表,可以用来测试函数和表达式

3.日期

Oracle 中的日期型数据实际含有两个值: 日期和时间。
函数sysdate返回日期和时间

select sysdate from dual;

<1>日期的数学运算

在日期上加上或减去一个数字结果仍为日期。

select sysdate,sysdate + 1,sysdate -3
from dual

两个日期相减返回日期之间相差的天数。
日期不允许做加法运算,无意义

select employee_id,last_name,trunc(sysdate-hire_date) worked_days
from employees

可以用数字除24来向日期中加上或减去天数。

<2>日期函数

日期函数
months_betwenn

select employee_id,last_name,(sysdate-hire_date)/30,months_between(sysdate,hire_date)
from employees

add_months和next_day

select add_months(sysdate,2),add_months(sysdate,-3),next_day(sysdate,'星期四')
from dual

last_day

--来公司的员工中,hire_date是每个月倒数第二天来公司的有哪些?
select last_name,hire_date
from employees
where hire_date = last_day(hire_date) - 1
select last_day(sysdate) from dual

round和trunc

select round(sysdate,'month'),round(sysdate,'mm'),trunc(sysdate,'hh')
from dual

yyyy 年
mm 月
dd 日
day星期 hh小时 mi分钟 ss秒

4.转换函数(重点)

<1>隐式数据类型转换

Oracle自动完成下图转换:
隐式数据类型转换

select '12' + 2 from dual;运行结果↓↓↓'12'+2
----------14

<2>显式数据类型转换

to_char

select employee_id,hire_date
from employees
where to_char(hire_date,'yyyy-mm-dd') = '1994-06-07'

to_date

select employee_id,hire_date
from employees
where to_date('1994-06-07','yyyy-mm-dd') = hire_date

日期格式

to_number

select to_char(1234567.89,'999,999,999.99') from dual运行结果↓↓↓
TO_CHAR(1234567.89,'999,999,99
------------------------------1,234,567.89

L 本地的货币符号

select to_char(1234567.89,'L999,999,999.99') from dual;运行结果↓↓↓
TO_CHAR(1234567.89,'L999,999,9
------------------------------1,234,567.89
select to_number('¥001,234,567.89','L000,000,999.99') + 1
from dual运行结果↓↓↓
TO_NUMBER('¥001,234,567.89','
-----------------------------1234568.89

5.通用函数

<1>nvl函数

将空值转换成一个已知的值
可以使用的数据类型有日期、字符、数字。

函数的一般形式:
NVL(commission_pct,0)
NVL(hire_date,‘01-JAN-97’)
NVL(job_id,‘No Job Yet’)

--求公司员工的年薪(含commission_pct)
select employee_id,last_name,salary*12*(1+nvl(commission_pct,0)) "annual sal"
from employees
--输出last_name,department_id,当department_id为null时,显示‘没有部门’
select employee_id,last_name,nvl(to_char(department_id,'999999'),'没有部门')
from employees

<2>nvl2函数

NVL2 (expr1, expr2, expr3) : expr1不为NULL时,返回expr2;expr1为NULL时,返回expr3。

--查询员工的奖金率,若为空,返回0.01;若不为空,返回实际奖金率+0.015
select last_name,commission_pct,nvl2(commission_pct,commission_pct + 0.015,0.01)
from employees

<3>nullif函数

NULLIF (expr1, expr2) : 相等返回NULL,不等返回expr1

6.条件表达式(重点)

在 SQL 语句中使用IF-THEN-ELSE 逻辑

<1>case表达式

CASE expr WHEN comparison_expr1 THEN return_expr1[WHEN comparison_expr2 THEN return_expr2WHEN comparison_exprn THEN return_exprnELSE else_expr]
END
--查询部门号为 10, 20, 30 的员工信息,
--若部门号为 10, 则打印其工资的 1.1 倍, 
--20 号部门, 则打印其工资的 1.2 倍, 
--30 号部门打印其工资的 1.3 倍数
select employee_id,last_name,department_id,case department_id when 10 then salary * 1.1when 20 then salary * 1.2else salary * 1.3 end new_sal
from employees
where department_id in (10,20,30)

<2>decode表达式

select employee_id,last_name,department_id,decode(department_id,10,salary * 1.1,20,salary * 1.2,salary * 1.3) new_sal
from employees
where department_id in (10,20,30)

http://www.ppmy.cn/news/22274.html

相关文章

实战:Tomcat镜像

跟着视频做的tomcat镜像 1.准备镜像文件 tomcat压缩包&#xff0c;jdk的压缩包&#xff01; #1.安装lrzsz sudo apt-get install lrzsz#2.文件上传 在相应的目录下输入rz回车 wget --no-check-certificate --no-cookies --header "Cookie: oraclelicenseaccept-secureba…

FreeMarker使用

特殊字段 原意Marker中转义等于不等于!>gt>gte<lt<lte与&&或||非&#xff01;双引号双引号反斜杠\\单引号\’换行\n回车\r退格键\bTab键\t \f:Form feed \l:< \g:> \a:& \{:{ \xCode: 直接通过 4 位的十六进…

深度学习系列3——Pytorch 图像分类(VGG)

1. 概述 本文主要是参照 B 站 UP 主 霹雳吧啦Wz 的视频学习笔记&#xff0c;参考的相关资料在文末参照栏给出&#xff0c;包括实现代码和文中用的一些图片。 整个工程已经上传个人的 github https://github.com/lovewinds13/QYQXDeepLearning &#xff0c;下载即可直接测试&a…

【MySQL】第十五部分 数据的增删改(DML)

【MySQL】第十五部分 数据的增删改&#xff08;DML&#xff09; 文章目录【MySQL】第十五部分 数据的增删改&#xff08;DML&#xff09;15. 数据的增删改&#xff08;DML&#xff09;15.1 插入数据15.2 更新数据15.3 删除数据15.4 计算列&#xff08;MySQL8.0新特性&#xff0…

【前端攻城狮之原生事件和vue事件知识基础和拓展】

目录事件循环模型进程和线程js代码分类浏览器内核事件的三个阶段事件的捕获事件的委托vue事件传参vue事件和原生js事件的区别vue事件修饰符事件循环模型 事件循环模型分为三个部分&#xff0c;一个是执行栈&#xff0c;一个是浏览器的API模块&#xff0c;一个是存放回调函数的回…

2023年财经类部分资格证书考试时间安排及入口

证书/资质考试目录1.期货从业&#xff08;统考1次&#xff09;2.基金从业&#xff08;统考1次&#xff09;3.证券从业&#xff08;统考1次&#xff09;4.注册会计CPA5.初级会计6.中级会计7.中级经济师8.中级统计师9.FRM&#xff08;1&#xff09;2023年5月FRM&#xff08;2&…

ARFoundation之路_很全面的

ARFoundation之路&#xff0d;概述 ARFoundation之路&#xff0d;架构及术语 ARFoundation之路&#xff0d;图像跟踪 ARFoundation之路&#xff0d;光照估计 ARFoundation之路&#xff0d;点云与参考点 ARFoundation之路&#xff0d;平面管理 ARFoundation之路&#xff0d…

设计模式——创建型:单例模式

一、单例设计模式的定义 一个类只允许创建一个对象&#xff08;或叫实例&#xff09;&#xff0c;那这个类就是一个单例类&#xff0c;这种设计模式就叫作单例设计模式&#xff0c;简称单例模式&#xff08;Singleton Pattern&#xff09;。 二、单例的用处 从业务概念上&am…