SQL200实例教程讲解
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
SQL语言入门教程
第一课简介
SQL是英文Structured Query Language的缩写,意思为结构化查询语言。
SQL语言的主要功能就是同各种数据库建立联系,进行沟通。
按照ANSI(美国国家标准协会)的规定,SQL被作为关系型数据库管理系统的标准语言。
SQL语句可以用来执行各种各样的操作,例如更新数据库中的数据,从数据库中提取数据等。
目前,绝大多数流行的关系型数据库管理系统,如Oracle, Sybase, Microsoft SQL Server, Access等都采用了SQL语言标准。
虽然很多数据库都对SQL语句进行了再开发和扩展,但是包括Select, Insert, Update, Delete, Create, 以及Drop在内的标准的SQL命令仍然可以被用来完成几乎所有的数据库操作。
下面,我们就来详细介绍一下SQL语言的基本知识。
一个典型的关系型数据库通常由一个或多个被称作表格的对象组成。
数据库中的所有数据或信息都被保存在这些数据库表格中。
数据库中的每一个表格都具有自己唯一的表格名称,都是由行和列组成,其中每一列包括了该列名称,数据类型,以及列的其它属性等信息,而行则具体包含某一列的记录或数据。
以下,是一个名为太平洋网络学院的数据库表格的实
该表格中“栏目”,“用户群”就是两个不同的列,而表格中的每一行则包含了具体的表格数据。
1. 创建表格
2. 数据查询
3. 向表格中添加、更新、删除记录
4. 删除数据库表格
第二课创建表格
SQL语言中的create table语句被用来建立新的数据库表格。
create table语句的使用格式如下:
create table tablename
(column1 data type,
column2 data type,
column3 data type);
如果用户希望在建立新表格时规定列的限制条件,可以使用可选的条件选项:
create table tablename
(column1 data type [constraint],
column2 data type [constraint],
column3 data type [constraint]);
举例如下:
create table employee
(firstname varchar(15),
lastname varchar(20),
age number(3),
address varchar(30),
city varchar(20));
简单来说,创建新表格时,在关键词create table后面加入所要建立的表格的名称,然后在括号内顺次设定各列的名称,数据类型,以及可选的限制条件等。
注意,所有的SQL 语句在结尾处都要使用“;”符号。
使用SQL语句创建的数据库表格和表格中列的名称必须以字母开头,后面可以使用字母,数字或下划线,名称的长度不能超过30个字符。
注意,用户在选择表格名称时不要使用SQL语言中的保留关键词,如select, create, insert等,作为表格或列的名称。
数据类型用来设定某一个具体列中数据的类型。
例如,在姓名列中只能采用varchar或char的数据类型,而不能使用number的数据类型。
SQL语言中较为常用的数据类型为:
char(size):固定长度字符串,其中括号中的size用来设定字符串的最大长度。
Char类型的最大长度为255字节。
varchar(size):可变长度字符串,最大长度由size设定。
number(size):数字类型,其中数字的最大位数由size设定。
Date:日期类型。
number(size,d):数字类型,size决定该数字总的最大位数,而d则用于设定该数字在小数点后的位数。
最后,在创建新表格时需要注意的一点就是表格中列的限制条件。
所谓限制条件就是当向特定列输入数据时所必须遵守的规则。
例如,unique这一限制条件要求某一列中不能存在两个值相同的记录,所有记录的值都必须是唯一的。
除unique之外,较为常用的列的限制条件还包括not null和primary key等。
not null用来规定表格中某一列的值不能为空。
primary key则为表格中的所有记录规定了唯一的标识符。
第三课数据查询
在众多的SQL命令中,select语句应该算是使用最频繁的。
select语句主要被用来对数据库进行查询并返回符合用户查询标准的结果数据。
Select语句的语法格式如下:
select column1 [, column2,etc] from tablename
[where condition];
([] 表示可选项)
select语句中位于select关键词之后的列名用来决定那些列将作为查询结果返回。
用户可以按照自己的需要选择任意列,还可以使用通配符“*”来设定返回表格中的所有列。
select语句中位于from关键词之后的表格名称用来决定将要进行查询操作的目标表格。
Select语句中的where可选从句用来规定哪些数据值或哪些行将被作为查询结果返回或显示。
在where条件从句中可以使用以下一些运算符来设定查询标准:
= 等于
> 大于
< 小于
>= 大于等于
<= 小于等于
<> 不等于
除了上面所提到的运算符外,LIKE运算符在where条件从句中也非常重要。
LIKE运算符的功能非常强大,通过使用LIKE运算符可以设定只选择与用户规定格式相同的记录。
此外,我们还可以使用通配符“%”用来代替任何字符串。
举例如下:
select firstname, lastname, city
from employee
where firstname LIKE ‘E%’;
(注意,字符串必须被包含在单括号内)
上述SQL语句将会查询所有名称以E开头的姓名。
或者,通过如下语句:
select * from employee
where firstname = ‘May’;
查询所有名称为May的行。
第四课向表格中添加、更新、删除记录
添加新记录
SQL语言使用insert语句向数据库表格中插入或添加新的数据行。
Insert语句的使用格式如下:
insert into tablename
(first_column,st_column)
values (first_value,st_value);
例如:
insert into employee
(firstname, lastname, age, address, city)
values (‘Li’,’Ming’,45, ‘No.77 Changan Road’,’Beijing’);
简单来说,当向数据库表格中添加新记录时,在关键词insert into后面输入所要添加的表格名称,然后在括号中列出将要添加新值的列的名称。
最后,在关键词values的后面按照前面输入的列的顺序对应的输入所有要添加的记录值。
更新记录
SQL语言使用update语句更新或修改满足规定条件的现有记录。
update语句的格式为: update tablename
set columnname = newvalue [, nextcolumn = newvalue2...]
where columnname OPERATOR value [and|or column OPERATOR value];
例如:
update employee
set age = age+1
where first_name= ‘Mary’and last_name= ‘Williams’;
使用update语句时,关键一点就是要设定好用于进行判断的where条件从句。
删除记录
SQL语言使用delete语句删除数据库表格中的行或记录。
Delete语句的格式为:
delete from tablename
where columnname OPERATOR value [and|or column OPERATOR value];
例如:
delete from employee
where lastname = May;
简单来说,当需要删除某一行或某个记录时,在delete from关键词之后输入表格名称,然后在where从句中设定删除记录的判断条件。
注意,如果用户在使用delete语句时不设定where从句,则表格中的所有记录将全部被删除。
第五课删除数据库表格
在SQL语言中使用drop table命令删除某个表格以及该表格中的所有记录。
drop table 命令的使用格式为:
drop table tablename;
例如:
drop table employee;
如果用户希望将某个数据库表格完全删除,只需要在drop table命令后输入希望删除的表格名称即可。
drop table命令的作用与删除表格中的所有记录不同。
删除表格中的全部记录之后,该表格仍然存在,而且表格中列的信息不会改变。
而使用drop table命令则会将整个数据库表格的所有信息全部删除。
以上,我们对SQL语言主要的命令和语句进行了较为详细的介绍。
应该说SQL语句的语法结构和风格还是相当简单和直观的,只要用户结合实践多加练习,一定会在短期内迅速掌握。
以Store_Information数据表为例,我们可以在GROUP BY一节中所使用的SQL命令中设置如下字段和数据表别名:
SELECT A1.store_name Store, SUM(Sales) "Total Sales"
FROM Store_Information A1
GROUP BY A1.store_name
查询结果显示为:
Store Total Sales
Los Angeles $1800
San Diego $250
Boston $700
SQL循序渐进
SQL循序渐进(目录)
SQL循序渐进(1)-------介绍SQL
SQL循序渐进(2)-------表的基础知识
SQL循序渐进(3)-------数据检索
SQL循序渐进(4)-------创建表
SQL循序渐进(5)-------插入数据到表
SQL循序渐进(6)-------删除表
SQL循序渐进(7)-------更新记录
SQL循序渐进(8)-------删除记录
SQL循序渐进(9)-------SELECT语句
SQL循序渐进(10)------合计函数
SQL循序渐进(11)------GROUP BY子句
SQL循序渐进(12)------HAVING子句
SQL循序渐进(13)------ORDER BY子句
SQL循序渐进(14)------组合条件和布尔运算符
SQL循序渐进(15)------IN 和BETWEEN 条件运算符
SQL循序渐进(16)------数学运算符
SQL循序渐进(17)------JOIN子句
SQL循序渐进(18)------索引
SQL循序渐进(19)------DISTINCT和排除复制
SQL循序渐进(20)------Aliases 、In以及子查询
SQL循序渐进(21)------更多的子查询
SQL循序渐进(22)------EXISTS 和ALL
SQL循序渐进(23) ------UNION 和外部连接
SQL循序渐进(24) ------嵌入SQL
(1)介绍SQL
SQL(Structured Query Language,结构查询语言)是一个功能强大的数据库语言。
SQL通常使用于数据库的通讯。
ANSI(美国国家标准学会)声称,SQL是关系数据库管理系统的标准语言。
SQL语句通常用于完成一些数据库的操作任务,比如在数据库中更新数据,或者从数据库中检索数据。
使用SQL的常见关系数据库管理系统有:Oracle、Sybase、Microsoft SQL Server、Access、Ingres等等。
虽然绝大多数的数据库系统使用SQL,但是它们同样有它们自立另外的专有扩展功能用于它们的系统。
但是,标准的SQL命令,比如"Select"、"Insert"、"Update"、"Delete"、"Create"和"Drop"常常被用于完成绝大多数数据库的操作。
但是,不象其它的语言,如C、Pascal等,SQL没有循环结构(比如if-then-else、do-while)以及函数定义等等的功能。
而且SQL只有一个数据类型的固定设置,换句话说,你不能在
使用其它编程语言的时候创建你自己的数据类型。
SQL功能强大,但是概括起来,它可以分成以下几组:
DML(Data Manipulation Language,数据操作语言):用于检索或者修改数据;
DDL(Data Definition Language,数据定义语言):用于定义数据的结构,比如创建、修改或者删除数据库对象;
DCL(Data Control Language,数据控制语言):用于定义数据库用户的权限。
DML组可以细分为以下的几个语句:
SELECT:用于检索数据;
INSERT:用于增加数据到数据库;
UPDATE:用于从数据库中修改现存的数据
DELETE:用于从数据库中删除数据。
DDL语句可以用于创建用户和重建数据库对象。
下面是DDL命令:
CREATE TABLE
ALTER TABLE
DROP TABLE
CREATE INDEX
DROP INDEX
DCL命令用于创建关系用户访问以及授权的对象。
下面是几个DCL命令:
ALTER PASSWORD
GRANT
REVOKE
CREATE SYNONYM
为了让你对SQL有一个直观的认识,下面先给出一个简单SQL语句的例子:
我们使用SQL语句来从Employees中检索Department ID为CS的姓名:
SELECT
FROM Employees
WHERE Employees.DeptID = "CS"
可能你现在一开始不太理解这些语句,也许你会一头雾水,不要紧的,通过本教程的学习后,你会发现这段语句是多么的普通。
为了不让你困惑,下面我也进行一番解释:
先对FROM子句吧,语句中的FROM Employees意思是从Employees表中检索数据。
而语句WHERE Employees.DeptID = "CS"意思是检索Employees的DeptID列为”CS”的行,这样
最后,我们来解释一个SELECT子句,它指定了从Name列检索来的所有数据,比如
好吧,开始我们下一节的教程-------表的基本知识。
(2)表的基础知识
关系数据库通常包含多个表。
数据库实际上是表的集合,数据库的数据或者信息都是存储在表中的。
表是对数据进行存储和操作的一种逻辑结构,每一个表都代表一个对用户意义的对象。
例如,一个公司数据库中,会有雇员表、部门表、库存表、销售表、工资表等等。
我们经常见到的成绩表就是一种表,它是有行和列组成的,我们并且可以通过名字来识别数据。
列包含了列的名字、数据类型以及列的其它属性;行包含了列的记录或者数据。
下面给出一个成绩单,其中姓名、语文、数学、英语都是列,而行包含了这个表的数据,即每个人的各科成绩:
(3)数据检索
在SQL中SELECT语句通常用于检索数据库,或者检索满足你设定条件的数据,以下是简单的SELECT语句的格式:
select "column1"[,"column2",etc] from "tablename"
[where "condition"];
[] = optional
其中列的名字跟着SELECT关键字,它决定了哪一列将被作为结果返回。
你可以任意指定多个列,或者你可以使用"*"来选择所有的列。
表的名字是紧跟着FROM关键字的,它指出了哪个表格将作为最后结果被查询。
而WHERE子句(可选)指出哪个数据或者行将被返回或者显示,它是根据关键字WHERE 后面描述的条件而来的。
在WHERE子句中可以有以下的条件选择:
= 等于
> 大于
< 小于
>= 大于等于
<= 小于等于
<> 不等于
LIKE 参见以下注释
注释:LIKE 模式匹配操作符同样可以使用在WHERE子句的条件条件中。
LIKE是一个功
能强大的操作符,它可以让你选择你"喜欢"指定的行。
百分号"%" 可以被用来匹配任何可能的字符,它可以出现在指定字符的前面或者后面,例如:
select first, last, city
from empinfo
where first LIKE 'Er%';
以上这条SQL语句将会匹配任何名字以'Er'开始的名字,这里必须使用单引号。
或者你也可以使用"%"在字符的前面,例如:
select first, last
from empinfo
where last LIKE '%s';
这条SQL语句将会匹配任何名字以's'结尾的名字。
这个"%"的作用就跟DOS命令的"*"号很相似。
select * from empinfo
where first = 'Eric';
以上的SQL语句只选择first名字为'Eric'的行。
(4)创建表
这个create table语句是用于创建一个新的表格。
以下是一个简单创建表格语句的格式:create table "tablename"
("column1" "data type",
"column2" "data type",
"column3" "data type");
如果你想使用可选的约束,创建表格的格式为:
create table "tablename"
("column1" "data type" [constraint],
"column2" "data type" [constraint],
"column3" "data type" [constraint]);
[ ] = optional
这里注意:你可以任意创建多列的表格,这个条件是可选的。
为了更好的理解,下面举个例子:
create table employee
(first varchar(15),
last varchar(20),
age number(3),
address varchar(30),
city varchar(20),
state varchar(20));
为了创建一个新表格,你可以在关键字create table之后跟着表的名字,然后一个圆左括号”(”,然后是第一列的名字,再是这一列的数据类型,接着是任意的可选约束,最后是圆右括号”)”。
确保在开始表格内容之前使用圆左括号并且在表的最后一列定义之后使用圆右括号是相当重要的。
你还要保证每一个列定义之间有逗号分隔。
最后在SQL语句结束时候加上分号";"。
表格和列名必须以字母开头,第二个字符开始可以是字母、数字或者下划线,但是要保证名
字的总长度不要超过30个字符。
在定义表格和列名不要使用不要使用SQL预定的用于表格或者列名的关键字(比如"select"、"create"、"insert"等等),以避免错误的发生。
数据类型是指在特定的列使用什么样数据的类型。
如果一个列的名字为"Last_Name",它是用来容纳人名的,所以这个特定列就应该采用"varchar" (variable-length character,变长度的字符型) 数据类型。
以下是几种常见的数据类型:
char(size) :固定长度的字符串型。
Size是圆括号中指定的参数,它可以由用户随意设置,但是不能超过255个字节。
varchar(size) :变长度的字符串型。
它的最大长度是由括号中的参数size设定的。
number(size):数值型。
最大数字的位数由括号中的参数size设置。
date :日期数值型。
number(size,d) :数值型。
它的最大数字的位数由括号中的参数sieze设定,而括号中的参数d是设置小数点的位数。
什么是约束呢?当表被创建的时候,可以一列也可以多列共用一个约束。
约束是一个跟列有关的基本准则,返回的数据必须遵循这个准则。
下面举个例子,一个约束指定在一列中不能有两个记录共用一个数值。
它们必须单独的。
其它两个流行的约束是:"not null",它设置了列不能留空白,即一定要有数据;以及"primary key"(主键),主键约束定义了表中每一个记录(或行)的唯一标识。
所有的这些将在以后的教程中再作进一步阐述。
好吧,也许你已经有跃跃欲试的冲动了。
作为本节练习,下面我们自己来设计和创建表格。
你可以开始创建一个公司的雇员表格。
你需要创建一个包含firstname、lastname、title、age 和salary的表格。
(5)插入数据到表
Insert语句用于往表格中插入或者增加一行数据,它的格式为:
insert into "tablename"
(first_column,st_column)
values (first_value,st_value);
[] = optional
简单举个例子:
insert into employee
(first, last, age, address, city)
values ('Luke', 'Duke', 45, '2130 Boars Nest', 'Hazard Co');
这里要注意:每一个字符窜都要用单引号括起来。
为了往表中插入数据,要在关键字insert into之后紧跟着表名,然后是左圆括号,接着是以逗号分开的一系列的列名,再是一个右圆括号,然后在关键字values之后跟着一系列用圆括号括起的数值。
这些数值是你要往表格中填入的数据,它们必须与指定的列名相匹配。
字符串笔译用单引号括起来,而数字就不用。
在上面的例子中,'Luke'必须与列first相匹配,而45必须与列age相匹配。
假如你想往employee表格中插入以下数据;
Zhang Weiguo,28,北京601信箱,北京
那么你要使用以下的SQL语句:
insert into employee
(first, last, age, address, city)
values (' Zhang', ' Weiguo' ,28, '北京601信箱', '北京');
(6)删除表
Drop table命令用于删除一个表格或者表中的所有行。
其语法格式为:
drop table "tablename"
下面举个例子:
drop table employee;
为了删除整个表(包括所有的行),可以使用drop table命令后加上tablename。
Drop table 命令跟从表中删除所有记录是不一样的:
删除表中的所有记录是留下表格(只是它是空的)以及约束信息;而drop table是删除表的所有信息,包括所有行、表格以及约束信息等等。
(7)更新记录
Update语句用于更新或者改变匹配指定条件的记录,它是通过构造一个where语句来实现的。
其语句格式如下:
update "tablename"
set "columnname" = "newvalue"[,"nextcolumn" = "newvalue2"...]
where "columnname" OPERATOR "value" [and|or "column" OPERATOR "value"];
[] = optional
下面举个例子来说明:
update phone_book
set area_code = 623
where prefix = 979;
以上语句是在phone_book表中,在prefix=979的行中将area_code设置为623。
update phone_book
set last_name = 'Smith', prefix=555, suffix=9292
where last_name = 'Jones';
而以上的这段语句是在phone_book中,在last_name= 'Jones'的行中将last_name 设置为
'Smith', prefix为555, suffix为9292。
update employee
set age = age+1
where first_name='Mary' and last_name='Williams';
这段语句是在employee表中,在first_name='Mary' 和last_name='Williams'的行中将age加1。
作为每课一练,你在结束本教程之后要好好作以下的练习:
1 因为Jonie Weber 已经跟Bob Williams结婚,所以它需要将它的last名更新为
Weber-Williams。
2 Dirk Smith的生日是今天,所以他的年龄应该加1。
3 所有的秘书都叫做"Administrative Assistant".所以要将所有的标题标题都相应地修改。
就作这几个练习,千万不可大意哟。
(8)删除记录
Delete语句是用来从表中删除记录或者行,其语句格式为:
delete from "tablename"
where "columnname" OPERATOR "value" [and|or "column" OPERATOR "value"];
[ ] = optional
下面还是举个例子:
delete from employee;
这条语句没有where语句,所以它将删除所有的记录,因此如果没有使用where的时候,要千万小心。
如果你只要删除其中一行或者几行,可以参考以下的语句:
delete from employee
where lastname = 'May';
这条语句是从emplyee表中删除lastname为'May'的行。
delete from employee
where firstname = 'Mike' or firstname = 'Eric';
这条语句是从emplyee表中删除firstname为'Mike'或者'Eric'的行。
为了从表中删除一个完整的记录或者行,就直接在"delete from"后面加上表的名字,并且利用where指明符合什么条件的行要删除即可。
如果你没有使用where子句,那么表中的所有记录或者行将被删除。
(9)SELECT语句
在上面的教程中已经有用到SELECT语句。
在本节教程中将详细对它进行阐述。
SELECT语句是SQL的核心,在你的SQL语句中可能用的最多的就是SELECT语句了。
由于大量的选项可以用于SELECT语句,所以整个教程好象就是围这SELECT语句转。
当我们构造SQL查询语句(利用了SELECT语句)的时候,认识所有的可能选项和最好的或者最有效率的方法来实现是很有用的。
这个教程将为你提供这些技能。
SELECT语句用于查询数据库并检索匹配你指定条件的选择数据。
SELECT语句有五个主要的子句子你可以选择,而FROM是唯一必须的子句。
每一个子句有大量的选择项、参数等等。
这些子句将罗列在下面,而且它们每一个都将在以后的教程有更为详细的描述。
以下是SELECT语句的格式:
SELECT [ALL | DISTINCT] column1[,column2]
FROM table1[,table2]
[WHERE "conditions"]
[GROUP BY "column-list"]
[HAVING "conditions]
[ORDER BY "column-list" [ASC | DESC] ]
下面举个例子:
SELECT name, age, salary
FROM employee
WHERE age > 50;
上面的这个语句将从employee表中选择age大于50的所有的name、age和salary列的数值。
注意:一定要在SQL语句末尾加上一个分号。
这个分号提示SQL语句已经结束并准备被解释。
以下的表格给出了各种比较运算符号:
SELECT name, title, dept
FROM employee
WHERE title LIKE 'Pro%';
上面的语句是从employee表中选择title是以'Pro'为开头的name、title和dept列中的所有行或者数值。
另外ALL和DISTINCT也是SQL中的关键字,它们用于在你的查询结果中选择ALL(缺省)或者"distinct"或者单一记录。
如果你想在指定的列中检索单一记录,你可以使用"DISTINCT" 关键子。
因为DISTNCT 将会丢弃所有你在SELECT指定的列复制的记录,比如:
SELECT DISTINCT age
FROM employee_info;
这条语句将返回所有在employee_info表中单一的age数据。
而ALL就将显示所有指定的类,包括所有的复制数据。
在没有指定的时候,这个ALL关键字是缺省的。
(10)合计函数
所有的合计函数如下表所示:
合计函数用于从SELECT语句中计算一个”返回列的数据”。
它们是总结了所选数据列的结果。
虽然它们需要"GROUP BY"子句(后面一个教程介绍),但是这些函数也可以在不用使用"GROUP BY"子句的情况被使用,比如:
SELECT AVG(salary)
FROM employee;
这条语句将返回单一的结果,它包含了从employee表中所有salary列数据的平均值。
为了更好的理解,我们再举个例子:
SELECT AVG(salary)
FROM employee;
WHERE title = 'Programmer';
以上这条语句将返回employee表中所有title列为'Programmer'的数据的平均值。
下面的例子中使用的语句跟其它合计函数有点不用,因为没有一个类被指定给COUNT函数。
这条语句实际上将返回employee表的行数,如下:
SELECT Count(*)
FROM employees;
最后给出本节教程的配套练习:
1)作一个公司的销售表items_ordered,里面有price、product和amount。
从items_ordered表中选择price最大的数据。
这里提示:使用MAX函数。
2) 计算items_ordered表中的行数。
(11)GROUP BY子句
GROUP BY子句
首先讲讲GROUP BY 子句语法:
SELECT column1, SUM(column2)
FROM "list-of-tables"
GROUP BY "column-list";
这个GROUP BY子句将集中所有的行在一起,它包含了指定列的数据以及允许合计函数来计算一个或者多个列。
当然最好解释的方法是给出一个例子啦:
假设我们将从employee表中搜索工资最高的列,可以使用以下的SQL语句:
SELECT max(salary), dept
FROM employee
GROUP BY dept;
这条语句将在每一个单独的部门中选择工资最高的工资。
结果他们的salary和dept将被返回。
(12)HA VING子句
HA VING子句
下面先给出HA VING子句的语法:
SELECT column1, SUM(column2)
FROM "list-of-tables"
GROUP BY "column-list"
HA VING "condition";
这个HA VING子句允许你为每一个组指定条件,换句话说,可以根据你指定的条件来选择行。
如果你想使用HA VING子句的话,它应该处再GROUP BY子句之后。
下面将以一个例子来解释HA VING子句。
假设我们的employee表中包含雇员的name、departmen、salary和age。
如果你想为每个部门中每个雇员选择平均工资的话,你可以使用下面的SQL语句:
SELECT dept, avg(salary)
FROM employee
GROUP BY dept;
当然,如果你还想只计算和显示salary大于20000的平均工资的话,你还可以加上HA VING 子句:
SELECT dept, avg(salary)
FROM employee
GROUP BY dept
HA VING avg(salary) > 20000;
(13)ORDER BY子句
ORDER BY子句
ORDER BY子句的语法为:
SELECT column1, SUM(column2)
FROM "list-of-tables"
ORDER BY "column-list" [ASC | DESC];
[ ] = optional
ORDER BY是一个可选的子句,它允许你根据指定要order by的列来以上升或者下降的顺序来显示查询的结果。
例如:
ASC = Ascending Order –这个是缺省的
DESC = Descending Order
下面举个例子:
SELECT employee_id, dept, name, age, salary
FROM employee_info
WHERE dept = 'Sales'
ORDER BY salary;
这条SQL语句将从employee_info表中列dept等于'Sales'选择employee_id,、dept、name、age和salary,并且根据他们的salary按升序的顺序来列出检索结果。
如果你想对多列排序的话,那么在列与列之间要加上逗号,比如:
SELECT employee_id, dept, name, age, salary
FROM employee_info
WHERE dept = 'Sales'
ORDER BY salary, age DESC;
(14)组合条件和布尔运算符
以下的SQL语句中就含有组合条件:
SELECT column1, SUM(column2)
FROM "list-of-tables"
WHERE "condition1" AND "condition2";
AND运算符可以在WHERE子句中连接两个或者多个条件。
AND条件的两旁必须都为true (真),即两个条件都同时满足的时候,这些行才将被显示。
当然,你也可以使用OR运算符,它也可以在WHERE子句中连接两个或者多个条件。
但是,只要OR运算符两旁有一个为true的时候条件就满足了,因此行才会被显示。
所以你使用OR运算符的时候,可以是OR运算符两旁只有一个为true或者两旁都为true。
下面举个例子吧:
SELECT employeeid, firstname, lastname, title, salary
FROM employee_info
WHERE salary >= 50000.00 AND title = 'Programmer';
这条SQL语句是从employee_info表中选择salary大于等于50000.00并且title等于'Programmer'的列employeeid、firstname、lastname、title和salary。
此时必须AND运算符两旁的条件都为真,行才会最为检索结果返回。
如果其中有一个条件为假,那么就什么都没有显示。
你可以使用圆括号将条件括起来,虽然它们也不一定是必须的,但是括起来看起来更清晰一些,这是一个编程习惯的问题。
比如:
SELECT employeeid, firstname, lastname, title, salary
FROM employee_info
WHERE (salary >= 50000.00) AND (title = 'Programmer');
下面再举个例子:
SELECT firstname, lastname, title, salary
FROM employee_info
WHERE (title = 'Sales') OR (title = 'Programmer');
这条语句将从employee_info表中选择title等于'Sales'或者等于'Programmer'的列firstname、lastname, title和salary。
(15)IN 和BETWEEN 条件运算符
下面是IN条件运算符的SQL语句:。