1、SQL中select用法分解select语句是是最常用的数据查询语句,我们通过例子来逐步了解它的使用。SELECT * FROM departments;这条语句中有2个关键字(keywords) SELECT 和 FROM其中 * 代表通配符号,表示 departments 表中的所有信息。假设departments表中有如下四个字段:department_id, department_name, department_age, department_job那么我们可以认为 SELECT * FROM departments; 这个语句也就等同于SELECT department_id, d
2、epartment_name, department_age, department_jobFROM departments;所以,据此我们可以以此推断,如果我们只想检索 department_name, department_age这两个字段,我们只需要将上述语句修改为:SELECT department_name,depatment_age FROM departments;注意:我们在书写SQL语句时需要知道如下基本常识。 1 我们可以通过多行的书写来完成一条SQL语句,而不必要写成一行。 2SQL语句是不区分大小写的。 3 关键字是不能分离或者简写的 4子句往往是另起一行书写的,这样做
3、是为了增加可读性。 例如: SELECT department_name,department_age FROM departments; 5 关键字通常是大写的,其他的如表名,字段通常小写附加:table(表)的显示规则通常情况下查询结束后,在iSQL-PLUS环境下,显示出来的查询结果具有如下特点。1 字段名通常是大写并且居中的。 2 字符型和日期型数据通常是“左对齐”显示的 3 数字型数据通常是“右对齐”显示的 4 默认显示通常全部是大写Arithmetic Expressions-计算扩展在使用SELECT语句进行查询的过程中我们可以充分的利用一些简单的计算来丰富我们的查询方式与结果。
4、例如:SELECT last_name, salary, salary+300 FROM employees;在这里我们看到了 salary+300 这个emlpoyees表中本来不存在的字段。那么会出现什么样的查询结果呢?我们很容易想到查询结果中会出现3列,他们分别是last_name salary salary+300king 100 400neil10000 10300. . . . .在这里我们我们只需要注意一个问题,那就是字段名。很显然last_name,salary是我们在之前就已纪存在的字段,而salary+300则是系统默认生成的。所以我们可以推断,如果我们不额外指定字段名,那
5、么系统将用查询公式来充当默认的字段名。如何指定一个新的字段名,或将原有的字段定义一个别名呢?我们在下面就会讲到。关于运算查询我们只需注意运算法则,相信这对中国学生来说并不是一个难事。现在我们来讨论一下关于null的概念。我们对如下数据进行比较,null,0,spacenull 代表什么都没有,它没有具体的值与之对应0 代表了一个实实在在的数字space 代表了一个空格,我们完全可以说它是一个字符型数据,使存在的。任何一个数值和null进行and 运算他的结果都是null,当然也包括*,/下面我们来看另外一条重要的语句:给字段(列)定义别名。这个语句非常有用,可以有效地帮助我们检索并显示我们需要
6、的信息。例子:SELECT department_nameAS name, department_id IDFROM departments;SELECT department_name name, salary*12 New salary FROM departments;这两句话,甚至一句话中都有不同的写法,但表述的却是同一个意思。定义别名,关键字AS,给列定义别名我们可以用as, 当然也可以不用例如第一句中后半句,department_id ID。这里我们就没有用as,但同样是给department_id定义一个别名“ID”。同样,我们也可以用双引号来定义别名,就像第二句一样。通过这样的
7、语句,我们在看到的查询结果,列名就由原来的department_name变成了name.这里还有一种SELECT的选择方式,连接选择。顾名思义,这个选择的意思就是将查询结果连接起来,而所用的符号是我们非常常见的“ |”,“或”运算。我们可以这么理解,全假则假,“或”是一个二元运算符,在这里只有当两个字段都为null时才会出现null的查询结果,否则进行连 接显示。例子: SELECT department_name|department_id AS Information FROM departments;显示结果则会出现: king2003333 neil9998888 等等。如果出现dep
8、artment_name为空,而id不为空,则只显示id,反之只显示name.都为空则显示null.所以,利用这个查询原理我们可以把查询变得更人性化。例如:SELECT department_name| IDis a |department_id AS InformationFROM departments;显示结果: king ID is a 2003333这里我们只需要注意 中,空格是要按照一个字符来计算的。也就是说一个空格显示出来就是一个空格。到这里。SELECT语句的用法基本差不多了。实践才是硬道理我们先来讨论一下where语句。例如:SELECT employee_id, last_
9、name, job_id, department_id FROM employees WHERE department_id= 90;很明显,这是一条结构非常清晰的含有where子句的查询语句。我们在这里只需要注意一点,where子句中 “=”号后面如果是数字,我们可以直接写在=号后面,如果是字符串那么我们必须加上单引号 。另外在oracle中,默认的日期输出格式是 DD-MON-RR例如: where hire_date= 01-JAN-95where salary =5000 where name= neil我们再来看一下BETWEEN.AND语句这同样是一个条件控制语句,用于输出一定数值
10、(也可以是字符串)范围内的查询结果例如:SELECT last_name, salaryFROMemployeesWHERE salary BETWEEN 2000 AND 3000;我们在这里需要注意的是,between.and仍然是where条件控制语句的一员,大家用得时候千万不要把where给忘了。哈哈那么我们能用这样的语句来查询字符串类型数据呢?答案是肯定的看这个例子:SELECT last_nameFROMemployeesWHERE last_name BETWEEN king AND neil;这个例子就查询了首字母k和n之间的所有last_name的值。现在我们遇到这样一种情况
11、,现在我们需要查询 manage_id=201,205,222的所有员工信息。现在我们知道的是,id为201,205,222的员工远不止三个人,因为一个manage 可以管理多个员工,所以就意味着多个员工可以拥有相同的manage_id.在这里我们就可以使用条件语句where.in.来完成类似的查询了。例如:SELECT employee_id, last_name, salaryFROMemployeesWHERE manage_id IN (201,205,222);有人可以这样问,现在我们可以根据manage_id来限制这个查询,但如果我们只知道老板的名字呢?我们还能不能用这个语句呢?当
12、然可以了例如:SELECT employee_id, last_name, salaryFROMemployeesWHERE manage_id IN (neil,king,merry);说到这里我们可以用一句话来概括这些类似的查询,其实就是他们的共同点:精确查询。无论是where between and ,where in这些都是给定了明确的查询条件的。那么下面我就来讲讲模糊查询。例如:SELECT last_nameFROMemployeesWHERE last_name LIKE S% ;看到这里大家一定恍然大悟。这里我们用到了2个新知识点,模糊查询的关键词LIKE 和 一个通配符 %l
13、ike就不用多解释了,跟它的字面意思其实是一样的。我们来看看通配符 %代表了所有字符串的集合,但要分场合的,比如s%这里就代表s字母后面所有的字母,而%s就代表s字母前面所有的字母了。那么有没有什么符号能只代表任意一个字母呢?肯定有的,那就是下划线_例如: where last_name like _s%这就表示第二个字母是s的所有数据。我们通过_,%,以及字母的组合会得到很多有趣的检索方式,大家就自己慢慢尝试吧!下面我们再来看看null值查询。在数据表里通常存在很多null值,利用他们来进行检索通常是一个不错的办法例如:SELECT last_name, manage_idFROMemplo
14、yeesWHERE manage_id IS NULL;当我们将查询进行下去的时候,我们会慢慢发现有时候单条件查询已经不能满足我们的需要,通常我们进行多个条件的叠加查询,这时候我们就要引入oracle中的逻辑条件查询规则了。这里一共有三个逻辑限定条件,他们分别是:AND, OR, NOT我们还是通过实例来分析这些查询条件,例如:SELECT employee_id, last_name, job_id, salaryFROMemployeesWHERE salary= 1000 AND job_id like %man%;这里定义了一个需要同时满足 salary=1000和 job id中含有
15、man 2个条件的查询语句。相信大家不难理解。AND就代表两个同时为真才为真,否则都为假!再看这个例子:SELECT employee_id, last_name, job_id, salaryFROMemployeesWHERE salary= 1000OR job_id like %man%;这个例子查询了满足salary=1000或者job id 中有man两个条件中任意一个时的数据集合。OR表示两个全为假时则为假,否则都为真!再看not,这是一个比较特殊的逻辑表达,你可把他与between.and, in,like这些条件控制语句连用。例如:SELECT last_name, job_
16、idFROMemployeesWHERE job_id NOT IN (IT_PROG,ST_CLERK,SA_REP);下面我们来讨论一下or,and的运算优先级,我们来看下面的例子。SELECT last_name, job_id, salaryFROMemployeesWHERE job_id=neilOR job_id=lilyAND salary=15000 ;在这里,我们需要进行 and 运算,然后再进行or 运算。换句话说我们查询的结果是包含有neil的数据,或者包含有lily,并且工资15000的数据。现在我们变换一下SELECT last_name, job_id, sala
17、ryFROMemployeesWHERE( job_id=neilOR job_id=lily )AND salary=15000 ;在这里我们加入了括号,这里就需要先进性or运算,然后进行and运算。可见,and的优先级是高于or的。现在我们来看另一个用于格式化数据输出的条件控制语句。ORDER BY首先我们要注意的一点是,ORDER BY 必须用在句子的最后。例子:SELECT last_name, job_id, department_id, hire_dateFROMemployeesORDER BY hire_date;这个句子的意思我们按照hire_date的次序来排列我们的查询结
18、果(默认为升序)再看,如果我们想按降序排列呢?SELECT last_name, job_id, department_id, hire_dateFROMemployeesORDER BY hire_date DESC;SELECT last_name, job_id, department_id, hire_date DATEFROMemployeesORDER BY DATE; 这个是按照别名排序(首字母从A-Z)好了,至此,基本的知识点已经说完了。下面我主要来看oracle环境中,iSQL*Plus下关于“替换变量”的问题。想象一下,自己的老板不希望使用SQL来查询他所需要的数据,他只想
19、用最简单的方法来快速的得到查询结果,而不是掌握繁琐的SQL语句。例如,他想只在界面中输入1200,就能得到所有工资1200的员工信息。而这正是我们下面要讨论的问题。例子:SELECT employee_id, last_name, salary, department_idFROM employeesWHERE employee_id= &employee_num;大家注意,这里&emplyee_num就代表一个变量,这个变量用于限制employee_id说的简单点。如果你执行这个语句,iSQLPLUS会自动生成一个对话框,里面要求你输入employee_num如果你输入100,那么这条语句就
20、变成了:SELECT employee_id, last_name, salary, department_idFROM employeesWHERE employee_id=100;哈哈,明白 了吧。其实非常简单!这也是oracle比较独特的地方吧!刚才的例子只允许我们输入数字,如果我们输入字符就会出现错误,因为id是被定义为数值类型的。那么我们能不能输入字符来进行查询呢?当然可以啦!例如:SELECT last_name, department_id, salary*12FROMemployeesWHERE last_name= &name;这个时候我们就能输入字符进行查询了。因为last
21、_name被定义为字符类型。再看看这个例子:SELECT employee_id, last_name, job_id, &column_nameFROMemployeesWHERE $conditionORDER BY &order_column ;这个例子如需我们自己输入查询的列名,查询的条件,以及数据排列的格式!哈哈不错吧下面我们看看如何让orcale强制显示变量被复值前后的变化SET VERIFY ONSELECT last_name, department_id, salary*12FROMemployeesWHERE last_name= &name;这里在执行后会出现如下语句old 3: where last_name= &namenew 3: where last_name=neil
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1