数据库基础

文章介绍了数据库中的DML(数据操作语言)、DDL(数据定义语言)和DCL(数据控制语言),并详细讲解了如何创建数据库表,以及SQL查询的基本语法,包括简单查询、限定查询(如WHERE子句、关系运算、取值范围运算、模糊查询、空判断和逻辑运算),还涵盖了数据的排序和一些常用的函数,如字符串函数、数字函数、时间与日期函数及其应用示例。
摘要由CSDN通过智能技术生成

数据库的语言

DML(数据操作语言)

指的是对数据本身进行操作,主要包含增删改查,由开发人员操作。

● DDL(数据定义语言)

通常指的是对数据表进行的操作,由后端架构师负责。

● DCL(数据控制语言)

控制不同用户的操作权限,通常在公司由DBA(数据库管理员)负责。

数据库中表的创建

CREATE TABLE表名(
字段1 字段1类型[COMMENT  字段1注释l,
字段2 字段2类型[ COMMENT 字段2注释l,
字段3 字段3类型[ COMMENT 字段3注释l,
....
宁段n 字段n类型[COMMENT   字段n注释]
)[ COMMENT表注释];

例子:

--创建一个表 class22102
CREATE TABLE class22102(
    id        NUMBER,
    name      VARCHAR2(20)    DEFAULT    '无名氏',
    birthday  DATE
);

数据查询

简单查询

-- 1. 查看bonus表内容
SELECT * FROM bonus;
-- 2. 查看表结构
DESC bonus;

限定查询

限定查询是在简单查询的基础上,新增WHERE子句,用来限制结果的行数。

其语法结构如下:

WHERE子句支持以下运算:

● 关系运算

● 取值范围运算

● 基数范围运算

● 模糊查询

● 空判断

● 逻辑运算

4.1 关系运算

关系运算是最基础的运算,包括:

>、<、>=、<=、!=、<>、=

需要注意的是!=和<>效果完全相同,=不是赋值表示等式比较

【例子】查询出公司基础工资高于2000的雇员信息。

分析:如果一个查询,例如查询emp,结果是部分雇员信息,不是所有雇员的信息,那么这个查询通常要使用WHERE子句进行雇员的筛选。

SELECT * FROM emp WHERE sal>2000;

4.2 取值范围运算 BETWEEN...AND...

筛选两个数据的范围区间,需要注意的是,这个区间是闭区间,包含两端数据。

【例子】查询所有在1981年雇佣的雇员信息。

分析:只需要让雇佣日期落在1981年1月1日到1981年12月31日的区间上即可。

SELECT * FROM empWHERE hiredate BETWEEN '01-1月 -81' AND '31-12月-81';

4.3 基数范围运算 IN(包含),NOT IN(不包含)

表示是否落在其中的一个选项中。

【例子】查询出雇员编号为7369或7566或7839或8899(不存在)的雇员信息。

如果按照传统思维,可以通过下面的查询完成:

SELECT * FROM empWHERE empno=7369 OR empno=7566 OR empno=7839 OR empno=8899;

此时可以使用IN来简化操作:

SELECT * FROM emp WHERE empno IN (7369,7566,7839,8899);

4.4 模糊查询 LIKE

使用LIKE关键字在WHERE子句中进行模糊查询,模糊查询有两个通配符:

● _

匹配任意一个字符

● %

匹配任意多个字符(0,1,...n)

● [ ]:

表示括号内所列字符中的一个(类似正则表达式)。指定一个字符、字符串或范围,要求所匹配对象为它们中的任一个。

● [^]:

表示不在括号所列之内的单个字符

【例子】查询所有姓名以字母A开头的雇员信息。

SELECT * FROM emp WHERE ename LIKE 'A%';

4.5 空判断 IS

NULL表示一种特殊的数值状态,这种状态不与任何数据相联系,例如不能用普通数据与NULL比较,也不能用普通数据与NULL计算等。

【例子】查询不领取佣金的人员信息。

分析:如果按照之前的关系判断,可能会写出下面的语句。

SELECT * FROM emp WHERE comm=NULL;

可以看到没有任何返回结果,NULL必须使用专用的判断方式:

● IS NULL

是否为空

SELECT * FROM emp WHERE comm IS NULL;

● IS NOT NULL、NOT IS NULL

是否不为空

SELECT * FROM emp WHERE comm IS NOT NULL;SELECT * FROM emp WHERE NOT comm IS NULL;

【例子】查询领取佣金的人(包括0)的信息

下面两种写法等效

SELECT * FROM emp WHERE comm IS NOT NULL;SELECT * FROM emp WHERE NOT comm IS NULL;

4.6 逻辑运算

包括三种运算:

● AND

所有的条件都满足,结果才满足。

● OR

所有的条件满足一个,结果就满足。

● NOT

逻辑结果反转

【例子】查询出所有销售人员并且工资高于1200的雇员信息。

分析:

条件一 职位是销售

条件二 工资高于1200

两个条件必须都满足才行,使用AND连接两个判断

SELECT * FROM emp WHERE job='SALESMAN' AND sal>1200;

5. 查询排序

通过ORDER BY子句,可以设置查询结果的排序规则。

语法结构如下:

两种排序规则:

● ASC

升序,即从小到大,从早到晚,从低到高

● DESC

降序,即从大到小,从晚到早,从高到低

【例子】查询所有雇员的信息,按照工资从高到低排序。

SELECT * FROM emp ORDER BY sal DESC;

二、函数

函数是一段可以重复利用的代码,其中有一些组成部门是特别需要关注的:

● 函数名称(包括函数的功能)

● 输入参数

● 返回值

1 字符串函数

这是一些专门用于处理字符串数据类型的函数。

1.1.1 大小写转换

函数名称与功能

输入参数

返回值

UPPER 转大写

一个字符串列(字段)

转换为大写后的字符串

LOWER 转小写

一个字符串列(字段)

转换为小写后的字符串

INITCA 首字母大写,其余字母小写

一个字符串列(字段)

转换后的字符串

【例子】查询所有雇员的姓名与职位,要求姓名全小写,职位首字母大写。

SELECT LOWER(ename),INITCAP(job) FROM emp;

【课堂练习】

1. 查询所有部门的位置,要求显示为首字母大写。

SELECT INITCAP(loc) FROM dept;

2 长度

函数名称和功能

输入参数

返回值

LENGTH

获取字符串长度

字符串类型的列

字符串长度数值

【例子】查询姓名长度为5的雇员名称。

SELECT ename FROM emp WHERE LENGTH(ename)=5;

3 数字函数

用于处理数字类型的数据列。

函数名称和功能

输入参数

返回值

ROUND

四舍五入

参数1:数字类型的数据列

[参数2:保留小数位]

处理后的数字

TRUNC

截取

数字类型的数据列

[参数2:保留小数位]

处理后的数字

【例子】查询所有雇员的姓名与基本工资,要求基本工资精确到百位(四舍五入)。

SELECT ename,ROUND(sal,-3) FROM emp;

【课堂练习】查询所有雇员的基础年薪,要求精确到万位,千位忽略。

SELECT ename,TRUNC(sal*12,-4) FROM emp;

4 时间与日期函数

Oracle数据库给每个表增加了两个隐藏列:SYSDATE、SYSTIMESTAMP,实际上这两列并不在表中,但是可以直接使用。内部包含当前的时间和日期。

SYSDATE

当前年月

SYSTIMESTAMP

当前年月日,时分秒

【例子】验证SYSDATE、SYSTIMESTAMP的存在。

SELECT SYSDATE,SYSTIMESTAMP FROM emp;

4.1 日期运算

日期可以进行加减运算,但是日期和日期之间只能进行减法运算。

【例子】计算90天后的日期。

SELECT SYSDATE+90 FROM emp;

【例子】计算每个雇员到今天为止雇佣的天数。

SELECT SYSDATE-hiredate FROM emp;

4.2 月数差

函数名称和功能

输入参数

返回值

MONTHS_BETWEEN

两个日期之间的月份差

参数1:日期列1

参数2:日期列2

两个参数的日期之间的月份

【例子】计算SCOTT雇员到今天为止的雇佣月数。

SELECT MONTHS_BETWEEN(SYSDATE,hiredate)FROM emp WHERE ename='SCOTT';

4.3 月计算

月也支持整数加减法,但是要通过一个专用的函数实现。

函数名称和功能

输入参数

返回值

ADD_MONTHS

给某个日期加上指定的月数

参数1:日期列

参数2:月数,整数

加完月数之后的日期

【例子】查询每个雇员的姓名与雇佣后半年的日期。

SELECT ename,ADD_MONTHS(hiredate,6) FROM emp;

4.4 下个周几

函数名称和功能

输入参数

返回值

NEXT_DAY

求出下个周几的日期

参数1:日期列

参数2:周几

计算后的日期

【例子】下个周五是什么日期?

SELECT NEXT_DAY(SYSDATE,6) FROM emp;SELECT NEXT_DAY(SYSDATE,'星期五') FROM emp;

4.5 本月最后一天

函数名称和功能

输入参数

返回值

LAST_DAY

日期所在月的最后一天

日期列

计算后的日期

【例子】求出在每个月倒数第三天雇佣的雇员信息。

SELECT * FROM empWHERE LAST_DAY(hiredate)-2 = hiredate;

5 转换函数

5.1 字符串转换

函数名称和功能

输入参数

返回值

TO_CHAR

通常把日期转换为固定格式的字符串

参数1:日期列

参数2:转换格式,字符串

传入格式的字符串

常用的转换格式:

● yyyy

● mm

● dd

● hh 或 hh24

小时(12小时制 或 24小时制)

● mi

分钟

● ss

【例子】显示当前日期和时间的符合中国人阅读的格式。

SELECT TO_CHAR(SYSDATE,'yyyy-mm-dd hh24:mi:ss') FROM emp;

【例子】查询所有在6月份雇佣的雇员信息。

SELECT * FROM emp WHERE TO_CHAR(hiredate,'mm')=6;

5.2 空值转换

NULL不能参与任何计算,因此需要使用空值转换函数把NULL转换为特定的数值。

函数名称和功能

输入参数

返回值

NVL

把可能出现的NULL转换为特定的数值

参数1:可能为NULL的数据列

参数2:转换后的数值

如果参数1为NULL,则返回参数2;

如果参数1不为NULL,则返回参数1

【例子】查询所有雇员的姓名和年薪(包括薪金与佣金)

6. 统计函数

常用的统计函数有以下五个:

函数名称和功能

输入参数

返回值

COUNT 计数

任意列

计算后的结果

SUM 求和

数字列

AVG 平均值

数字或日期列

MAX 最大值

数字或日期列

MIN 最小值

数字或日期列

【例子】公司几个工资等级?

SELECT COUNT(*) FROM salgrade;

COUNT函数可以在面对未知的数据表时,先使用,获得数据量,最后再进行操作。

【例子】公司一个月要支付多少员工的基本工资?

分析:实际上求的是所有员工的基本工资和。

SELECT SUM(sal) FROM emp;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值