SQL基础

发布 2022-09-21 01:22:28 阅读 5504

单行函数:

single-row sql functions

每行返回一个结果。

dual是一个公共表,可用它做些计算或返回函数处理结果。

null参与运算会返回空值。

字符函数:大小写类:lower、upper、initcap(驼峰型)

字符处理类:concat、substr、length、instr、lpad | rpad、trim、replace

select employee_id,concat(first_name,last_name) name,job_id,length(last_name),instr(last_name,'a') contains 'a'?"

from employees

where substr(job_id,4) =upper('rep');

注意:instr()函数的结果不可能为空,若不存在,则返回0

instr(c1,c2,i,j)

在一个字符串中搜索指定的字符,返回发现指定的字符的位置;

c1被搜索的字符串。

c2希望搜索的字符串。

i搜索的开始位置,默认为1

j出现的位置,默认为1

sql>selectinstr(oracletraning,ra,1,2)instringfromdual;

instring

trim()只能去除一个字符,所以第一个参数只能有一个字符。

数字函数:round 按照指定的小数位四舍五入。

round()没有第二个参数,即没有小数位,默认保留到整数。

trunc 按指定的小数位截断数据。

mod 两数相除,返回余数。

日期函数:oracle存储日期格式:世纪,年,月,日,时,分,秒。

函数:sysdate,time

默认显示:dd-mon-rr

rr纪年规则:

现有日期加上或减去一个数值,可以得到一个日期;

两个日期详见,可以得到两个日期的天数。

将值除以24可以得到小时数。

select last_name,(sysdate-hire_date)/7 as weeks

from where department_id = 90;

日期处理函数:

round舍入:month按日舍入,16号以后进一个月,即下月1号,16号以前则为本月1号;year按月舍入,7月-12月则返回下一年1月,1-6月则返回本年1月。

注意:round函数只能处理数字和日期,不能处理字符,所以要将日期用to_date函数转换过来。

oracle 日期格式fm/fx和日期后缀sp/th/spth/thsp:

th是序数方式显示,sp是用字母拼写方式显示,spth/thsp用字母序数方式显示:

-普通方式显示,月份后面会有空格。

-序数(th)方式显示,月份后面一样有个空格。

-字母(sp)方式显示,月份后面一样有个空格。

-字母拼写和序数方式(spth/thsp)显示。

fm和fx主要是用来控制填充和精确格式:

fm是填充模式。

如果是字符格式化,指定fm参数后将仅返回指定属性实际所占长度(不再以空格填充)

如果是数值格式化,fm参数会自动舍弃被格式化元素的前置0

-序数方式显示,并且fm方式显示,会把多余的前缀0和多余的空格去掉。

-字母拼写方式显示,并且fm方式显示,会把多余的前缀0和多余的空格去掉。

fx是精确匹配模式,使用fx格式后:

1.字符及对应的格式必须严格一一对应,甚至连分隔符都要相符。

2.不允许有多余的空格。

3.数值参与格式需要完全对应(或通过fm参数去掉前置0)

转换函数与条件表达式:

隐式转换:varchar2/char与number、date之间可以互相转换。

显式转换:to_char处理日期:

必须用单引号引起来、区分大小写、可用有效日期格式元素、能去除填充的空格或前置的0、用逗号与日期隔开。

to_char(n[,fmt[,'nlsparam']]

日期元素:yyyy或rrrr--数字形式年份、四位数。

year--年份的全拼写格式。

mm--数字形式月份,两位数。

month--月份的全拼格式。

mon--月份的三位缩写格式。

dy--星期的三位缩写格式。

day--星期的全拼写格式。

dd--数字形式日期,两位数。

nlsparam:

该函数将number类型的n按数值格式fmt转换成varchar2类型的值。'nlsparams'指定由数值格式的元素返回的字符,包括:

nls_numeric_characters 小数点字符、组分隔符。

nls_currency 本地钱币符号。

nls_iso_currecy 国际钱币符号。

to_char(17145,'l099g999','nls_numeric_characters=".nls_currency="nud"')nud017,145

时间元素:hh24:mi:ss am 15.27:32 pm

加入的字符串用双引号引起来:

dd "of" month 12 of october

序号:ddspth fourteenth

to_char函数处理日期。

select last_name,to_char(hire_date,'fmdd month yyyy') as hiredate

from employees;

to_char处理数字:

转换数字为字符的元素:

9--代表一个数值。

0--显示0或一个数值。

--使用$符号。

l--使用本地货币符号。

d\.-小数点。

g\,-千位分隔符。

数字到字符。

select to_char(sal,'$99,999.00') salary

from emp;

select to_char(round(salary/7,2),'99g999d99','nls_numeric_characters=",formatted salary"

from employees

to_number与to_date:

to_number(char[,'format_mode1'])

to_date(char[,'format_mode1'])

to_date函数里可用fx选项精确匹配之后的字符或日期是否忽略多个空格还是只能有一个空格。

查询出2023年前雇用的员工。

select last_name,to_char(hire_date,'dd-mon-yyyy')

from employees

where hire_date_date < to_date(round(to_date('14-jan-90','dd-mon-rr'),month'),dd-mon-rr')

空值函数:nvl函数:

nvl (expr1, expr2)

如果expr1为空则返回expr2否则返回expr1

select last_name,salary,nvl(commission_pct,0),salary * 12) +salary * 12 * nvl(commission_pct,0) an_sal

from employees;

nvl2 (expr1, expr2, expr3)

如果expr1不为空返回expr2,为空返回expr3

select last_name,salary,commission_pct,nvl2(commission_pct,'sal+comm','sal') income

from employees

where department_id in (50,80);

nullif (expr1, expr2)

如果相同返回空否则返回expr1

select first_name,length(first_name) "expr1",last_name,length(last_name) "expr2",nullif(length(first_name),length(last_name)) result

from employees;

coalesce (expr1, expr2, .exprn)

如果expr1不为空则返回expr1,为空则返回expr2,expr2为空则返回expr3……

sql基础学习

一 基本关键字。1 join 取交集 a a join b b on 连接ab两个表,并且显示两个表中所有满足on条件的。不同种类的连接 inner join 内连接 自然连接。join 如果表中有至少一个匹配,则返回所有的行。inner join与join是相同的 left join 左连接 返回...

SQL基础语法

简单查询。范例 要求显示每一个雇员的姓名 职务 基本年薪。但是这个时候显示列出现了一个 sal 12 这个列名不方便浏览,可以起一个别名。简单查询中也可以使用 连接查询字段。范例 观察 的使用。由于 属于原样输出的字符串,所以必须使用 括起来,即 在sql语句之中,表示的是字符串。范例 要求现在的数...

SQL基础教材

学生课程实验报告书。11 级计算机与计算机科学系。软件工程专业 1101 班。学号 1130070148 姓名梁小欢 2012 2013学年第一学期。表的创建与管理 实验。一 实验目的与要求。1 掌握使用t sql语句创建数据库 数据表和 数据表完整性约束的定义。2 熟悉表的结构和列所使用的数据类型...