oracle基础数据查询,Oracle 10g数据库基础之基本查询语句-上

Oracle 10g数据库基础之基本查询语句-上

--资料参考:张烈 张建中《数据库管理员培训讲义》

书写SQL语句的原则

大小写不敏感,但单引和双引内的大小写是敏感的。切记!

关键字不能缩写

可以分行书写,但关键字不能被跨行书写,单引内也不要跨行书写。

一般每个子句是一行

可以排版来增加可读性

字符串用单引

列的别名用双引

Select语句的作用

查询指定的行

查询指定的列

多张表联合查询

Select语句可以查询指定的行,指定的列,也可以多张表联合查询来获得数据。上面的三句话,开宗明义的定义了SQL的基本功能,书写高效的SQL语句是我们永恒的追求,不管你是程序员还是数据库管理员。Select既是入门所必备,又是数据库之颠峰。

简易语法

SELECT *|{[DISTINCT] column|expression [alias],...} FROM table;

大写的为关键字

小写的为我们指定的名称

SELECT子句指定你所关心的列

FROM子句指定你所要查询的表

之所以称之为简易语法,因为完全的SELECT语法很长,涉及到很多的逻辑关系,我们由浅入深。虽然

不能大成,但小成总会有的。

一般我们将select叫做select子句,from叫做from子句。

实验1:书写一个最简单的sql语句,查询一张表的所有行和所有列

该实验的目的是初步认识sql语句,执行一个最简单的查询.

使用scott在PL/ SQL.Developer.7工具上登录

e1b9038c684007f0ad739f19f0b9eaac.png

查看当前用户的所有的表.

f4a766f50d718cc55c9bfeeba2024183.png

查看emp表的所有信息.

72ef74039e387b4d00275d15d8b592ed.png

查询emp表的所有行,所有列。对于小的表我们可以这样书写,对于大的表我们一般查询指定条件的行和选定的列。Emp表在scott用户下.scott用户是一个练习帐号,密码是tiger,如果你没有这个帐号可以随时建立,练习完了可以随时删除.招之既来,挥之既去.

锁定解锁scott账户:

fd12b0a61ddaa9d1b134d1cbcad136c9.png

切换账号

bb356dfa6c80d206195ac347bc07039d.png

实验2:查询一张表的所有行,但列的顺序我们自己决定

该实验的目的是练习查询指定的列.

列的名称之间要使用逗号间隔,列的顺序由我们来指定.

Select ename,sal from emp;这里我们指定表中的两个列。其它的列我们不看。

5d1cfe42de91347de1f13c282f6242d9.png

实验3:查询表的某些列,在列上使用表达式

该实验的目的是使用表达式,对表的部分列进行运算.

Select ename,sal,sal+300 from emp;

其中sal+300是表达式,它并不存在于数据库中,是计算出来的结果。也可以使用函数.

631aab8dabff41afd24a56bab6685127.png

表达式的运算是有优先级的,和程序中的一样,先乘除后加减,括号强制优先级.

+ - * /先乘除,后加减,括号强制优先级

e862ff875b489d563206cf1a2247ab23.png

个人一年总工资,年终奖为300元。

636965cfed81d761db65140b65353941.png

个人一年总工资,每个月奖金为300元。

实验4:使用sqlplus,进入sqlplus并进行简单的操作

登录:

建立会话,和数据库发生连接

Sql>connect scott/tiger

连接到SCOTT用户,密码为tiger

如果不写密码,你回车后会提示你输入密码。

Sql>Help index会列出sqlplus命令的帮助.

SQL> help index

进一步的帮助

SQL> help LIST

779a74ecd1be6d293fe9f7998c54e104.png

显示SQLPLUS命令的帮助,而不是SQL语法的帮助,它是查询的数据库内的一张表,所以你要得到帮助需要两个条件,一、数据库是打开的。二、存在HELP表

Sql>show all

显示当前SQLPLUS的环境设置

Sql>show user

显示当前所登录的用户信息

实验5:查看当前用户的所有表和视图

该实验的目的是查看简单的数据字典,熟悉实验环境.

1adb4cda3dc0bb29e2d14d9021c496c2.png

显示当前用户所拥有的表和视图。其中tab是数据字典,你在每个用户下查看都看到是当前用户的表和视图,这是最基本的字典,我们一定要知道当前用户下的表和视图。

61d3fbe1c77c23d2da1a8321345e1527.png

显示DEPT表的所有行和所有列,*代表所有的列。

92e011e39e7f2116c2e7096c93fe7c39.png

查看表结构

对这两张表大家一定要熟悉,因为我们所有的例题都是以这两个表为基础

Sql>list

查看当前缓冲区内的语句。

简写为l

Sql>help list—可以查看缩写

修改scott的密码

14f987c2795865e5756bdc082fd22a46.png

实验6:关于null值的问题

该实验的目的是练习数据库的一个重要值null的使用.

 Null值

91d4d7379f0fd4b9ee0d093e40de9441.png

其中comm列中有一些行没有值,是空值(null)。

Null值不等于0,也不等于空格。

Null值是未赋值的值,不入索引。

NULL是双刃剑,使用好了提高性能,你对它不了解,往往是错误的根源,切记!

实验7:在列上起一个别名

该实验的目的是了解使用别名的目的和别名的使用方法.

别名的使用原则:

1。区分同名列的名称

2。非法的表达式合法化

3。按照你的意愿显示列的名称

4。特殊的别名要双引

5。直接写列的后面

6。使用as增加可读性

SQL> Select sal as salary,hiredate上班日期,sal*12年工资from emp;

8acd3e61ab43665728f9110a2315c752.png

