1、老代向大家推荐SQL 语言入门教程第一课 简介SQL 是英文 Structured Query Language 的缩写,意思为结构化查询语言。 SQL 语言的主要功能就是同各种数据库建立联系,进行沟通。按照 ANSI(美国国家标准协会)的规定,SQL 被作为关系型数据库管理系统的标准语言。SQL 语句可以用来执行各种各样的操作,例如更新数据库中的数据,从数据库中提取数据等。 目前,绝大多数流行的关系型数据库管理系统,如 Oracle, Sybase, Microsoft SQL Server, Access 等都采用了 SQL 语言标准。虽然很多数据库都对 SQL 语句进行了再开发和扩展,但
2、是包括 Select, Insert, Update, Delete, Create, 以及 Drop 在内的标准的 SQL 命令仍然可以被用来完成几乎所有的数据库操作。 下面,我们就来详细介绍一下 SQL 语言的基本知识。一个典型的关系型数据库通常由一个或多个被称作表格的对象组成。数据库中的所有数据或信息都被保存在这些数据库表格中。数据库中的每一个表格都具有自己唯一的表格名称,都是由行和列组成,其中每一列包括了该列名称,数据类型,以及列的其它属性等信息,而行则具体包含某一列的记录或数据。以下,是一个名为太平洋网络学院的数据库表格的实例。栏目 用户群新手上路 电脑初学者软件教室 一般的电脑用户
3、设计教室 电脑设计爱好者开发教室 电脑编程人员该表格中“栏目” , “用户群”就是两个不同的列,而表格中的每一行则包含了具体的表格数据。1. 创建表格2. 数据查询3. 向表格中添加、更新、删除记录4. 删除数据库表格第二课 创建表格 SQL 语言中的 create table 语句被用来建立新的数据库表格。create table 语句的使用格式如下: create table tablename (column1 data type,老代向大家推荐 column2 data type, column3 data type); 如果用户希望在建立新表格时规定列的限制条件,可以使用可选的条件选
4、项: 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 后面加入所要建立的表格的名称,然后在括号内顺次设
5、定各列的名称,数据类型,以及可选的限制条件等。注意,所有的 SQL语句在结尾处都要使用“;”符号。 使用 SQL 语句创建的数据库表格和表格中列的名称必须以字母开头,后面可以使用字母,数字或下划线,名称的长度不能超过 30 个字符。注意,用户在选择表格名称时不要使用 SQL 语言中的保留关键词,如 select, create, insert 等,作为表格或列的名称。 数据类型用来设定某一个具体列中数据的类型。例如,在姓名列中只能采用 varchar或 char 的数据类型,而不能使用 number 的数据类型。 SQL 语言中较为常用的数据类型为: char(size):固定长度字符串,其中
6、括号中的 size 用来设定字符串的最大长度。 Char 类型的最大长度为 255 字节。 varchar(size):可变长度字符串,最大长度由 size 设定。 number(size):数字类型,其中数字的最大位数由 size 设定。 Date:日期类型。 number(size,d):数字类型,size 决定该数字总的最大位数,而 d 则用于设定该数字在小数点后的位数。 最后,在创建新表格时需要注意的一点就是表格中列的限制条件。所谓限制条件就是当向特定列输入数据时所必须遵守的规则。例如,unique 这一限制条件要求某一列中不能存在两个值相同的记录,所有记录的值都必须是唯一的。除 un
7、ique 之外,较为常用的列的限制条件还包括 not null 和 primary key 等。not null 用来规定表格中某一列的值不能为空。primary key 则为表格中的所有记录规定了唯一的标识符。第三课 数据查询在众多的 SQL 命令中,select 语句应该算是使用最频繁的。select 语句主要被用来对数据库进行查询并返回符合用户查询标准的结果数据。Select 语句的语法格式如下: select column1 , column2,etc from tablename where condition; ( 表示可选项)老代向大家推荐 select 语句中位于 select
8、 关键词之后的列名用来决定那些列将作为查询结果返回。用户可以按照自己的需要选择任意列,还可以使用通配符“*”来设定返回表格中的所有列。 select 语句中位于 from 关键词之后的表格名称用来决定将要进行查询操作的目标表格。 Select 语句中的 where 可选从句用来规定哪些数据值或哪些行将被作为查询结果返回或显示。 在 where 条件从句中可以使用以下一些运算符来设定查询标准: = 等于 大于 = 大于等于 不等于 除了上面所提到的运算符外,LIKE 运算符在 where 条件从句中也非常重要。LIKE 运算符的功能非常强大,通过使用 LIKE 运算符可以设定只选择与用户规定格式
9、相同的记录。此外,我们还可以使用通配符“%”用来代替任何字符串。举例如下: select firstname, lastname, city from employee where firstname LIKE E%; (注意,字符串必须被包含在单括号内) 上述 SQL 语句将会查询所有名称以 E 开头的姓名。或者,通过如下语句: select * from employee where firstname = May; 查询所有名称为 May 的行。第四课 向表格中添加、更新、删除记录添加新记录SQL 语言使用 insert 语句向数据库表格中插入或添加新的数据行。Insert 语句的使用格
10、式如下: insert into tablename (first_column,.last_column) values (first_value,.last_value); 例如: insert into employee (firstname, lastname, age, address, city) values (Li,Ming,45, No.77 Changan Road,Beijing); 简单来说,当向数据库表格中添加新记录时,在关键词 insert into 后面输入所要添加的表格名称,然后在括号中列出将要添加新值的列的名称。最后,在关键词 values 的后面按照前面输入
11、的列的顺序对应的输入所有要添加的记录值。 更新记录 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= Maryand last_name= Williams; 使用
12、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 从句中设定删除记录的判断条件。注意,如果用
13、户在使用 delete 语句时不设定 where 从句,则表格中的所有记录将全部被删除。第五课 删除数据库表格在 SQL 语言中使用 drop table 命令删除某个表格以及该表格中的所有记录。drop table命令的使用格式为: drop table tablename; 例如: drop table employee; 如果用户希望将某个数据库表格完全删除,只需要在 drop table 命令后输入希望删除的表格名称即可。drop table 命令的作用与删除表格中的所有记录不同。删除表格中的全部记录之后,该表格仍然存在,而且表格中列的信息不会改变。而使用 drop table 命令则
14、会将整个数据库表格的所有信息全部删除。 以上,我们对 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
15、Sales Los Angeles $1800 San Diego $250 Boston $700老代向大家推荐SQL 循序渐进SQL 循序渐进(目录)SQL 循序渐进(1)-介绍 SQLSQL 循序渐进(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 循序渐
16、进(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 和 ALLSQL 循序渐进 (23) -UNION 和 外部连接SQL 循序渐进 (24) -嵌入 SQL (1)介绍 SQLSQL(Structured Qu
17、ery Language,结构查询语言) 是一个功能强大的数据库语言。SQL通常使用于数据库的通讯。ANSI(美国国家标准学会)声称,SQL 是关系数据库管理系统的标准语言。SQL 语句通常用于完成一些数据库的操作任务,比如在数据库中更新数据,或者从数据库中检索数据。使用 SQL 的常见关系数据库管理系统有:Oracle、 Sybase、 Microsoft SQL Server、 Access、 Ingres 等等。虽然绝大多数的数据库系统使用 SQL,但是它们同样有它们自立另外的专有扩展功能用于它们的系统。但是,标准的 SQL 命令,比如“Select“、 “Insert“、 “Updat
18、e“、 “Delete“、 “Create“和 “Drop“常常被用于完成绝大多数数据库的操作。但是,不象其它的语言,如 C、Pascal 等,SQL 没有循环结构(比如 if-then-else、do-while)以及函数定义等等的功能。而且 SQL 只有一个数据类型的固定设置,换句话说,老代向大家推荐你不能在使用其它编程语言的时候创建你自己的数据类型。SQL 功能强大,但是概括起来,它可以分成以下几组:DML(Data Manipulation Language,数据操作语言):用于检索或者修改数据; DDL( Data Definition Language,数据定义语言): 用于定义数
19、据的结构,比如 创建、修改或者删除数据库对象; DCL(Data Control Language,数据控制语言):用于定义数据库用户的权限。DML 组可以细分为以下的几个语句:SELECT:用于检索数据; INSERT:用于增加数据到数据库; UPDATE:用于从数据库中修改现存的数据 DELETE:用于从数据库中删除数据。DDL 语句可以用于创建用户和重建数据库对象。下面是 DDL 命令:CREATE TABLE ALTER TABLE DROP TABLE CREATE INDEX DROP INDEXDCL 命令用于创建关系用户访问以及授权的对象。下面是几个 DCL 命令: ALTER
20、 PASSWORD GRANT REVOKE CREATE SYNONYM为了让你对 SQL 有一个直观的认识,下面先给出一个简单 SQL 语句的例子:我们使用 SQL 语句来从 Employees 中检索 Department ID 为 CS 的姓名:SELECT Employees.NameFROM EmployeesWHERE Employees.DeptID = “CS“可能你现在一开始不太理解这些语句,也许你会一头雾水,不要紧的,通过本教程的学习后,你会发现这段语句是多么的普通。为了不让你困惑,下面我也进行一番解释:先对 FROM 子句吧,语句中的 FROM Employees 意思
21、是从 Employees 表中检索数据。而语句 WHERE Employees.DeptID = “CS“意思是检索 Employees 的 DeptID 列为”CS ”的行,这样 SQL 语句检索的结果将是 DeptID 为 CS 的列的所有数据,比如:EmpID Name Dept123 Purple CS124 Zsc CS最后,我们来解释一个 SELECT 子句,它指定了从 Name 列检索来的所有数据,比如NamePurpleZsc好吧,开始我们下一节的教程-表的基本知识。老代向大家推荐(2)表的基础知识关系数据库通常包含多个表。数据库实际上是表的集合,数据库的数据或者信息都是存储在
22、表中的。表是对数据进行存储和操作的一种逻辑结构,每一个表都代表一个对用户意义的对象。例如,一个公司数据库中,会有雇员表、部门表、库存表、销售表、工资表等等。我们经常见到的成绩表就是一种表,它是有行和列组成的,我们并且可以通过名字来识别数据。列包含了列的名字、数据类型以及列的其它属性;行包含了列的记录或者数据。下面给出一个成绩单,其中姓名、语文、数学、英语都是列,而行包含了这个表的数据,即每个人的各科成绩:姓名 语文 数学 英语王小童 78 100 87张柳风 85 92 95紫云飞 65 89 86黄天龙 98 67 75(3)数据检索在 SQL 中 SELECT 语句通常用于检索数据库,或者
23、检索满足你设定条件的数据,以下是简单的 SELECT 语句的格式:select “column1“,“column2“,etc from “tablename“where “condition“; = optional 其中列的名字跟着 SELECT 关键字,它决定了哪一列将被作为结果返回。你可以任意指定多个列,或者你可以使用“*“来选择所有的列。表的名字是紧跟着 FROM 关键字的,它指出了哪个表格将作为最后结果被查询。而 WHERE 子句(可选)指出哪个数据或者行将被返回或者显示,它是根据关键字WHERE 后面描述的条件而来的。在 WHERE 子句中可以有以下的条件选择:= 等于 大于=
24、大于等于不等于LIKE 参见以下注释注释:LIKE 模式匹配操作符同样可以使用在 WHERE 子句的条件条件中。LIKE 是一个功能强大的操作符,它可以让你选择你“喜欢“ 指定的行。百分号 “%“ 可以被用来匹配任何可能的字符,它可以出现在指定字符的前面或者后面,例如:老代向大家推荐select first, last, cityfrom empinfowhere first LIKE Er%; 以上这条 SQL 语句将会匹配任何名字以Er开始的名字,这里必须使用单引号。或者你也可以使用“%“在字符的前面,例如: select first, last from empinfowhere las
25、t LIKE %s; 这条 SQL 语句将会匹配任何名字以s结尾的名字。这个“%“的作用就跟 DOS 命令的“ 号很相似。select * from empinfowhere first = Eric; 以上的 SQL 语句只选择 first 名字为Eric的行。(4)创建表这个 create table 语句是用于创建一个新的表格。以下是一个简单创建表格语句的格式:create table “tablename“(“column1“ “data type“,“column2“ “data type“, “column3“ “data type“);如果你想使用可选的约束,创建表格的格式为:
26、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
27、(20);为了创建一个新表格,你可以在关键字 create table 之后跟着表的名字,然后一个圆左括号”( ”,然后是第一列的名字,再是这一列的数据类型,接着是任意的可选约束,最后是圆右括号”)” 。确保在开始表格内容之前使用圆左括号并且在表的最后一列定义之后使用圆右括号是相当重要的。你还要保证每一个列定义之间有逗号分隔。最后在 SQL 语句结束时候加上分号“;“。表格和列名必须以字母开头,第二个字符开始可以是字母、数字或者下划线,但是要保证名字的总长度不要超过 30 个字符。在定义表格和列名不要使用不要使用 SQL 预定的用于老代向大家推荐表格或者列名的关键字(比如“select“、“c
28、reate“ 、 “insert“等等) ,以避免错误的发生。数据类型是指在特定的列使用什么样数据的类型。如果一个列的名字为“Last_Name“,它是用来容纳人名的,所以这个特定列就应该采用“varchar“ (variable-length character,变长度的字符型) 数据类型。以下是几种常见的数据类型:char(size) :固定长度的字符串型。Size 是圆括号中指定的参数,它可以由用户随意设置,但是不能超过 255 个字节。varchar(size) :变长度的字符串型。它的最大长度是由括号中的参数 size 设定的。number(size):数值型。最大数字的位数由括号中
29、的参数 size 设置。date :日期数值型。number(size,d) :数值型。它的最大数字的位数由括号中的参数 sieze 设定,而括号中的参数 d 是设置小数点的位数。什么是约束呢?当表被创建的时候,可以一列也可以多列共用一个约束。约束是一个跟列有关的基本准则,返回的数据必须遵循这个准则。下面举个例子,一个约束指定在一列中不能有两个记录共用一个数值。它们必须单独的。其它两个流行的约束是:“not null“,它设置了列不能留空白,即一定要有数据;以及“primary key“(主键) ,主键约束定义了表中每一个记录(或行)的唯一标识。所有的这些将在以后的教程中再作进一步阐述。好吧,
30、也许你已经有跃跃欲试的冲动了。作为本节练习,下面我们自己来设计和创建表格。你可以开始创建一个公司的雇员表格。你需要创建一个包含 firstname、lastname、 title、 age 和 salary 的表格。(5)插入数据到表Insert 语句用于往表格中插入或者增加一行数据,它的格式为:insert into “tablename“(first_column,.last_column)values (first_value,.last_value); = optional 简单举个例子:insert into employee(first, last, age, address, c
31、ity)values (Luke, Duke, 45, 2130 Boars Nest, Hazard Co); 这里要注意:每一个字符窜都要用单引号括起来。为了往表中插入数据,要在关键字 insert into 之后紧跟着表名,然后是左圆括号,接着是以逗号分开的一系列的列名,再是一个右圆括号,然后在关键字 values 之后跟着一系列用圆括号括起的数值。这些数值是你要往表格中填入的数据,它们必须与指定的列名相匹配。字符串笔译用单引号括起来,而数字就不用。在上面的例子中,Luke必须与列 first 相匹配,而 45 必须与列 age 相匹配。假如你想往 employee 表格中插入以下数据;
32、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
33、命令跟从表中删除所有记录是不一样的:删除表中的所有记录是留下表格(只是它是空的)以及约束信息;而 drop table 是删除表的所有信息,包括所有行、表格以及约束信息等等。(7)更新记录Update 语句用于更新或者改变匹配指定条件的记录,它是通过构造一个 where 语句来实现的。其语句格式如下:update “tablename“set “columnname“ = “newvalue“,“nextcolumn“ = “newvalue2“.where “columnname“ OPERATOR “value“ and|or “column“ OPERATOR “value“; = op
34、tional 下面举个例子来说明:update phone_bookset area_code = 623where prefix = 979;以上语句是在 phone_book 表中,在 prefix=979 的行中将 area_code 设置为 623。update phone_bookset last_name = Smith, prefix=555, suffix=9292where last_name = Jones;而以上的这段语句是在 phone_book 中,在 last_name= Jones的行中将 last_name 设置为 Smith, prefix 为 555, su
35、ffix 为 9292。update employeeset age = age+1where 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 所有的秘书都叫做“Admi
36、nistrative Assistant“. 所以要将所有的标题标题都相应地修改。就作这几个练习,千万不可大意哟。老代向大家推荐(8)删除记录Delete 语句是用来从表中删除记录或者行,其语句格式为:delete from “tablename“where “columnname“ OPERATOR “value“ and|or “column“ OPERATOR “value“; = optional 下面还是举个例子:delete from employee;这条语句没有 where 语句,所以它将删除所有的记录,因此如果没有使用 where 的时候,要千万小心。如果你只要删除其中一行或
37、者几行,可以参考以下的语句:delete from employeewhere lastname = May; 这条语句是从 emplyee 表中删除 lastname 为May的行。delete from employeewhere firstname = Mike or firstname = Eric; 这条语句是从 emplyee 表中删除 firstname 为Mike或者Eric 的行。为了从表中删除一个完整的记录或者行,就直接在“delete from“ 后面加上表的名字,并且利用 where 指明符合什么条件的行要删除即可。如果你没有使用 where 子句,那么表中的所有记录或
38、者行将被删除。(9)SELECT 语句在上面的教程中已经有用到 SELECT 语句。在本节教程中将详细对它进行阐述。SELECT 语句是 SQL 的核心,在你的 SQL 语句中可能用的最多的就是 SELECT 语句了。由于大量的选项可以用于 SELECT 语句,所以整个教程好象就是围这 SELECT 语句转。当我们构造 SQL 查询语句(利用了 SELECT 语句)的时候,认识所有的可能选项和最好的或者最有效率的方法来实现是很有用的。这个教程将为你提供这些技能。SELECT 语句用于查询数据库并检索匹配你指定条件的选择数据。SELECT 语句有五个主要的子句子你可以选择,而 FROM 是唯一必
39、须的子句。每一个子句有大量的选择项、参数等等。这些子句将罗列在下面,而且它们每一个都将在以后的教程有更为详细的描述。以下是 SELECT 语句的格式:SELECT ALL | DISTINCT column1,column2FROM table1,table2WHERE “conditions“GROUP BY “column-list“HAVING “conditionsORDER BY “column-list“ ASC | DESC 下面举个例子:SELECT name, age, salaryFROM employeeWHERE age 50; 老代向大家推荐上面的这个语句将从 emp
40、loyee 表中选择 age 大于 50 的所有的 name、age 和 salary 列的数值。注意:一定要在 SQL 语句末尾加上一个分号。这个分号提示 SQL 语句已经结束并准备被解释。以下的表格给出了各种比较运算符号:= 等于 大于= 大于等于不等于LIKE 字符串比较测验举个例子吧:SELECT name, title, deptFROM employeeWHERE title LIKE Pro%;上面的语句是从 employee 表中选择 title 是以Pro为开头的 name、title 和 dept 列中的所有行或者数值。另外 ALL 和 DISTINCT 也是 SQL 中的
41、关键字,它们用于在你的查询结果中选择 ALL(缺省)或者“distinct“或者单一记录。如果你想在指定的列中检索单一记录,你可以使用“DISTINCT“ 关键子。 因为 DISTNCT 将会丢弃所有你在 SELECT 指定的列复制的记录,比如 : SELECT DISTINCT age FROM employee_info; 这条语句将返回所有在 employee_info 表中单一的 age 数据。而 ALL 就将显示所有指定的类,包括所有的复制数据。在没有指定的时候,这个 ALL 关键字是缺省的。(10)合计函数所有的合计函数如下表所示:老代向大家推荐MIN 返回一个给定列中最小的数值M
42、AX 返回一个给定列中最大的数值SUM 返回一个给定列中所有数值的总和AVG 返回一个给定列中所有数值的平均值COUNT 返回一个给定列中所有数值的个数COUNT(*) 返回一个表中的行数合计函数用于从 SELECT 语句中计算一个”返回列的数据”。它们是总结了所选数据列的结果。虽然它们需要“GROUP BY“子句(后面一个教程介绍),但是这些函数也可以在不用使用“GROUP BY“子句的情况被使用,比如 :SELECT AVG(salary)FROM employee;这条语句将返回单一的结果,它包含了从 employee 表中所有 salary 列数据的平均值。为了更好的理解,我们再举个例
43、子: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 表中选择
44、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(sa
45、lary), deptFROM employee GROUP BY dept; 老代向大家推荐这条语句将在每一个单独的部门中选择工资最高的工资。结果他们的 salary 和 dept 将被返回。(12)HAVING 子句HAVING 子句下面先给出 HAVING 子句的语法:SELECT column1, SUM(column2)FROM “list-of-tables“GROUP BY “column-list“HAVING “condition“; 这个 HAVING 子句允许你为每一个组指定条件,换句话说,可以根据你指定的条件来选择行。如果你想使用 HAVING 子句的话,它应该处再 G
46、ROUP BY 子句之后。下面将以一个例子来解释 HAVING 子句。假设我们的 employee 表中包含雇员的name、 departmen、salary 和 age。如果你想为每个部门中每个雇员选择平均工资的话,你可以使用下面的 SQL 语句:SELECT dept, avg(salary)FROM employeeGROUP BY dept; 当然,如果你还想只计算和显示 salary 大于 20000 的平均工资的话,你还可以加上HAVING 子句:SELECT dept, avg(salary)FROM employeeGROUP BY deptHAVING avg(salary)
47、 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, ag
48、e, salaryFROM employee_infoWHERE dept = SalesORDER BY salary; 老代向大家推荐这条 SQL 语句将从 employee_info 表中列 dept 等于Sales选择 employee_id,、dept、 name、 age 和 salary,并且根据他们的 salary 按升序的顺序来列出检索结果。如果你想对多列排序的话,那么在列与列之间要加上逗号,比如 :SELECT employee_id, dept, name, age, salaryFROM employee_infoWHERE dept = SalesORDER BY salary, age DESC;(14)组合条件和布尔运算符以下的 SQL 语句中就含有组合条件:SELECT column1, SUM(column2)FROM “list-of-tables“WHERE “condition1“ AND “