ddl data definition language
create table alter table drop table
dml data manipulation language
insert update delete merge
transaction commit rollback
select
dcl grant
重点是dml transaction 和 select命令
show user 这是sqlplus命令,可以查看数据库中所有的user
select table_name from user_tables;,查看当前用户的所有表
list,表示最后一行的sql语句,只能缓存一条记录
l,l命令也表示最后一行执行的sql命令,
list和l命令是sqlplus命令,而select是sql命令
desc user_tables,查询所有表的结构
复习
第一章:
1,select last_name,salary*10,dept_id+1 from s_emp;
可以运用sql命令进行加减乘除运算
2,select last_name name,salary s from s_emp;给列其别名
or select last_name name,salary "s" from s_emp;加双引号也可以
3,select last_name||first_name newName from s_emp;
用||可以连接两列,或列与字符串之间,或字符串与字符串之间,并且可以在后便起别名
4,在oracle中,null值与任何表达式运算结果一定为空,只要数学表达式中出现空值,结果一定为null
NVL函数处理null值,控制空值
NVL(start_date,'01-JAN-95')若前边的不为空,就按start_date处理,否则按后边的值处理
select last_name,salary*(1+nvl(commission_pct,0)/100) sa from s_emp;
有值按com取,无值按0取
NVL前后类型要一致
5,distinct column_name 放在列名之前,用于去除重复数据,用在查询具体某几列时用,
作用于两列的组合,只有两列都重复才叫重复
eg:select distinct dept_id,last_name from s_emp;
紧跟select之后,作用于其后所有子句,只有这两列都重复时才去除重复
6,col(umn) last_name heading 'l' format a10;预定义,给列或行定义显示长度和别名
col heading 定义title,相当于给列其别名
例子:
col last_name format a10;给列定义显示长度
col last_name heading lname format a10;给列定义显示长度和别名
col last_name heading lname;只定义别名的情况
col justify left format调整左右
col salary justify left format $99999;调整左右,这样可以限制最大显示长度,如果位数大于5,就显示不出来,小于等于五位数才可以显示出来,这是数字类型值定义长度的方法,$99999.00,若实际为$123-->$123.00
$09999.00, $123--->$00123.00
也即首字母为0,不够就要补,首字母为9不够不需要再补,0表示占位符,如果不够就补0,如果超出就显示#
例子:
col salary justify left format $09999.00;
若为2300==>$02300.00
col start start_date format a8 null 'not hired';
预定义针对所有某一名字的列都生效,而其别名只针对当前命令起作用
col columnName 查看某一列是否预定义过
col columnName clear 取消预定义
如:
col salary
col salary clear
第二章:
1,排序
order ....by默认为升序排列
select id,last_name,dept_id,start_date from s_emp order by last_name;
默认升序排列
例如:
select id,last_name,dept_id,salary from s_emp order by salary;
此种查询默认为升序排列
select last_name e,start_date from s_emp order by e desc;
order by + 列名或别名或列序号(1,2....)+desc制定排序方式为降序排列,其中desc放在列之后
如:
select id,last_name,salary s from s_emp order by s desc;
select last_name ln,dept_id,salary s from s_emp order by ln,s desc;
此语句先对last_name升序排列,再对salary降序排列,因为desc采用就近原则,last_name与salary之间有逗号,所以desc只对salary作用
2,
where子句,判断查询用的,可以没有,但如果出现此子句,就必须紧跟from之后若还有order by,哪么order by在where之后
select last_name,dept_id,salary from s_emp where dept_id=12(last_name='zhangsan');
如:
select last_name,dept_id,salary from s_emp where dept_id=44 order by salary;
sql语句要求,字符和日期必须加单引号,数字类型不用加单引号,字符类型数据大小写敏感,默认日期显示格式'DD-MON-YY',日期格式不区分大小写,但是月份必须用字符串
3,
>,<,>=,<=
between...and..在...之间查询
小的在前,大的在后,不能写反,包括边界值在内
eg;select first_name,last_name,start_date from s_emp where start_date between '08-march-90' and '18-jan-91';
日期格式一定要与数据库种的格式相匹配
in(list):
eg:select id,name,region_id from s_dept where region_id in(1,5);
列出这两个所有的可能值
like: 模糊查询,需要用通配符
eg:select last_name from s_emp where last_name like 'N%';
"%N"表示0到多个,查询所有以N开头的last_name; "_a%"表示只有一个,查询所有第二个字母为a的last_name列的值
例子:
select id,last_name from s_emp where last_name like '_a%';
查询所有第二个字母以a的lastname
is null:判断那一列或行为空
eg:select id,name,credit_rating from s_customer where sales_rep_id is null;
查询所有sales_rep_id为空的从s_customer中查询
逻辑判断 and ,or not
and:都要输出
eg:select last_name,salary,dept_id,title from s_emp where dept_id=42 and title='Stock Clerk';
or:至少输出一个
eg:select last_name,salary,dept_id,title from s_emp where dept_id=41 or title='Stock Clerk';
not:
select last_name,salary,dept_id from s_emp where salary>=1000 and dept_id=44 or dept_id=42;此子句表示查询44部门所有工资大于1000的员工,同时查询42部门的所有员工的信息
select last_name,salary,dept_id from s_emp where salary>=1000 and (dept_id=44 or dept_id=42);查询42和44部门所有工资大于1000的员工的信息
!= <> ^=三个都表示不等于
如:select id,last_name,dept_id from s_emp where dept_id(!=|<>|^=)45;
第三章:
1,单行函数
function_name(column|expression,[arg1,arg2])
lower('arg'):全变成小写
upper:首字母大写其余小写
initcap:
select first_name,last_name from s_emp where upper(last_name)='PATEL';
concat:
select concat('good','moring') from dual;---goodmoring将两个字符串连接起来
select substr('String',1,3) from dual;--->截取字符串,从1的位置截取3个=>Str
substr('string',-2,3)负数倒着取
length('string')==>6
nvl:
2,
数字类型函数:
round:四舍五入
round(45.932,2),正数表示小数点后留两位,0表示为整数,负数表示小数点前留几位,是0可以省略不写,负数,小数点前留几位四舍五入,其它补零
round(45.923,2)--->45.92
round(45.923,0)--->46
round(45.923,-1)--->50
trunc(45.923,2)--->45.92
trunc(45.923)--->45,为0直接截取,不四舍五入
trunc(45.923,-1)--->40 为负1,小数点前保留一位,其余截取,不四舍五入
trunc
3,
日期类型
oracle默认为dd-mon-yy
select sysdate from dual;可以获得系统时间
日期可以和数字类型值做加法,两个日期之间不能相加,两个日期可以相减返回整数
data function
第八章:
数据库设计规范:
数据库的范式
1一范式单值性:每一列多是一个独立的概念
2二范式依赖性:要求这些列与列之间有直接或间接的依赖
3三范式非传递性:表中的所有属性都必须直接依赖于某一列
主键:每一张表只能有一个主键,
外键:指向另一个表的主键或其他表的唯一键,要求里边的值必须在另一个表中出现过,
外键可以为空
第九章:
ddl命令:对表和视图进行操作,操作表结构
create建表
alter更新表
drop
Trunc
select constraint_name,constraint_type from user_constraint where constraint_name='s_emp'
常用数据类型
varchar2
varchar2最多能描述256个字符
char
number
number(p,s)有效位数为p,小数点后s位
long长字符类型,专门用来存字符串
自定义约束
类型位check(sex in('F','M'));自定义约束列sex,其值在后边括弧中的两个值中取
外键约束
select count(*) from user_tables;查用户建的表的数量
select count(*) from all_tables;查用户可以使用的表的个数
desc user_objects用户建立的所有的表,视图,索引等
select distinct object_type from user_objects;打印出当前对象的所有的表,视图等
select count(*) from user_objects where object_type='TABLE';
select count(*) from user_tables;上下相等
select object_name,object_type from user_objects where
查约束名,在没有定义约束的情况下
select con.constraint_name,con.constraint_type,col.column_name from user_constraints con,
增删改操作
insert into h_xian(id,name,sex,address)
values('hexian',4,'f','femail');插入顺寻可以不按表的列顺序插
如果时间默认为sysdate,如果插入时不指定时间,则默认为系统时间
如果指定,则按指定的操作
所有的非空的列必须给值,其他列可以不指定值
十章,数据字典
desc tableName---描述表的结构
数据字典与普通表的区别
1》数据字典保存的时其他表的信息
table里边保存的时用户数据
2》数据字典时由dbserver建立并维护
table由用户建立并维护
3》用户对数据字典只有select权限
4》数据字典动态刷新,对ddl命令比较敏感
select count(*) from dictionary;
查询数据字典中所有的表,视图,索引的个数
2,dictionary,保存其他数据字典的信息
User--->保存的是用户建立的数据库对象的信息
desc user_tables查询所有表,system建立的所有表
desc user_constraints查询所有约束,system用户建立的所有约束
desc user_cons_columns查询