catalog(目录)
1)SQL语言介绍
SQL(Structured Query Language)为数据库的语言,在1974年由Boyce【博伊 斯】和Chamberlin【钱伯林】提出的一种介于关系代数与关系演算之间的结构化查询 语言,是一个通用的、功能极强的关系型数据库语言。它包含三部分:
DDL:
DML:
DCL:
2)数据库—SELECT篇。
表Table:
表是从属于用户的 ,查询表(用户名.表名),当前用户查询自己的表时,用户名. 可以省略,其他用户查询 别的用户表 ,不能省略,同时必须存在权限。
表是逻辑表(概念表),不是物理表 块(8k) —>区(连续块)–>段(连续区) -->表(多个段) ,数据段不全是表,表一定是数据段。还 有其他段:如索引段
Scott用户表 :
查看用户表
3)用户表说明(必背)
dept:部门表 类型
字段名:deptno部门编号 number
dname部门名称 varchar
loc地址 varchar
emp:雇员表
字段名:empno雇员编号
ename雇员名称
job岗位工种
mar经理人
hiredate雇佣日期 date
sal 工资
comm奖金
deptno部门编号
salgrade:工资等级表
字段名:
grade 等级 number
losal 最低
hisal 最高
bonus:奖金表
4)三范式:
设计数据库时,标准即范式式 Normal Form。一般遵循三范式(3NF)。即可。
1NF列不可再分,最小原子 (避 免重复) ;
2NF 主键依赖 (确定唯一);
3NF消除传递依赖(建立主外键关联 拆分 表)
简而言之,最终的目的避免数据重复冗rong余,
5)查询(file)
“–”sql中的注解。
DQL(data query language数据查询):查询语句;
–select(被挑选者) *|字段名,字段名2…… from(来自) 表名。
----select * from 表名;查询某个表中的所有数据
例:select * from emp;
–select 字段名 from 表名; 查询所有员工的姓名
例:select ename from emp;
–查询所有员工的姓名,员工编号,上级编号
–查询的数据: ename,empno,mgr
–数据来源: emp雇员表
–查询的条件:
select ename, empno, mgr from emp;
–查询所有员工的部门编号
–查询的数据: deptno
–来源: dept|emp
select deptno from dept;
select deptno from emp;
–所有有员工存在的部门的部门编号
–查询的数据: deptno
–来源: emp
–去重 distinct
select distinct deptno from emp;
select distinct ename,deptno from emp;
–表达式 结果字段的名字为表达式的名字 值为表达式计算的结果–>计算器
select 1+1 from emp;
select distinct 123*456 from emp;
–别名 select 字段1 as 别名,字段2 as 别名, 字段3 别名… from 表名 别名;
–别名如果是英文默认大写,如果想要原样使用|中文带空格,在别名的前后""
select distinct 123+456 as “get Sum” from dept;
select distinct 123+456 “求 和” from dept d;
– ‘’ 代表字符串 ""原样输出 结果字段名和值原样字符串输出
select ‘哈哈’ “123” from emp;
–表达式|字符串都是伪列:不是表中真是存在的字段
–字符串的拼接 || (相当于Java中的+)
select ‘a-’||’-b’ from dual;
–查询所有员工的姓名添加同一前缀 尚学堂
select ‘尚学堂’||ename “学生姓名” from emp;
–虚表: oracle(甲骨文)中不是真是存在的表,其中没有任何数据 dual
select sysdate(系统时间) from dual;
6)查询行(记录)
where 过滤行记录条件 ,条件有
a)、比较条件 = 、 >、 <、 >=、 <=、 !=、 <>、 between(在……之间) and
例:select * from emp where deptno <>20;
select * from emp where sal between 800 and 950;
b)、且或非 and 、or、 not、 union、 union all、 intersect 、minus
c)、null :is null、 is not null、 not is null
d)、like :模糊查询 % _ escape(‘单个字符’)
%:零个及以上(任意个数的)的字符
_:一个字符
遇到内容中包含 % _ 使用escape(‘单个字符’)指定转义符
模糊查询,使用通配符: %:零个及以上(任意个数的)的字符
_:一个字符
遇到内容中包含 % _ 使用escape(‘单个字符’)指定转义符 -查询员工姓名中包含字符 A 的员工信息
select * from emp where ename like ‘%A%’; -查询员工姓名中包含第二个 A 的员工名称信息
select * from emp where ename like ‘_A%’;
f)、in 、 exists(难点) 及子查询
in相当于使用or的多个等值,定值集合 ,如果存在 子查询,确保 类型相同、字 段数为1,如果记录多,效率不高,用于 一些 少量定值判断上:
–exists : 条件为 true, 存在记录,则返回结果,后续不再继续 , 与字段无关,与记录有关
j、 使用’’表示字符串(注意区分””) ,拼接使用 ||
h、 “”:原样输出,可以存在 空格与区分大小写
i、、集合操作
Union、Union All、Intersect、Minus Union,并集(去重) 对两个结果集进行并集操作,不包括重复行同时进行默认规则的排序;
Union All,全集(不去重) 对两个结果集进行并集操作,包括重复行,不进行排序 ;
Intersect,交集(找出重复) 对两个结果集进行交集操作,不包括重复行,同时进行默认规 则的排序;
Minus,差集(减去重复) 对两个结果集进行差操作,不包括重复行,同时进行默认规则的排 序
2)排序
ORDER BY 排序字段列表 [asc|desc] 、
escape()转义;
commit提交
collback回滚。