实验8:在显示的时候去掉重复的行

该实验的目的是使用distinct关键字,去掉重复的行.

SELECT语句显示重复的行。用DISTINCT语法来去掉重复的行。

SQL> select deptno from emp;

c153d35713602a99e8bb4544b2848df2.png

我们会看到很多重复的行,如果我们想去掉重复的行,我们需要distinct关键字。

SQL> select distinct deptno from emp;

31eff619613cf1a184e12fce9cdd228a.png

在ORACLE数据库的10G前版本,该语句需要排序才能去掉重复的行,而在10G中数据库并不需要排序,而是使用HASH算法来去掉重复的行,由于避免了排序,从而极大的提高了SQL语句的效率,因为10G的SQL内核改写了。效率更加的高。因为没有排序,所以输出也是无序的。

Where和order by 子句

语法

SELECT *|{[DISTINCT] column|expression [alias],...}

FROM table

[WHERE condition(s)]

[order by column|expression| alias ];

Where一定要放在FROM子句的后面。

符合条件的行会被筛选出来。

Order by放在最后,用来排序显示结果

实验9:显示表的部分行和部分列,使用where子句过滤出想要的行

该实验的目的是使用where子句.

SQL> select deptno部门编号,ename姓名from emp where deptno=10;

42b283286abb44d5e7630d3d39395939.png

只显示10号部门的员工名称。

SQL> select * from emp where ename='KING';

1fa0a5d1944d0d7d030b14a639ed5435.png

显示KING员工的详细信息。

字符串要单引,字符串大小写敏感,日期格式敏感,牢记在心。

关系运算:

=

<>,!=,^=

>=

<=

>

<

Between…and……

SQL> Select ename,sal from emp Where sal between 1000 and 2500;

d2621144d5527fc771fc306ddd515f94.png

Between:含上下界

in操作,穷举,据说穷举不能超过1000个值,我没有去验证。一般我们也不会穷举到1000个值,如果到1000请改写你的SQL。

>select deptno部门编号,ename姓名,sal工资from emp where deptno in(10,20);

699c7f7c6ab6ebb26c91f4c57aae4e47.png

查询NULL值

未知不等于未知,无穷不等于无穷.

52e4062419834b7ebcbc53d435368503.png

And运算,两个条件的交集,必须同时满足。

ff0bcf995082d7b66bcb1054045c7bfa.png

OR运算,两个条件的并集,满足一个就可以。

6e6275923c9ddca640f0ed8d688786fb.png

not运算,补集,不是J打头的员工。

7ec2db27bce5640d377b11716886e55e.png

优先级

1。算术运算

2。连接运算

3。关系运算

4。IS [NOT] NULL, LIKE, [NOT] IN

5。Between

6.not

7.and

8.or

括号强制优先级

实验10:使用like查询近似的值

该实验的目的是掌握like的通配符.还有逻辑运算.

Like运算

_通配一个,仅匹配一个字符,

%通配没有或多个字符

SQL> select deptno部门编号,ename姓名from emp where ename like 'J%';

3243ca5d52e85116fa7b927e306bfd79.png

首字母为J的员工,J后有没有字符,有多少字符都不管。

SQL> select deptno部门编号,ename姓名from emp where ename like '_A%';

068fe01181927b56e3201aa380366288.png

寻找第二个字母为A的员工,第一个字母必须有,是什么无所谓。

当你想查询_,%特殊字符时,请用escape.

Select ename from emp where ename like ‘%s_%’ escape ‘s ’;

我们并不想查找S后必须有一个字符以上的员工,而是要剔除S,S出现的目的就是转义,将_转义了,这里的_不是通配符,而是实际意义的_。

Select ename from emp where ename like ‘%/_%’ escape ‘/’;

一般我们使用/来转义,以免产生歧异。

实验11:使用order by子句来进行排序操作

该实验的目的是掌握排序操作.

Order by子句

不指明都是二进制排序,如果你想按照拼音,部首,笔画,法语等特殊的排序模式,请设定排序的环境变量。

默认是升序asc

降序要指定desc

d8e58862eacdc319cb1eacc009f34367.png

默认排序的类型就是升序。

21ef4e0916b82a5271405c7d9ece6042.png

降序要明确的指出。

隐式排序,显示的结果里没有工资,但是按照工资的顺序显示的。

1fea3c430c8162a777e57c03be88ef0e.png

别名排序

SQL> Select sal*12 salary from emp order by salary;

afd8d12926c50a67d9b71fa77a6de76c.png

表达式排序

337e5787d4e3fc461627b5937270613d.png

位置排序,对集合操作时比较方便.

d7b5ec7d6efb3cf1b012fda4e364f882.png

多列排序,先按照部门排序,部门相同的再按照工作排序。

61b7cec7cacb0e0086c232a5d19ce597.png

练习:

练习01:

查看scott中emp表的信息:

select * from emp;

2dcbe35e691397c728e126ddf290b182.png

练习02:

在scott中emp表中,编号为7369的部门编号?

select deptno from emp where EMPNO=7369;

674e1e0d47f92d567d397119a1c4ba52.png

在scott中emp表中,job与7900员工相同的员工有哪些?

24830d7a955959266a8badef4a53a855.png

练习03:

在scott中emp表中,在10号部门中谁的工资+奖金最高?

select ename姓名,sal+nvl(comm,0)总工资from emp where (sal+nvl(comm,0))=( select max(sal+nvl(comm,0)) from emp where deptno IN (10));

b726c16975b90faeb87846f1654f48e9.png

《完》

--xjzhujunjie

--2012/05/15

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值