下载
下载
第6章 SQL 语 言
在这一章中,我们要学习关系数据库的查询、操纵和定义语言
—
S Q L 语言。用户可以用
Query Analyzer使用SQL 语言。为了方便SQL 语言的学习,本章中的所有例子都是基于 p u b s
数据库。这一章是帮助读者巩固 S Q L基础。如果你已经熟悉 S Q L语句,你可以跳过这一章。
S Q L (结构化查询语言)是一种在关系数据库中定义和操纵数据的标准语言。其基本格
式类似于英语语法,它最早是 1 9 7 4 年由B o y c e和C h a m b e r l i n提出的(当时称作 S E Q U E L语言),
后来在1 9 7 6 年,由I B M 公司的San Jose研究所在研制关系数据库管理系统 System R时修改为
S E Q U E L 2 ,也就是目前的S Q L。1 9 8 6 年美国国家标准化组织 A N S I 确认S Q L作为数据库系统的
工业标准。
S Q L语言的最大特点是直观、简单易学,初学者经过较短的学习就可以使用 S Q L 进行数
据库的存取操作。
S Q L语言通常分成 4类:查询语言( S E L E C T )、操纵语言( I N S E RT 、U P D AT E、
D E L E T E )、定义语言(C R E AT E、A LT E R、D R O P )和控制语言(C O M M I T、R O L L B A C K )。
其中数据定义语言已经在第 5章“创建和管理数据库”中讲解。我们将在本章讲解查询语言和
操纵语言。控制语言等在其他章节讲解。
6.1 查询语言
正如你所知道的,数据库存在的意义在于将数据组织在一起,使它们更容易为人获取。
“查询”这个名词用来描述怎样从数据库中获取数据和操纵数据。查询是 Tr a n s a c t - S Q L 语句,
经常是在 S Q L 企业管理器的查询工具中被执行。也可以使用其他的用户界面,例如 Q u e r y
A n a l y z e r 和O S Q L,执行查询。
当针对一个数据库执行查询时,是用它来返回你寻找的数据信息。例如,你可能想要列
出在美国和你有商业往来的客户的信息。广义上讲查询也用于直接操纵数据,使用查询可以
向表中插入数据、更新表中的数据,或是从表中删除数据。任何时候你使用 Tr a n s a c t - S Q L 与
SQL Server中的数据进行交互时,都是在执行一个查询。查询可以一次性地执行,也可以保
存下来,以便以后多次执行。虽然数据库管理员并不需要成为专家一级的查询编写者,但是
学习查询的基本知识是很重要的。查询是数据库管理员和 SQL Server数据库进行交互的主要
手段。
S Q L 语言中最主要、最核心的部分是它的查询功能。查询语言用来对已经存在于数据库
中的数据按照特定的组合、条件表达式或次序进行检索,其基本格式是由 S E L E C T 子句、
F R O M 子句和W H E R E 子句组成的查询块:
SELECT <列名表>
F R O M < 表或视图名>
W H E R E <查询限定条件>
也就是说,S E L E C T指定了你想要看哪些列数据,F R O M指定这些数据来自哪些表或视图,
第6章 SQL 语 言 109
下载
W H E R E指定了你想看哪些行。在 S Q L 语言中除了查询以外,许多其他功能也都离不开
S E L E C T语句,如创建视图,实际上是利用查询语句来实现的,又比如插入数据时,有很多时
候是从另外一张或多张表中选择符合条件的数据。所以,掌握查询语句是掌握 S Q L 语言的关
键。下面我们详细讲解S E L E C T语句。
以下是SQL Server 中的S E L E C T语句的完整用法。我们会通过示例详细解释每项的作用。
SELECT select_list
[ I N TO new_table_]
FROM table_source
[WHERE search_condition]
[GROUP BY group_by_expression]
[ H AVING search_condition]
[ORDER BY order_expression [ASC | DESC] ]
6.2 简单查询
6.2.1 检索表中所有列
格式:SELECT * FROM TA B L E _ N A M E
例 查询所有作者的信息
SELECT* FROM AUTHORS
该查询语句执行后的结果是显示表 A U T H O R S 的所有作者信息。如图6 - 1所示。
图6-1 查询结果
6.2.2 检索表中特定列
格式:
SELECT COLUMN_NAME[,...n]
FROM TA B L E _ N A M E
例 查询所有作者的作者号、姓名信息
SELECT au_id,AU_FNAME,AU_LNAME FROM AUTHORS
在查找多列内容时,用‘,’将各字段分开。该语句执行结果为:
au_id AU_FNAME AU_LNAME
----------------- ------------------------------ -----------------------
409-56-7008 Abraham B e n n e t
648-92-1872 Reginald B l o t c h e t - H a l l s
238-95-7766 Cheryl C a r s o n
722-51-5454 Michel D e F r a n c e
712-45-1867 Innes del Castillo
427-17-2319 Ann D u l l
213-46-8915 Marjorie G r e e n
527-72-3246 Morningstar G r e e n e
472-27-2349 Burt G r i n g l e s b y
846-92-7186 Sheryl H u n t e r
756-30-7391 Livia K a r s e n
486-29-1786 Charlene L o c k s l e y
724-80-9391 Stearns M a c F e a t h e r
8 9 3 - 7 2 - 1158 Heather M c B a d d e n
267-41-2394 Michael O ' L e a r y
807-91-6654 Sylvia P a n t e l e y
998-72-3567 Albert R i n g e r
899-46-2035 Anne R i n g e r
341-22-1782 Meander S m i t h
274-80-9391 Dean S t r a i g h t
724-08-9931 Dirk S t r i n g e r
1 7 2 - 3 2 - 1176 Johnson W h i t e
672-71-3249 Akiko Yo k o m o t o
(23 row(s) aff e c t e d )
6.2.3 重排列序
在S E L E C T后的列名的顺序决定了显示结果中的列序。如果你想把姓名信息排在第一列,
则语句应该写成:
SELECT AU_FNAME,AU_LNAME,AU_ID FROM AUTHORS
该语句的执行结果为:
A U _ F N A M E A U _ L N A M E AU_ID
-------------------- --------------------------------- -------------------
A b r a h a m B e n n e t 4 0 9 - 5 6 - 7 0 0 8
R e g i n a l d B l o t c h e t - H a l l s 6 4 8 - 9 2 - 1 8 7 2
C h e r y l C a r s o n 2 3 8 - 9 5 - 7 7 6 6
M i c h e l D e F r a n c e 7 2 2 - 5 1 - 5 4 5 4
I n n e s del Castillo 7 1 2 - 4 5 - 1 8 6 7
A n n D u l l 4 2 7 - 1 7 - 2 3 1 9
Marjorie G r e e n 2 1 3 - 4 6 - 8 9 1 5
M o r n i n g s t a r G r e e n e 5 2 7 - 7 2 - 3 2 4 6
B u r t G r i n g l e s b y 4 7 2 - 2 7 - 2 3 4 9
S h e r y l H u n t e r 8 4 6 - 9 2 - 7 1 8 6
L i v i a K a r s e n 7 5 6 - 3 0 - 7 3 9 1
C h a r l e n e L o c k s l e y 4 8 6 - 2 9 - 1 7 8 6
S t e a r n s M a c F e a t h e r 7 2 4 - 8 0 - 9 3 9 1
H e a t h e r M c B a d d e n 8 9 3 - 7 2 - 11 5 8
M i c h a e l O ' L e a r y 2 6 7 - 4 1 - 2 3 9 4
S y l v i a P a n t e l e y 8 0 7 - 9 1 - 6 6 5 4
A l b e r t R i n g e r 9 9 8 - 7 2 - 3 5 6 7
110 S Q L Server 7关系数据库系统管理与开发指南
下载
第6章 SQL 语 言 111
下载
A n n e R i n g e r 8 9 9 - 4 6 - 2 0 3 5
M e a n d e r S m i t h 3 4 1 - 2 2 - 1 7 8 2
D e a n S t r a i g h t 2 7 4 - 8 0 - 9 3 9 1
D i r k S t r i n g e r 7 2 4 - 0 8 - 9 9 3 1
J o h n s o n W h i t e 1 7 2 - 3 2 - 11 7 6
A k i k o Yo k o m o t o 6 7 2 - 7 1 - 3 2 4 9
(23 row(s) aff e c t e d )
6.2.4 用单引号加入字符串
格式:
SELECT COLUMN_NAME|'STRING LITERAL'[,...n]
FROM TA B L E _ N A M E
例 查询所有作者的姓名和作者号信息,并且在每个作者的作者号前面显示字符串“身份
证号:”表明显示信息是身份证信息。
SELECT AU_FNAME,AU_LNAME,'身份证号:' , A U _ I D
FROM AUTHORS
显示结果为:
AU_FNAME A U _ L N A M E AU_ID
------------------------------- --------------------------- --------------------------------------------------
A b r a h a m B e n n e t 身份证号: 4 0 9 - 5 6 - 7 0 0 8
R e g i n a l d B l o t c h e t - H a l l s 身份证号: 6 4 8 - 9 2 - 1 8 7 2
C h e r y l C a r s o n 身份证号: 2 3 8 - 9 5 - 7 7 6 6
M i c h e l D e F r a n c e 身份证号: 7 2 2 - 5 1 - 5 4 5 4
I n n e s del Castillo 身份证号: 7 1 2 - 4 5 - 1 8 6 7
A n n D u l l 身份证号: 4 2 7 - 1 7 - 2 3 1 9
M a r j o r i e G r e e n 身份证号: 2 1 3 - 4 6 - 8 9 1 5
M o r n i n g s t a r G r e e n e 身份证号: 5 2 7 - 7 2 - 3 2 4 6
B u r t G r i n g l e s b y 身份证号: 4 7 2 - 2 7 - 2 3 4 9
S h e r y l H u n t e r 身份证号: 8 4 6 - 9 2 - 7 1 8 6
L i v i a K a r s e n 身份证号: 7 5 6 - 3 0 - 7 3 9 1
C h a r l e n e L o c k s l e y 身份证号: 4 8 6 - 2 9 - 1 7 8 6
S t e a r n s M a c F e a t h e r 身份证号: 7 2 4 - 8 0 - 9 3 9 1
H e a t h e r M c B a d d e n 身份证号: 8 9 3 - 7 2 - 11 5 8
M i c h a e l O ' L e a r y 身份证号: 2 6 7 - 4 1 - 2 3 9 4
S y l v i a P a n t e l e y 身份证号: 8 0 7 - 9 1 - 6 6 5 4
A l b e r t R i n g e r 身份证号: 9 9 8 - 7 2 - 3 5 6 7
A n n e R i n g e r 身份证号: 8 9 9 - 4 6 - 2 0 3 5
M e a n d e r S m i t h 身份证号: 3 4 1 - 2 2 - 1 7 8 2
D e a n S t r a i g h t 身份证号: 2 7 4 - 8 0 - 9 3 9 1
D i r k S t r i n g e r 身份证号: 7 2 4 - 0 8 - 9 9 3 1
J o h n s o n W h i t e 身份证号: 1 7 2 - 3 2 - 11 7 6
A k i k o Yo k o m o t o 身份证号: 6 7 2 - 7 1 - 3 2 4 9
(23 row(s) aff e c t e d )
6.2.5 改变列标题
正如上面显示的结果,在缺省情况下,显示的查询结果中的列标题是列名。但你可以改