--建表
-- 关键字 : create
-- 用法 :
/*
create table table_name
(
lie1_name 数据类型 是否为空,
lie2_name 数据类型 是否为空,
lie3_name 数据类型 是否为空,
……………………………………
);
*/
create table infos
(
stuid varchar2(7) not null ,
stuname varchar2(10) not null ,
gender varchar2(2) not null ,
age number(2) not null ,
seat number(2) not null ,
enrolldate date ,
studress varchar2(50) ,
classno varchar2(4) not null
) ;
-- 添加约束
--添加主键
alter table infos add constraint pk_infos primary key(stuid) ;
--check 约束
-- 性别只能是男或女
--作用: 条件限制
alter table infos add constraint ck_infos_gendertest check(gender='男' or gender='女') ;
--唯一约束
--作用:使该列内容不重复
alter table infos add constraint un_stuname unique(stuname) ;
--日期格式转换
select to_char(sbirthday , 'yyyy-mm-dd hh24:mi:ss') from student ;
--查询系统时间
select sysdate from dual ;
-- dual 伪列 ,只有一行一列数据
--绝对值函数
--abs() 括号内是数值型或可以隐形转换成数值型
select abs(122),abs(-123),abs(0) from dual ;
--数据添加
-- insert into 表名 valus
insert into student(sno,sname,ssex) values ('','小明','男') ;
--添加日期
--需要类型转换 to_date
insert into student values(to_date('1990/2/3','yyyy/mm/dd')) ;
--提交事务
commit ;
--回滚事务
rollback ;
--数据的复制
-- insert into 新的表名 select * from 要复制的表名 ;
--查询数据去除重复
--distinct
--select distinct 列名 from 表名 ;
-- * 代表所有字段信息
-- != 或 <> 表示不等于
--|| 表示拼接
--修改表
--update 表名 set 条件或添加内容
update student set sclass = '' where sname='小明' ;
update student set sclass = '' where sclass is null ;
--删除表
--delete
delete student where sname = '小明' ;
--快速清空一个表
--truncate
--truncate table 表名 ;
--排序
--order by asc/desc 正序/倒序
--放于where条件后
--分组
--group by 列名
--查询位于两个数值之间的记录
--两种方法
select degree from score where degree >70 and degree < 85 ;
--between 后面必须是小的数值
select degree from score where degree between 70 and 85 ;
--查询 位于66,77,88 中的成绩
select degree from score where degree=66 or degree=77 or degree=88 ;
select degree from score where degree in (66,77,88) ;
/*
排序用法 order by
asc 正序,默认 ,可不加
desc 降序 ;
语法: order by 字段名1 asc/desc ,字段名2 asc/desc ...
字段在前的优先级高, 先按字段1排序,再按字段2排序
有条件限制语句的话,放在where语句后面
*/
-- 去除查询数据中的重复记录
--distinct
--用法
--select distinct lie_name from biao_name ;
--实例
select distinct depart from teacher ;
-- 查询两个数据之间
-- 比较运算 例:
select * from score where degree > 60 and degree < 80 ;
-- 关键字:between 小值 and 大值 。 例:
select * from score where degree between 60 and 80 ;
-- 内置函数
-- 聚合函数 返回单个值
--- 记录条数(列名内容不为空,一般统计主键列)
select count(*) from student where sclass = '';
-- 成绩求和
select sum(degree) 总成绩 from score ;
-- 平均成绩
select avg(degree) 平均值 from score ;
-- 最高分
select max(degree) 最高分 from score ;
-- 最低分
select min(degree) 最低分 from score ;
-- 伪列
-- rownum 内置列
select * from score where rownum = 1 ;
--查询每门课的平均成绩大于80的
-- 先cno 分组,在 内置函数
select cno , avg(degree),count(cno) from score group by cno having avg(degree) > 80 ;
select * from (select cno , avg(degree) a,count(cno) from score group by cno ) where a> 80 ;
--纵向查询
--两个表之间查询的列数要相同,对应列数的数据类型要相同
select sname,ssex,sbirthday from student
union
select tname,tsex,tbirthday from teacher ;
--模糊查询
--查询姓王的学生信息
select * from student where sname like '王%' ;
--% 代表任意个数的字符
-- 一个下划线代表一个字符 _
-- 内置函数
--下限值
select floor(123.12) from dual ;
--上限值
select ceil(123.12) from dual ;
--四舍五入
select round(123.89) from dual ;
--保留位数四舍五入
select round(125.456,2)from dual ;
--直接舍掉
--作用: 格式化数据,统一格式
select trunc(123.456) from dual ;
--并不会四舍五入
select trunc(123.456,2) from dual ;
--绝对值
select ABS(-23) from dual ;
--求余数 ,求模
select mod(78,69) from dual ;
--计算字符串长度
select tname,length(tname) from teacher ;
--去空格
--去前后空格
select trim(' a b cf ') from dual ;
--去前空格 ltrim
select ltrim(' sdf ') from dual ;
--去后空格 rtrim
select rtrim(' sdf ') from dual ;
--查找替换
select replace(' s df g ',' ') from dual ;
select sname,replace(sname,'王','李') from student ;
--查找字符串(空格也算一个),从1开始,找不到返回0
select instr('sd wef','w') from dual ;
--截取字符串
--3 第几位开始截取
--5 截取长度
select substr('sdfga fgh',3,5) from dual ;
select sname,substr(sname,1,1) || '同学' from student ;
--null值处理
select nvl(degree,0) from score ;
select nvl2(degree,55,0) from score ;
select t.*,decode(ssex,'男','','女','') from student t ;
--返回当前用户登录名
select user from dual ;
---取得序列的当前值
select sq_test.nextval from dual ;
select sq_test.currval from dual ;
insert into weadafa values(sq_test.nextval,'王五') ;
commit ;
select * from weadafa ;
--视图
create or replace view v_score as
select t.*,s.sname,c.cname
from score t,student s,course c where t.sno=s.sno and t.cno=c.cno ;