SQL中select用法分解.docx

上传人:b****6 文档编号:6785688 上传时间:2023-01-10 格式:DOCX 页数:11 大小:19.24KB
下载 相关 举报
SQL中select用法分解.docx_第1页
第1页 / 共11页
SQL中select用法分解.docx_第2页
第2页 / 共11页
SQL中select用法分解.docx_第3页
第3页 / 共11页
SQL中select用法分解.docx_第4页
第4页 / 共11页
SQL中select用法分解.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

SQL中select用法分解.docx

《SQL中select用法分解.docx》由会员分享,可在线阅读,更多相关《SQL中select用法分解.docx(11页珍藏版)》请在冰豆网上搜索。

SQL中select用法分解.docx

SQL中select用法分解

select语句是是最常用的数据查询语句,我们通过例子来逐步了解它的使用。

 

SELECT*FROMdepartments;

 

这条语句中有2个关键字(keywords)SELECT和FROM

其中*代表通配符号,表示departments表中的所有信息。

假设departments表中有如下四个字段:

department_id,department_name,department_age,department_job

 

那么我们可以认为SELECT*FROMdepartments;这个语句也就等同于

SELECTdepartment_id,department_name,department_age,department_job

FROMdepartments;

 

所以,据此我们可以以此推断,如果我们只想检索department_name,department_age这两个字段,我们只需要将上述语句修改为:

SELECTdepartment_name,depatment_ageFROMdepartments;

 

注意:

我们在书写SQL语句时需要知道如下基本常识。

    1我们可以通过多行的书写来完成一条SQL语句,而不必要写成一行。

    2 SQL语句是不区分大小写的。

    3关键字是不能分离或者简写的

    4 子句往往是另起一行书写的,这样做是为了增加可读性。

      例如:

SELECT

            department_name,department_age

            FROMdepartments;

    5关键字通常是大写的,其他的如表名,字段通常小写

 

 

附加:

table(表)的显示规则

     通常情况下查询结束后,在iSQL-PLUS环境下,显示出来的查询结果具有如下特点。

     1字段名通常是大写并且居中的。

    2字符型和日期型数据通常是“左对齐”显示的

    3数字型数据通常是“右对齐”显示的

    4默认显示通常全部是大写

 

ArithmeticExpressions--计算扩展

在使用SELECT语句进行查询的过程中我们可以充分的利用一些简单的计算来丰富我们的查询方式与结果。

例如:

 

SELECTlast_name,salary,salary+300FROMemployees;

 

在这里我们看到了salary+300这个emlpoyees表中本来不存在的字段。

那么会出现什么样的查询结果呢?

我们很容易想到查询结果中会出现3列,他们分别是

 

last_name  salary  salary+300

king       100     400

neil        10000   10300

.          .       .

.          .       .

 

在这里我们我们只需要注意一个问题,那就是字段名。

很显然last_name,salary是我们在之前就已纪存在的字段,而salary+300则是系统默认生成的。

所以我们可以推断,如果我们不额外指定字段名,那么系统将用查询公式来充当默认的字段名。

如何指定一个新的字段名,或将原有的字段定义一个别名呢?

我们在下面就会讲到。

 

关于运算查询我们只需注意运算法则,相信这对中国学生来说并不是一个难事。

 

现在我们来讨论一下关于null的概念。

我们对如下数据进行比较,null,0,space

null  代表什么都没有,它没有具体的值与之对应

0     代表了一个实实在在的数字

space 代表了一个空格,我们完全可以说它是一个字符型数据,使存在的。

 

任何一个数值和null进行and运算他的结果都是null,当然也包括*,/

 

下面我们来看另外一条重要的语句:

给字段(列)定义别名。

这个语句非常有用,可以有效地帮助我们检索并显示我们需要的信息。

例子:

SELECTdepartment_name ASname,department_idID FROMdepartments;

 

SELECTdepartment_name"name",salary*12"Newsalary"FROMdepartments;

 

这两句话,甚至一句话中都有不同的写法,但表述的却是同一个意思。

定义别名,关键字AS

,给列定义别名我们可以用as,当然也可以不用例如第一句中后半句,department_idID。

这里我们就没有用as,但同样是给department_id定义一个别名“ID”。

同样,我们也可以用双引号来定义别名,就像第二句一样。

通过这样的语句,我们在看到的查询结果,列名就由原来的department_name变成了name.....

 

这里还有一种SELECT的选择方式,连接选择。

