数据库介绍2

1、数据操纵语言DML
实现对表内容(数据)的操作
insert/update/delete语句进行操作,需要进行commit
语句才能确认提交。
注意:sqplus默认是自动提交,若不是自动提交那么
要手动提交(使用commit语句)
1)插入数据insert
写法一:插入全部字段
insert into table_name values(值1,值2...);


写法二:插入指定字段
insert into table_name(column_name1,column_name2)
values(值1,值2);
注意:
a.使用写法一时,需要插入全部字段,字段值不能多也
不能少
b.字段值是字符时候需要使用单引号
c.字段值是日期类型,需要考虑当前的会话日期格式


演示日期数据插入:
create table temp(
birth date
);
//插入数据
insert into temp values('17-5月-18');


alter session set nls_date_format='yyyy-mm-dd';
insert into temp(birth) values('2018-05-16');


//查询temp表数据
select sysdate from dual;
select birth from temp;


未选定行:表示查询不到任何一条记录


//往部门表插入数据
insert into dept_xu values(10,'研发部','南京');
insert into dept_xu values(20,'财务部','苏州');
insert into dept_xu values(30,'销售部','合肥');
insert into dept_xu(deptno,dname,location) 
values(40,'行政部','上海');


commit;
//查看表
select deptno,dname,location from dept_xu;


//创建员工表(emp_xu)
create table emp_xu(
empno number(4),
ename varchar2(10),
position varchar2(20),
salary number(7,2),
bonus number(5,2),
hiredate date,
leader number(4),
deptno number(2)
);
//查看
select empno,ename from emp_xu;


2)更新数据update
写法:
update table_name set column_name1=值1,
column_name2=值2 where condition;//多列修改逗号隔开
注意:如果没有where语句(条件),则表示表中的字段
全部被修改成相同的值。


//更新部门表中40号部门的部门地点改为'无锡'
update dept_xu set location='无锡' where 
deptno=40;


commit;//手动提交


3)删除数据delete
写法:
delete [from] table_name [where condition];//[]可选项
注意:如果没有where语句,则表示表的数据全部被删除


//删除部门表中50号部门的数据
insert into dept_xu(deptno,dname) 
values(50,'后勤部');//指定字段


delete from dept_xu where deptno=50;
commit;


删除相关:
DDL:
   drop table table_name;//删除表内容和结构
   truncate table table_name;//删除表内容保留结构
   
DML:
   delete from table_name;//删除表内容保留结构  


truncate和delete区别:
a.delete是属于数据操纵语言DML,truncate属于数据
定义语言DDL
b.delete可以有条件删除,truncate则表示全部删除
c.delete可以回退(撤销),truncate立即生效不可以
回退
d.如果删除全部数据并且数据量比较大,delete语句
的执行效率比truncate效率低。


2、基础查询
1)简单查询表数据
select sysdate from dual;
select deptno,dname,location from dept_xu;
select empno,ename from emp_xu;


select * from emp_xu;//星号表示查询表的全部列
//设置换行字符
set linesize 100


//查询1005的员工信息
查询哪个表->判断是否有条件->补全结果集
select *
from emp_xu
where empno=1005;


2)列别名
计算员工的月薪和年薪(salary*12)
select ename,salary,salary*12 [as] year_salary
from emp_xu;//as表示可选项,可以不加的


3)空值问题
空值使用NULL表示的
结论要注意:
a.任何数据类型都可以取空值null(插入数据)
insert into dept_xu(deptno,dname) 
values(50,'后勤部');
insert into dept_xu values(50,'后勤部',null);


b.空值和任何数据类型进行算术运算时结果都是
空值null
//计算员工的月薪(salary+bonus)
select ename,salary,bonus,salary+bonus month_sal
from emp_xu;//错误结果


c.空值和字符串类型做连接操作,结果相当于空值不
存在


