一、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

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

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)

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

  1. SQL基础--过滤和排序

    为什么80%的码农都做不了架构师?>>>    --======================================= --SQL基础-->过滤和排序 --==== ...

  2. alin的学习之路(数据库篇:二)(select查询,where条件查询,order by排序,单行函数,多行函数,group by分组)

    alin的学习之路(数据库篇:二)(select查询,where条件查询,order by排序,单行函数,多行函数,group by分组) 1. SQL语句 1.1 sql语言类型 sql是一门独立的 ...

  3. Mysql基础篇(2)—— 单行函数和聚合函数

    单行函数 特点 可以嵌套 参数可以是一列或一个值 每行返回一个结果 数值函数 函数名 含义 ABS(x) 返回x的绝对值 SIGN(X) 返回X的符号.正数返回1,负数返回-1,0 PI() 返回圆周 ...

  4. 数据库基础篇学习笔记_单行函数

    单行函数 文章目录 单行函数 1. MySQL内置函数 1.1 单行函数 2. 数值函数 2.1 基本函数 2.2 角度与弧度互换函数 2.3 三角函数 2.4 指数与对数函数 2.5 进制间的转换 ...

  5. oracle 排序_Oracle数据库中SQL之过滤和排序数据

    1 过滤 使用WHERE子句,将不满足条件的行过滤掉.WHERE子句紧随FROM子句 SELECT *|{[DISTINCT]column|expression[alias]} FROM table ...

  6. SQL Server 索引基础知识(1)--- 记录数据的基本格式

    不论是缓存的数据信息,还是物理保存的信息,他们的基本单位都是数据页.所以理解数据页是最最基础的知识点,本篇博客就介绍跟索引有关的数据页的一些基础知识. 数据页的基础知识 SQL Server 中数据存 ...

  7. SQL Server 索引基础知识 1 --- 记录数据的基本格式

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 由于需要 ...

  8. SQL数据库语言基础之SqlServer表数据的插入、更新与删除

    文章目录 一.数据的插入(INSERT INTO...VALUES) 二.数据的更新(UPDATE) 三.删除数据(DELETE) 一.数据的插入(INSERT INTO-VALUES) 1.数据插入 ...

  9. oracle之基本的过滤和排序数据之课后练习

    7. WHERE 子句紧随 FROM 子句8. 查询 last_name 为 'King' 的员工信息错误1: King 没有加上 单引号select first_name, last_name fr ...

最新文章

  1. 【错误记录】Android NDK 错误排查记录 ( Could not get version from cmake.dir path ‘xxx\cmake\3.6.4111459‘. )
  2. 领航商务之选——金立M5 plus体验札记
  3. 成功解决无法连接到YLMF-201404228CG,在建立与服务器的连接时出错。在连接到 SQL Server 2005 时,在默认的设置下 SQL Server 不允许进行远程连接可能会导致此失败
  4. Qt小游戏《2048》源码(含大量注释)
  5. C#与.NET程序员面试宝典 1.3 投递简历
  6. oracle逻辑备份和物理备份,Oracle备份与恢复介绍(物理备份与逻辑备份)
  7. java socket5源码_Java利用TCP协议实现客户端与服务器通信【附通信源码】
  8. mysql查binlog删除时间_mysql的binlog日志删除查询
  9. 供应商与客户 连接平台 的谋合
  10. python图书管理系统源代码_python实现 图书管理系统源码(入门级控制台项目)...
  11. Android适配64位TBS X5内核
  12. 会计计算机学什么软件有哪些,会计一般要学什么软件
  13. 【知识分享】汽车搭载的车载摄像头分类
  14. 3.4亿!史上最贵二踢脚,马斯克“自炸”火箭:SpaceX成功测试飞船逃生能力
  15. 地壳中元素含量排名记忆口诀_地壳含量_地壳中元素含量排名口诀
  16. 69期-Java SE-035_MySQL-6 存储过程、SQL练习 -doing
  17. 微信小程序 修改 顶部电量 时间的颜色
  18. Code Project精彩系列二
  19. 程序写情诗|专属于程序员的浪漫
  20. 第十四届全国大学生信息安全竞赛-线上赛Writeup

热门文章

  1. 分页工具--Page和Pageable
  2. 【PyTorch】Resnet/深度残差网络
  3. 手机再也不会砸脸上因为有了神画影院F1
  4. IE报错 Stream ended unexpected
  5. h5点播播放mp4视频遇到的坑,ios的h5不能播放视频等
  6. JDBC结合C3PO的原始连接
  7. 看似普通却又了不起的APP推广方案
  8. 影楼行业的除了ps修图外还有Lr。
  9. linux加解密指令,Linux加解密支持模块代码总体描述
  10. 学成案例——banner模块和精品模块制作