顾名思义,这个选择的意思就是将查询结果连接起来,而所用的符号是我们非常常见的“||”,“或”运算。

我们可以这么理解,全假则假,“或”是一个二元运算符,在这里只有当两个字段都为null时才会出现null的查询结果,否则进行连接显示。

 

例子:

SELECTdepartment_name||department_idAS"Information"FROMdepartments;

 

显示结果则会出现:

king2003333

               neil9998888

               等等。

如果出现department_name为空,而id不为空,则只显示id,反之只显示name.都为空则显示null.

 

所以,利用这个查询原理我们可以把查询变得更人性化。

例如:

SELECTdepartment_name||'ID isa'||department_idAS"Information"

FROMdepartments;

 

显示结果:

kingIDisa2003333

这里我们只需要注意' '中,空格是要按照一个字符来计算的。

也就是说一个空格显示出来就是一个空格。

 

到这里。

SELECT语句的用法基本差不多了。

实践才是硬道理

我们先来讨论一下where语句。

例如:

SELECTemployee_id,last_name,job_id,department_idFROMemployeesWHEREdepartment_id=90;

 

很明显,这是一条结构非常清晰的含有where子句的查询语句。

我们在这里只需要注意一点,where子句中“=”号后面如果是数字,我们可以直接写在=号后面,如果是字符串那么我们必须加上单引号''。

另外在oracle中,默认的日期输出格式是DD-MON-RR

例如:

wherehire_date='01-JAN-95'

      wheresalary>=5000

     wherename='neil'

 

我们再来看一下BETWEEN....AND语句

这同样是一个条件控制语句,用于输出一定数值(也可以是字符串)范围内的查询结果

例如:

SELECTlast_name,salary

FROM

employees

WHEREsalaryBETWEEN2000AND3000;

 

我们在这里需要注意的是,between..and仍然是where条件控制语句的一员,大家用得时候千万不要把where给忘了。

哈哈

那么我们能用这样的语句来查询字符串类型数据呢?

答案是肯定的

看这个例子:

SELECTlast_name

FROM

employees

WHERElast_nameBETWEEN'king'AND'neil';

这个例子就查询了首字母k和n之间的所有last_name的值。

 

现在我们遇到这样一种情况,现在我们需要查询manage_id=201,205,222的所有员工信息。

现在我们知道的是,id为201,205,222的员工远不止三个人,因为一个manage可以管理多个员工,所以就意味着多个员工可以拥有相同的manage_id......

 

在这里我们就可以使用条件语句where....in...来完成类似的查询了。

例如:

SELECTemployee_id,last_name,salary

FROM

employees

WHEREmanage_idIN(201,205,222);

 

有人可以这样问,现在我们可以根据manage_id来限制这个查询,但如果我们只知道老板的名字呢?

我们还能不能用这个语句呢?

当然可以了

例如:

SELECTemployee_id,last_name,salary

FROM

employees

WHEREmanage_idIN('neil','king','merry');

 

说到这里我们可以用一句话来概括这些类似的查询,其实就是他们的共同点:

精确查询。

无论是wherebetweenand,wherein这些都是给定了明确的查询条件的。

那么下面我就来讲讲模糊查询。

例如:

SELECTlast_name

FROM

employees

WHERElast_nameLIKE'S%';

 

看到这里大家一定恍然大悟。

这里我们用到了2个新知识点,模糊查询的关键词LIKE和一个通配符%

like就不用多解释了,跟它的字面意思其实是一样的。

我们来看看通配符%

%代表了所有字符串的集合,但要分场合的,比如s%这里就代表s字母后面所有的字母,

而%s就代表s字母前面所有的字母了。

那么有没有什么符号能只代表任意一个字母呢?

肯定有的,那就是下划线_

例如:

wherelast_namelike'_s%'

这就表示第二个字母是s的所有数据。

我们通过_,%,以及字母的组合会得到很多有趣的检索方式,大家就自己慢慢尝试吧!

 

下面我们再来看看null值查询。

在数据表里通常存在很多null值,利用他们来进行检索通常是一个不错的办法

例如:

SELECTlast_name,manage_id

FROM

employees

WHEREmanage_idISNULL;

 

当我们将查询进行下去的时候,我们会慢慢发现有时候单条件查询已经不能满足我们的需要,通常我们进行多个条件的叠加查询,这时候我们就要引入oracle中的逻辑条件查询规则了。

