–oracle
–关系数据库中有三种方式:一对一,一对多, 多对多
–SQL语句分类:
–DQL(数据查询语言):select
–DML(数据操作语言):insert/update/delete/merge
–DDL(数据定义语言):create/alert/drop/truncate
–DCL(数据控制语言):grant/revoke
–约束:保持数据的完整性,数据的精确性和可靠性
–主键约束:primary key
–外键约束:foreign key
–非空约束:not null
–默认约束:default
–唯一约束:unique
–检查约束:check
–简单操作
–创建表
create table userinfo(
USERNAME varchar2(50) ,
PASSWORD number,
birth date);
–查询语句(以emp,dept为例)
select * from emp;–查询所有数据
select empno,ename,job from emp; –查询指定数据
select distinct mgr from emp;–去除重复数据
select sal as”工资” from emp;–给sal重命名(类别名添加双引号)
select * from emp where sal>2500;–带有限制条件where
select * from emp where hiredate>‘01-1月-1981‘;–1981年1月1日后的日期,注意时间的格式,默认格式‘01-1月-1981‘
–特殊比较运算符
select * from emp where sal between 2000 and 3000;–between…and …确定范围,两个值之间,包括比较值
select * from emp where sal in (3000,5000);–in确定集合(是3000和5000的sal)
select * from emp where ename like ‘_O%‘–like字符串匹配查询 _:代替一个字符 %:代替任意长度字符
select * from emp where ename like ‘_\O%‘ escape ‘\‘;–escape转义符“\”可以选择数据中含有_的数据
select * from emp where mgr is null; –is null(判断空值)
–逻辑运算符(and,or,not)
select * from emp where sal>=4200 and sal<=6000;–and
select * from emp where sal>4500 or hiredate>‘01-1月-1981‘;–a或b
–order…by…
select * from emp order by sal asc;–排序asc(升序,可不写),desc(降序)
–删除表
drop table userinfo;
–dual
select * from dual;
select * from userinfo;
–更新
update userinfo set username=‘hello‘ where username=‘haha‘;
–插入
insert into userinfo values(‘haha‘,‘haha123‘,‘123@qq.com‘);
insert into userinfo values(‘hehe‘,‘hehe111‘,‘111@qq.com‘);
insert into userinfo(username)select ename from emp;–将emp表中的ename放在userinfo中
–删除
delete userinfo where username=‘hello‘;
delete userinfo where password is null;
–多表连接
select * from emp e,dept d where e.deptno=d.deptno;–等值连接
–外连接–(+)放在没有与之相匹配的表的那一端
select ename,loc from emp e left outer join dept d on e.deptno=d.deptno;–左外连接
select e.* from emp e right outer join dept d on e.deptno=d.deptno where sal>2000;–右外连接
select * from emp e full outer join dept d on e.deptno=d.deptno;–全连接
–内连接(等值连接)
select ename,loc from emp e join dept d on e.deptno=d.deptno;
–自连接(查询员工姓名和所对应的经理的姓名)
select w.ename 员工姓名,m.ename 经理姓名 from emp w,emp m where w.mgr=m.empno;
–交叉连接(笛卡尔积)
select * from emp cross join dept;
select * from emp;
select * from dept;
–自然连接
select * from emp natural join dept;
–usering子句
select * from emp join dept using(deptno);
–on子句
select * from emp e join dept d on e.deptno=d.deptno;
–分组函数
–min max sum avg count
–group by … having …
–无关子查询:先执行子查询,再执行父查询
–相关子查询:先用父查询得到一行数据,利用其中的数据进行判断。
–查询入职最早的前5名员工姓名
select ename from emp e where (select count(*) from emp where hiredate<e.hiredate)<5;
–查询不是经理的员工姓名(is not null 有空值时使用)
select ename from emp where empno not in(select mgr from emp where mgr is not null);
–分页查询
select * from (select rownum r,e.* from emp e where rownum<=5)where r>0;
select * from (select rownum r,emp.* from emp)where r>0 and r<=5;
–关键字:select…from…where…group by…having…order by…
–优先级:from>where>group by>having>select>order by