SQL语句

/*
1.使用语句建表
2.表的修改与维护
3.非空约束,唯一约束,主键约束等
4.约束的维护
*/
–创建student表,包含字段 sno,sname,sex,age
create table student (
sno varchar2(20),
sname varchar2(10),
sex varchar2(2),
age number(3)
);
–修改表,新增列
alter table student add(tel number(11));
alter table student add(address varchar(50));
alter table student add(cno varchar(6));
–修改表,修改列
alter table stu modify(address varchar2(60),tel number(3));
alter table student modify(sex number(2));
alter table student modify(age number(2));
–修改表,删除列
alter table student drop(address,tel);
alter table student add(address varchar2(30),tel number(2));
–修改表名
rename student1 to stu;

create table student(
sno varchar2(6) not null,
sname varchar2(20)
);

–唯一約束
create table student(
sno varchar2(6) unique not null,
sname varchar2(10)
);
alter table student add(tel number(11) unique);
–給約束賦名
create table student(
sno varchar2(6) constraint uq_sno unique,
sname varchar2(10),
constraint uq_sname unique(sname)
);
alter table student add(tel number(11));
alter table student add(emil number(11) constraint uq_emil unique);
alter table student modify(tel constraint uq_tel unique);
–主键约束
create table student(
sno varchar2(20) constraint pk_sno primary key
);
create table student(
sno varchar2(10) constraint pk_sno primary key,
sname varchar2(10) constraint uq_sname unique
);
–外键约束
create table employee(
eno number(3),
ename varchar2(20),
dno number(10) constraint fk_deptno1 references dept(deptno)
);
–检查约束
create table student(
sno number(6),
sname varchar2(20),
age number(2) constraint ck_age1 check(age between 18 and 60)
);
– 创建雇员表,字段 姓名,编号,性别,电话,年龄,部门号
create table employee(
eno varchar2(6) constraint pk_eno2 primary key,
ename varchar2(10) not null,
sex varchar2(2),
tel number(11) constraint uq_number unique,
age number(2) constraint ck_age2 check(age between 18 and 65),
dno number(10) constraint fk_deptno2 references dept(deptno)
);
–维护约束
–修改约束名
alter table employee rename constraint fk_deptno2 to fk_dno1;
–禁止约束
alter table employee disable constraint ck_age2;
–激活约束
alter table employee enable constraint ck_age2;
–删除约束
alter table employee drop constraint fk_dno1;
/*
1.索引:单列索引,复合索引,维护索引,索引使用原则
2.插入、修改、删除语句
3.查询语句
/
–单列索引
create index idx_eno on employee(eno);
–复合索引
create index idx_eno_ename on employee(eno,ename);
–删除索引
drop index idx_eno;
–插入语句
insert into employee values(‘01’,‘张胜男’,‘女’,‘1111’,‘19’,‘001’);
insert into employee(eno,ename,age,dno) values(‘02’,‘张三’,‘22’,‘002’);
alter table employee modify(sex default ‘男’);
insert into employee(eno,ename,age,dno) values(‘04’,‘王五’,‘33’,‘002’);
–修改语句
update employee set age = 38 where eno = 01;
–删除语句
delete from employee where eno = 01;
–查询语句
–查询列
select * from emp;
–条件查询
select * from emp where 1=1 and deptno=10;
–算数运算符
select ename,sal
12 年薪 from emp;
–排序
select ename,sal from emp order by sal asc;–升序
select ename,sal from emp order by sal desc;–降序
select empno,ename,sal from emp order by sal desc,empno desc;–降序
–联合查询
select ename from employee union select ename from emp;
–模糊查询
select * from emp where ename like ‘A%’;
select * from emp where ename like ‘_A%’;
select * from emp where ename like ‘%A%’;
select * from emp where ename like ‘%N’;
select * from emp where ename like ‘A’;
–查询null值
select * from emp where comm is null;
select * from emp where comm is not null;

连接查询
1、内联接(典型的联接运算,使用像 = 或 <> 之类的比较运算符)。包括相等联接和自然联接。
内联接使用比较运算符根据每个表共有的列的值匹配两个表中的行。例如,检索 students和courses表中学生标识号相同的所有行。

2、外联接。外联接可以是左向外联接、右向外联接或完整外部联接。
在 FROM子句中指定外联接时,可以由下列几组关键字中的一组指定:

1)LEFT JOIN或LEFT OUTER JOIN
左向外联接的结果集包括 LEFT OUTER子句中指定的左表的所有行,而不仅仅是联接列所匹配的行。如果左表的某行在右表中没有匹配行,则在相关联的结果集行中右表的所有选择列表列均为空值。

2)RIGHT JOIN 或 RIGHT OUTER JOIN
右向外联接是左向外联接的反向联接。将返回右表的所有行。如果右表的某行在左表中没有匹配行,则将为左表返回空值。
3)FULL JOIN 或 FULL OUTER JOIN
完整外部联接返回左表和右表中的所有行。当某行在另一个表中没有匹配行时,则另一个表的选择列表列包含空值。如果表之间有匹配行,则整个结果集行包含基表的数据值。

3、交叉联接
交叉联接返回左表中的所有行,左表中的每一行与右表中的所有行组合。交叉联接也称作笛卡尔积。

FROM 子句中的表或视图可通过内联接或完整外部联接按任意顺序指定;但是,用左或右向外联接指定表或视图时,表或视图的顺序很重要。有关使用左或右向外联接排列表的更多信息,请参见使用外联接。

例子:


  a表         id      name      b表     id        job       parent_id   
              1      张三               1          23        1   
              2      李四               2          34        2   
              3      王武               3          34        4       
              
    a.id 同 parent_id   存在关系   


1) 内连接

  select a.*,b.*  from a inner join b on a.id=b.parent_id       
  结果是     
  1   张三                    1     23     1   
  2   李四                    2     34     2   

2)左连接

  select a.*,b.* from a left join b on a.id=b.parent_id       
  结果是     
  1   张三                  1     23     1   
  2   李四                  2     34     2   
  3   王武                  null   

3) 右连接

  select a.*,b.* from a right join b on a.id=b.parent_id       
  结果是     
  1   张三                   1     23     1   
  2   李四                   2     34     2   
  null                      3     34     4   

4) 完全连接

  select   a.*,b.*   from   a   full   join   b     on   a.id=b.parent_id   

  结果是     
  1   张三                 1     23     1   
  2   李四                 2     34     2   
  null                   3     34     4   
  3   王武                 null
 

/*
视图
/
–简单视图,可进行增删改查,并且修改表可影响视图,修改视图可以影响表
drop view vw_emp1;
create view vw_emp as select empno,ename,sal,deptno from emp;
insert into vw_emp values (‘0099’,‘11’,‘6000’,‘40’);
–复杂视图,可以进行查询,不可以进行增删改等操作
create view vw_emp1(dno,avgsal,cntemp)
as select deptno,avg(sal),count(
) from emp group by deptno;
–连接视图,可以进行查询,不可以进行插入,在条件运行的情况下,可以进行修改和删除
create view vw_emp
–只读视图
create view vw_emp11
as select empno,ename,sal,deptno from emp
with read only;
insert into vw_emp11 values(‘1’,‘asd’,‘1’,‘10’);
–check检查视图
create view vw_sc
as select sno,cno,grade from sc where grade > 60
with check option constraint ck_grade;

/*
查询语句顺序
select 字段 from 表A
inner join 表B on A.xx = B.xx
inner join 表C on A.xx = C.xx
where 过滤条件
group by 字段
having count/max/min/avg/sum
order by 字段 asc/desc
*/

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值