这里一共有三个逻辑限定条件,他们分别是:

AND,OR,NOT

 

我们还是通过实例来分析这些查询条件,例如:

SELECTemployee_id,last_name,job_id,salary

FROM

employees

WHEREsalary>=1000ANDjob_idlike'%man%';

 

这里定义了一个需要同时满足salary>=1000和jobid中含有man2个条件的查询语句。

相信大家不难理解。

AND就代表两个同时为真才为真,否则都为假!

 

再看这个例子:

SELECTemployee_id,last_name,job_id,salary

FROM

employees

WHEREsalary>=1000 ORjob_idlike'%man%';

 

这个例子查询了满足salary>=1000或者jobid中有man两个条件中任意一个时的数据集合。

OR表示两个全为假时则为假,否则都为真!

 

再看not,这是一个比较特殊的逻辑表达,你可把他与between..and,in,like这些条件控制语句连用。

例如:

SELECTlast_name,job_id

FROM

employees

WHEREjob_idNOTIN('IT_PROG','ST_CLERK','SA_REP');

 

下面我们来讨论一下or,and的运算优先级,我们来看下面的例子。

SELECTlast_name,job_id,salary

FROM

employees

WHEREjob_id='neil'

OR   job_id='lily'

AND  salary>=15000;

在这里,我们需要进行and运算,然后再进行or运算。

换句话说我们查询的结果是包含有neil的数据,或者包含有lily,并且工资〉15000的数据。

 

现在我们变换一下

SELECTlast_name,job_id,salary

FROM

employees

WHERE (job_id='neil'

OR    job_id='lily')

AND  salary>=15000;

 

在这里我们加入了括号,这里就需要先进性or运算,然后进行and运算。

可见,and的优先级是高于or的。

 

现在我们来看另一个用于格式化数据输出的条件控制语句。

ORDERBY

首先我们要注意的一点是,ORDERBY必须用在句子的最后。

例子:

SELECTlast_name,job_id,department_id,hire_date

FROM

employees

ORDERBYhire_date;

这个句子的意思我们按照hire_date的次序来排列我们的查询结果(默认为升序)

再看,如果我们想按降序排列呢?

 

SELECTlast_name,job_id,department_id,hire_date

FROM

employees

ORDERBYhire_dateDESC;

 

SELECTlast_name,job_id,department_id,hire_date"DATE"

FROM

employees

ORDERBYDATE;这个是按照别名排序(首字母从A--Z)

 

好了,至此,基本的知识点已经说完了。

下面我主要来看oracle环境中,iSQL*Plus下关于“替换变量”的问题。

想象一下,自己的老板不希望使用SQL来查询他所需要的数据,他只想用最简单的方法来快速的得到查询结果,而不是掌握繁琐的SQL语句。

例如,他想只在界面中输入1200,就能得到所有工资>1200的员工信息。

而这正是我们下面要讨论的问题。

 

例子:

SELECTemployee_id,last_name,salary,department_id

FROMemployees

WHEREemployee_id=&employee_num;

大家注意,这里&emplyee_num就代表一个变量,这个变量用于限制employee_id

说的简单点。

如果你执行这个语句,iSQLPLUS会自动生成一个对话框,里面要求你输入employee_num

如果你输入100,那么这条语句就变成了:

SELECTemployee_id,last_name,salary,department_id

FROMemployees

WHEREemployee_id=100;

哈哈,明白了吧。

其实非常简单!

这也是oracle比较独特的地方吧!

 

刚才的例子只允许我们输入数字,如果我们输入字符就会出现错误,因为id是被定义为数值类型的。

那么我们能不能输入字符来进行查询呢?

当然可以啦!

 

例如:

SELECTlast_name,department_id,salary*12

FROM

employees

WHERElast_name='&name';

这个时候我们就能输入字符进行查询了。

因为last_name被定义为字符类型。

 

再看看这个例子:

SELECTemployee_id,last_name,job_id,&column_name

FROM

employees

WHERE$condition

ORDERBY&order_column;

 

这个例子如需我们自己输入查询的列名,查询的条件,以及数据排列的格式!

哈哈不错吧

 

下面我们看看如何让orcale强制显示变量被复值前后的变化

SETVERIFYON

SELECTlast_name,department_id,salary*12

FROM

employees

WHERElast_name='&name';

 

这里在执行后会出现如下语句

old3:

wherelast_name='&name'

new3:

wherelast_name= neil

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 总结汇报

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1