1、SQL语言的构成.
1.1结构化查询语言包含以下6个部分:
数据查询语言(DQL):也称为"数据检索语句"。常用关键字: select,where,order by,group by 和 having。
数据操作语言(DML):该语句包括动词 insert、update 和 delete。它们分别用于添加、修改和删除。
事务控制语言(TCL):该语句能确保被 DML 语句影响的表的所有行及时得以更新。包括 commit提交)命令、save point(保存点)命令、rollback(回滚)命令。
数据控制语言(DCL):它的语句通过 grant 或 revoke 实现权限控制,确定单个用户和用户组对数据库对象的访问。
数据定义语言(DDL):其语句包括动词 cteate,alert 和 drop。在数据库中创建新表或修改、删除表(create table 或 drop table)。
指针控制语言(CCL):它的语句,像 declare cursor,fetch info 和 update where 用于对一个或多个表单独行的操作。
2.Oracle中支持的数据类型.
2.1字符数据类型
char:固变,长度范围:1-2000字节;
varchar2:可变,长度范围:1-4000字节;
ong可变:可变,长度范围:2GB;
固变:就是中文在记事本中占用2个字节如果该记事本里面有两个中文字母则是 字节,char类型的话它保存的字节数还是你设置的那个字节数是固定不变的
可变:就是中文在记事本中占用2个字节如果该记事本里面有两个中文字母则是4字节,varchar2加入你设置了20字节则它保存下来的字节数是文本中保存的字节数是可以根据实际数据进行改变的(切记不能大于设置的字节个数)
2.2数值数据类型
number:整型和非整型都是number,使用number时可指定number的精确度,-最高精确到38位。
整型表示:sid number(5);//位数
非整型表示:sid number(5,3);5代表整数位和小数位的总长度是5,3表示小数位的最大长度是3,整数位的最大长度则是:5-3=2。 99.999
2.3日期数据类型
date:它可以精确到秒,比如:1小时1分1秒。
imestamp:可以把秒值精确到小数点后6位,比如:1小时1分1.111111秒。
3.Oracle中支持的SQL操作符
3.1算术操作符
算术操作符用于执行数值计算。
可以在SQL语句中使用算术表达式,算术表达式由数值数据类型的列名、具体的数值和连接它们的算术操作符组成;
算术操作符包括加(+)、减(-)、乘(*)、除(/)。
3.2比较操作符
比较操作符用于比较两个表达式的值。
比较操作符包括 =、!=、<、>、<=、>=、between…and、in、not in、like 和 is null等。
is null 的使用:
作用:is null 使用来判断某列是否为空
nvl() 函数的使用:
作用:判断某列的数据是否为空,如果为空,则赋指定的值
3.3逻辑操作符
逻辑操作符包括与(AND)、或(OR)和非(NOT)
3.4集合操作符
集合操作符将两个查询的结果组合成一个结果。
集合操作符有:union、union all;
union:如果要组合的查询结果相同,则只会显示一个;
union all:显示所有要组成查询结果
3.5连接操作符 - ||
连接操作符用于将多个字符串或数据值合并成一个字符串
4.伪列
4.1伪列概述
伪列:顾名思义,伪装起来的列,隐藏起来的列。隐式存在,可以显式调用。
4.2伪列-rowid
oracle数据库的表中的每一行数据都有一个唯一的标识符,或者称为rowid,在oracle内部通常就是使用它来访问数据的。
rowid需要 10个字节的存储空间,并用18个字符来显示。该值表明了该行数据在oracle数据库中的具体物理位置。
rowid:select a.rowid,a.* from emp a;
4.3伪列-rownum
在Oracle里面执行 insert 操作的时候,oracle会按照 insert 的先后顺序,将 rownum 分配给每一行数据,且是固定不变的。
oracle里面的伪列 rownum 和 sqlserver里面的标识列有点相似。
伪列 rownum只能作用于小于号和等于号以及小于等于号,不能作用于大于号。
分页
在Oracle里面使用伪列 rownum 实现分页的效果。
伪表
伪表:顾名思义。伪装的表。隐式存在,可以显式调用。
Oracle中的伪表是:dual;
因为在Oracle里面 select 后面必须接 from 关键字,当 select和from
5.案例代码
--1、查询出两个结果集'a'以及'b',分别进行列合并以及行合并
--1.1列合并
select 'a'||'b' from dual
--1.2行合并
select 'a' from dual
union all
select 'b' from dual;
--2、取前几条数据
select a.*,rownum from emp a where rownum<4
--3、先根据部门编号升序,再根据薪水降序
select * from emp order by deptno asc,sal desc;
--4、查询出雇员表(emp)中comm为null的记录
select * from emp where comm is null;
--5、查询出雇员表(emp)中员工的姓名,将名字中的'A'换为'1','B'换为'2'
select repalce(b,'B',2)from(
select replace(enam,'A',1) b from emp
)
--6、查询出每个部门的平均薪水,并显示出部门详细信息
select deptno,avg(sal) from emp group by deptno;
### 7、查询出部门人员中薪水大于2000的人在2个以上的部门
```java
select deptno,count(*) from emp where sal>2000
group by deptno
having count(*)>=2
6.约束
--约束:主键、检查、唯一、非空、默认值、外键。
create table tb_g2103(
sid number primary key,--主键约束
sname varchar2(10) unique,--唯一约束
sex varchar2(10) check(sex='男' or sex='女'),--检查约束
age number(2) check(age>=18 and age<=100) not null,--非空约束
saddress varchar2(10) default '长沙'--默认值约束)