使用的是Oracle 11g
之前其实已经弄过几下,不过没有太多学习,现在开始重新好好的学习一下,包括SQL语句等。
先从安装后开始,
我安装了客户端sqldeveloper,但是进入后需要连接,这我都忘了怎么弄了,开始查看资料。
点了新建连接后,弹出一个对话窗口,连接名我用的是sys,用户名也用的是sys,口令就是在安装数据库
的时候写的密码,然后在下面“角色”这改成了SYSDBA,下面“SID”填写的是orcl
这样就以数据库管理员身份登录了。
因为我安装完数据库的时候没有解锁其它的用户,就像练习用的scott,这时候可以在这里去解锁了。
在下面找到其他用户,找到scott,右击选择“编辑用户”,把那几个勾去掉,然后设个新密码,这样就OK了,
再去新建个连接,用scott来登录,SID还是orcl这个是在安装的时候确定的应该。
下面开始使用SQL*plus来学习SQL命令:
sql*plus可以在开始菜单中找到,也可以在命令行直接输入sqlplus来使用
select * from emp; 别忘了后面的分号,这个就列出了表emp中所有数据
select job from emp; 这是取出表emp中job列所有数据
select distinct job from emp; 这就取出表emp中job列不同的数据,也就是相同的数据只留一个
select * from emp where sal > 2000; 这就是添加了条件,只显示sal大于2000的人员信息
select ename from emp where sal > 2000; 这就是只显示sal大于2000的人名
select ename from emp where sal > 3000 or (sal > 1000 and sal < 2000); 这是多个条件一起
select * from emp where job in 'CLERK'; 这是列出job是CLERK的人员信息
select * from emp where job in ('CLERK','ANALYST'); 这是列出job是CLERK和ANALYST的人员信息
select * from emp where hiredate between '20-2月-81' and '03-12月-81'; 这是列出日期在这个范围的人员
select distinct job from emp where job like '%AN%'; 这是列出job名带AN的job
select sal from emp order by sal asc; 这是从小到大排列sal
select sal, hiredate from emp order by sal asc, hiredate desc; 这是按sal排,如果相同再按hiredate从大到小排
select ename,job,sal from emp where sal > 2000 order by sal asc; 现在加上where条件
下面是函数的练习了:
AVG (平均)
COUNT (计数)
MAX (最大值)
MIN (最小值)
SUM (总合)
14. 现在求所有sal的和
select sum(sal) from emp;
15. 求有多少个人
select count(ename) from emp;
16. 求有多少种job,这就要去掉重复的job项
select count(distinct job) from emp;
17. 多少人有comm奖金
select count(ename) from emp where comm is not null;
18. 按岗位来求sal和
select job,sum(sal) from emp group by job;
19. 给函数设定条件用having,岗位sal和大于5000的岗位
select job,sum(sal) from emp group by job having sum(sal) > 5000;
20. 起别名,先给sum(sal)起名为SUM,别名的本身名中间一个空格
select sum(sal) "SUM" from emp;
21.给表也起个别名
select t.job "JOBS", sum(sal) "SUM" from emp t group by job;
下面是”表格链接“
用emp和dept这两个表来练习,这其实我有点糊涂
22. 显示每个地区的sal和,这显示结果中少了BOSTON是因为在emp中没有40这个deptno,这是内部链接
select t1.loc "LOCALADDR", sum(t2.sal) "SALS" from dept t1, emp t2 where t1.deptno=t2.deptno group by t1.loc;
23. 现在让把BOSTON也显示出来,也就是外部链接,就在上面的改动一下就可以了
select t1.loc "LOCALADDR", sum(t2.sal) "SALS" from dept t1, emp t2 where t1.deptno=t2.deptno(+) group by t1.loc;
24. 把不同栏的内容连在一起,在Oracle中可以用concat也可以用||,不过concat最多两个元素,||可以多个
select concat(dname, loc) from dept;
select dname || loc "newname" from dept; 这里还用了别名,如果写成newname是会给自动变成大写的,加上“”就不会了
上面的结果中间没有东西分隔,如果要加上个分隔符,比如中间加上一个‘-’
select dname || '-' || loc from dept;
25. 取某个栏信息的一段字符串,substr
select substr(dname,3) from dept; dname下的字符串从第三个字母开始到最后
select substr(dname,3,2) from dept; dname下的字符串从第三个字母开始取两个字符
26. 去掉开头或结尾的某个字符,一般就是空格。我先用sqldeveloper客户端修改了一下emp表中JOB列的第一个,前面加了一个空格,然后使用下面命令显示
select job from emp;
select ltrim(job) from emp;
看看有什么不同。删除左侧的用ltrim,删除右侧的用rtrim