数据库基本操作
1. (1)登陆数据库服务器
Sqlplus
Sqlplus 用户/口令
(2)退出数据库服务器
Quit 或者 exit
(3)命令缓冲操作
clear 清空缓冲
list 显示缓冲
change 修改缓冲
get 加载文件到缓冲
save 保存输出到文件
append 追加数据到缓冲
input 输入数据到缓冲
run / 执行缓冲中的当前语句
edit 编辑缓冲
start @ 执行文件中的语句
del 删除缓冲的当前语句
(4)比较操作符
<> 不等于
Select * from emp where salary <>2000;
选出薪水不等于2000元的所有员工信息.
Is null 如果操作数为NULL返回真
Select * from emp where commission is null
选出没有提成的所有员工的信息
Is not null 如果操作数为TRUE返回真
Select * from emp where commission is not null
选出提成不为0的所有员工的信息.
like 比较字符串值
Select * from emp where first_name like ‘_a%’
选出第一个名字中第二个字母是a的所有员工的信息.
Between and 验证值是否在范围之内
Select * from emp where salary between 1500 and 2500;
选出薪水在1500-2500之间所有员工的信息.
in 验证操作数在设定的一系列值中
Select * from emp where deptid in(32,42,35);
选出工作部门在32,42,35中所有员工的信息.
Not in 验证操作数不在设定的一系列值中
Select * from emp where deptid not in(32,42,35);
选出工作部门不在32,42,35中所有员工的信息.
(5)逻辑操作符
and 两个条件都必须满足
select * from emp
where salary >1000
and dept_id in(32,43,35)
选出工资大于1000元,部门号在32,43,35中所有员工的信息
or 只要满足两个条件中的一个
select * from emp
where salary >1000
or dept_id in(32,43,35)
选出工资大于1000元或者部门号在32,43,35中所有员工的信息
not 取反
in 和 not in在与不在...这样的
2. SELECT语句
(1)Select {*, column[alias], …}//需要列出的元素,像名字,部门
From table //从哪一张表里选取,像s_emp
[where …]
[group by …]
[having …]
[order by …]
首先执行where语句将原有
记录
混凝土 养护记录下载土方回填监理旁站记录免费下载集备记录下载集备记录下载集备记录下载
过滤;
第二执行group by 进行分组;
第三执行having过滤分组;
然后将select 中的字段值选出来;
最后执行order by 进行排序;
(2)Dual表
dual表是系统提供的一张虚表,这张表中只有一条记录,查询此表 时也只会返回一条记录
如果我们需要测试某个表达式或函数,测试的结果又与具体的表无关就可以使用dual这张表。
sysdate在oracle中用来表示当前的系统时间.
(3)消除重复的值
用distinct关键字来消除结果集中的重复信息
当distinct用来修饰多个字段的时候,指的是需要消除后面所有字段的组合重复结果
(4)where
Where中条件比较,逻辑操作的判断.Where是用来筛选记录的
判断字符串是否相等时需要将字符串用单引号引起来.并且字符串的内容要
区分大小写.
员工信息表:
select 部门编号,姓名 from 员工信息表
where 工资>=2000 //判断条件工资大于等于2000的
部门编号 姓名
1 aa
1 cc
1 ee
3 ff
2 gg
3 hh
(5)group by
按组分类.
select 部门编号,count(*) from 员工信息表
where 工资>=2000
group by 部门编号 //按部门编号排
部门编号 姓名
1 aa
1 cc
1 ee
3 ff
3 hh
2 gg
(6)having
Having跟where一样也是一个筛选条件,过滤掉不符合条件的分组.但它的优先执行级没有where高,是where的一个补充.有having 就一定有group by.但有group by 不一定有having.
select 部门编号,count(*) from 员工信息表
where 工资>=2000
group by 部门编号
having count(*)>1 //部门里统计人数是两人以上的
部门编号 姓名
1 aa
1 cc
1 ee
3 ff
3 hh
(7)order by
排序 acs 默入的是从低到高
Decs 是从高到低排序
select 部门编号,count(*) from 员工信息表
where 工资>=2000
group by 部门编号
having count(*)>1
order by decs
3.一些常用的函数
lower 小写
SELECT * FROM 员工信息表
WHERE LOWER(姓名) = 'aa'
作用:将大写的字母变成小写的.
upper 大写
作用:用法与上相反.
concat 连接两个字符串(||)
select concat('man','jia') from dual
作用:将两个字符串连接起来.
如果要将三个字符串连起来的话.
SELECT 'man' || 'jia' || 'hua' FROM DUAL
可以用||也可以多用几个concat.
length 字符串长度
select 部门编号,count(*) from 员工信息表where length(姓名) = 2
作用:找出姓名中长度为两个字符的信息.
substr 提取字符串的一部分substr(ename,1,2)
substr('This is a test', 6, 2) 返回的结果是is
作用:从第六个字符开如读取两个字符.
Chr与某个ASCII码数值所对应的字符
select chr(65) from dual 返回一个字符A
作用:chr()函数将ASCII码转换为字符:字符 –》 ASCII码;
Ascii求一个字符的ASCII码数值
select ascii(‘A’) from dual 返回65
作用:ascii()函数将字符转换为ASCII码:ASCII码 –》 字符;
round(number,n) 指定四舍五入到小数点后第几位,也可以用负数指定小数点前面第几位
select round(123.456, 0) from dual; 返回 123
select round(123.456, 1) from dual; 返回 123.5
to_char 转换成字符
select to_char(sysdate,'yyyy-MM-dd HH24:mi:ss') from dual
作用:将系统时间转化成字符
to_number 转换成数字
select to_number(replace('10.20.30.40','.',''),'99999999') from dual
返回:10203040
Replace的作用:将’.’用空格代替.
to_date 转换成日期
select to_date('2005-01-01 13:14:20','yyyy-mm-dd hh24:mm:ss') from dual
作用:将字符串转换成日期
nvl 用来处理空值,这个函数有两个参数,第一个参数为字段名或表达式,如果这个参数的值为null,那么就返回第二个参数的值,否则返回第一个参数的值.
Select nvl(姓名,’boss ’)from 员工信息表.
作用:打印出员工信息表的姓名,如果没有姓名的则给他加上boss;
Avg 求平均
Select avg(salary) from 员工信息表;
作用:求出平均工资
Count 统计个数
Select count(姓名) from 员工信息表
作用:统计员工人数
Max 最大值
Select max(salary) from 员工信息表
作用:求出工资最高的员工
Min 最小值
Select min(salary) from 员工信息表
作用:求出工资最低的员工
Sum 求和
Select sum(salary) from 员工信息表
作用:求出工资的总和
四.多表查询
格式
pdf格式笔记格式下载页码格式下载公文格式下载简报格式下载
:Select table1.column,table2.column from table1,table2
Where table1.column=table2.column
连接:
Inner join 内连接
select * from A,B where A.field1=B.field2
这样的连接就是内连接,内连接查询只能查询出匹配的记录,匹配不上的记录时无法查询出来的
外链接分为:
Left join 左外连接
Right join 右外连接
部门表 dept
Deptid deptname
1 开发部
2 财务部
3 人事部
职工表 employee
Eid deptid ename