4)空值处理函数
语法:nvl(d1,d2)
如果d1为空值时,则用d2来代替,否则就用d1的值
注意:nvl函数的两个参数可以是数值、字符、日期,
但是两个参数的数据类型必须一致


修改:
select ename,salary,bonus,
salary+nvl(bonus,0) month_sal
from emp_xu;


insert into emp_xu(empno,ename) 
values(1013,'欧阳锋');


//查询员工的姓名和职位,如果没有职位则显示
'No Position'
select ename,
nvl(position,'No Position') as position
from emp_xu;


//查询员工的入职时间,没有入职时间显示当前时间
select ename,nvl(hiredate,sysdate) hiredate
from emp_xu;


select ename,nvl(hiredate,'17-5月-18') hiredate
from emp_xu;


5)插入一条记录
insert into emp_xu(empno,ename) 
values(1013,'欧阳锋');//指定字段


insert into emp_xu
values(1013,'欧阳锋',null,null,null,null,null,null);//
全部字段,如果最后一个null缺省,会报错的,null
和什么都不写是不同的


6)连接符
连接符操作使用||
'||'符号表示将两个数据连接起来,类似于java中
两个字符串的'+'号。其中一个数据为null时,相当于
不连接任何数据。


//查询员工的姓名和职位进行连接操作
select empno,ename || ' is ' || nvl(position,'No Position') 
from emp_xu;


7)复制表
select * from emp_xu;
create table temp_emp as select * from emp_xu;
select * from temp_emp;


8)去掉重复数据
去重使用distinct
注意:distinct表示去重必须只能跟在select后面


//查询有哪些职位
select position from emp_xu;//数据有重复,职位
为空也算一个职位


select distinct position from emp_xu;//没有职位
算一种职位


//查询有哪些部门
select distinct deptno from dept_xu;//存在一个
部门没有员工情况,为了数据准确该使用部门表


//查询每个部门不重复的职位(不同部门可以有相同职位)
select distinct deptno,position from emp_xu;//
需要多两个字段进行联合去重,distinct指全部列的
唯一组合


9)大小写问题
SQL语句大小写不敏感(不区分),数据(单引号里面的)
大小写敏感(区分)


//查询职位是'Analyst'的员工信息
select *
from emp_xu
where position='Analyst';//查询出3条记录


select *
from emp_xu
where position='analyst';//未选定行,数据区分大小写的


SELECT *
from emp_xu
where position='Analyst';//sql语句不区分大小写


lower():将字符数据转换成小写
upper():将字符数据转换成大写
select lower('AB') from dual;


select *
from emp_xu
where lower(position)='analyst';


10)介于两者之间
between 低值 and 高值
注意:临界值
闭区间:[低值,高值]


//查询薪水大于等于5000并且小于等于10000的员工信息
select ename,salary
from emp_xu
where salary>=5000 and salary<=10000;


等同于:
select ename,salary
from emp_xu
where salary between 5000 and 10000;


11)IN关键字使用
//查询职位是'Manager'或者'Analyst'的员工信息
select ename,position
from emp_xu
where position='Manager' or position='Analyst';


等同于:
select ename,position
from emp_xu
where position in('Manager','Analyst');//in表示
判断在不在列表项中,只要满足一个即可


12)模糊查询
模糊查询使用like,"%"表示0到多个字符,"_"表示1个
字符


//查询员工姓名包含'张'字的员工信息
select ename from emp_xu
where ename like '%张%';


//查询职位中第二个字符是'a'的员工姓名和职位
select ename,position
from emp_xu
where lower(position) like '_a%';


//查询当前用户下有哪些表的表名是以'EMP_'开头的
select table_name from user_tables
where upper(table_name) like 'EMP\_%' escape '\';


注意:
如果查询的数据中包含特殊的字符%、_,在模糊匹配
时需要加上'\'进行转义,并且用escape来指明转义
的字符。

猜你喜欢

转载自blog.csdn.net/little_____white/article/details/81052407