您的位置:首页 > 数据库

第5章Transact-SQL 及其程 序设计基础

2013-09-13 08:18 260 查看

5.1 SQL语言

SQL的全称为Structured Query Language(结构化查询语言),是一种非过程性(non-procedural)语言,因为SQL 决定了应该做什么而不是如何去做数据库必需实现SQL

5.1.1 概述

5.1.2 SQL语言的分类

SQL语言按照用途可以分为如下3类:

DDL(Data Definition Language) 数据定义语言。
DML(Data Manipulation Language) 数据处理语言。
DCL(Data Control Language) 数据控制语言。

1. 数据定义语言

定义数据库对象等

2. 数据处理语言

3. 数据控制语言

举个简单的银行转账的例子。假设要从A账户中转10 000元到B账户中,首先从A账户中扣除10 000元,然后在B账户中加入10 000元。但是,如果从A账户中扣除10000元后,出

现错误,导致下一步在B账户中加入10 000元的操作不能完成,则A账户白白被扣除了10000元。应保证这些操作要么一起完成,要么都不要执行。这种方式在SQL中称做事务(Transaction)。

在SQL中,可以使用DCL将数个SQL语句组合起来,然后交给数据库系统一并处理

5.2 Transact-SQL基础

5.2.1 在SQL Server Management Studio中执行SQL语句

5.2.2 数据查询

完整的SELECT语句的用法如下所示:
SELECT select_list

[INTO new_talbe]

FROM table_source

[WHERE search_condition]

[GROUP BY group_by_expression]

[HAVING search_condition]

[ORDER BY order_expression [ASC | DESC]]

1. 查询表中所有的列

我用的是sql的示例数据库,用查询语句select * from Employee的时候,出现

消息 208,级别 16,状态 1,第 1 行

对象名 'dbo.Employee' 无效。

但是在表名前面添加架构名

select * from HumanResources.Employee

就查询成功。

请问为什么呢?怎样才能不用再表名前面添加架构名?实现select * from Employee??

2. 查询表中指定的列

使用格式:SELECT column_name[,…n] FROM table_name

说明:多个字段用逗号“,”隔开。

例如:SELECT price,book_name FROM book

3. 使用单引号加入字符串

例如,要查询所有书籍的名称和价格,并在价格前面显示字符串“价格为:”,可输

入下面的SQL语句:

SELECT book_name,'价格为:',price FROM book

4. 使用别名

在显示结果时,可以指定以别名来代替原来的字段名称,总共有3种方法:
采用“别名 AS 字段名称”的格式。
采用“字段名称 别名”的格式。
采用“别名=字段名称”的格式,其中别名用单引号括起来。

例如,查询所有书籍的名称和价格,并在标题栏中显示“书名”和“价格”字样,而不是显示book_name和price,可输入下面的SQL语句:

SELECT book_name AS 书名,price AS 价格 FROM book

或者 SELECT book_name 书名,price 价格 FROM book

或者 SELECT '书名'=book_name,'价格'=price FROM book

5. 查询特定的记录(where)

6. 对查询结果进行排序

[ORDER BY order_expression [ASC | DESC]]

其中各项含义如下:
order_expression为排序的表达式,可以是一个列、列的别名、表达式或者非零的整数值,而非零的整数值则表示列、别名或者表达式在选择列表中的位置。
后续关键字ASC表示升序排列,DESC表示降序排列,默认值为ASC,排序时,空值(NULL)被认为是最小值。

注 意:ntext、text和image数据类型的字段不能用作ORDER BY排序的字段。

--------------
text 是字节格式存储英文用的,也可以存中文但有时候会显示成乱码

ntext 是多字节格式存储unicode的,也就是存储各种文字用的。
二进制数据用image数据类型。

大容量文本数据用text或ntext类型,text与ntext的区别是:text用单字节保存数据,ntext固定用双字节保存数据,ntext支持跨语言平台。

-------------
例如:
SELECT * FROM book ORDER BY price

DESC

7. 多表查询

例如,要显示书籍的书名和作者,此时就涉及到多个表的查询。因为书名在book表中,而作者姓名则在authors表中。限定条件则为book表中的author_id字段和authors表的author_id字段的值相同。

输入下面的SQL语句:

SELECT book.book_name,authors.author_name

FROM book,authors

WHERE book.author_id=authors.author_id

8. 消除重复的行

SELECT distinct publisher FROM book

5.2.3 数据插入和删除

INSERT [INTO] table_name [column_list]

VALUES(data_values)

其中各项参数的含义如下:

table_name 要新增数据的表或者视图名称。
column_list 要新增数据的字段名称,若没有指定字段列表,则指全部字段。
data_values 新增记录的字段值,必须和column_list相对应,也就是说每一个字段必须对应到一个字段值。

在表authors中插入一笔记录,即新增一个作者。输入SQL语句如下:INSERT authors(author_id,author_name) VALUES(3,'张英魁')
要删除数据,可以使用DELETE语句

如果要删除表中所有的行,则可以使用truncate语句,其语法格式如下:TRUNCATE TABLE table_name

提 示:TRUNCATE TABLE在功能上与不带WHERE子句的DELETE语句相同:二者均删除表中的全部行。
DELETE语句每次删除一行,并在事务日志中为所删除的每行记录一项。

TRUNCATE TABLE通过释放存储表数据所用的数据页来删除数据,并且只在事务日志中记录页的释放。因此TRUUNCATE TABLE比DELETE速度快,且使用的系统和事务日志资源少。另外,TRUNCATE TABLE删除表中的所有行,但表结构及其列、约束、索引等保持不变。新行标识所用的计数值重置为该列的种子。如果想保留标识计数值,可以使用DELETE。如果要删除表定义及其数据,可以使用DROP TABLE语句。

------------------
truncate 删除所有记录,重置表(最明显的是自动id归零)

delete 删除记录,自动id继续

drop 删完整个表(而不是记录)

truncate,delete:两个是删除数据表中的数据的操作,属于DML(数据操纵语言);

drop 是删除表定义的操作,属于DDL(数据库模式定义语言);

---------------------

5.2.4 数据修改

UPDATE table_name SET column[WHERE condition]

例如,将authors表中作者为“王小明”全部改为“王晓明”,SQL语句如下:
UPDATE authors SET author_name='王晓明'

WHERE author_name='王小明'
5.2.5 使用函数

例如,在orderform表中,提交一笔订单,在插入数据时,即可使用GETDATE()函数来获取当前的日期。为了保持数据完整性,首先在clients表中插入一个客户,然后再在

orderform表中提交一笔订单。输入下面的SQL语句:

INSERT clients VALUES(1,'刘明耀','北京市海淀区')

INSERT orderform VALUES(1,2,50,GETDATE(),1)

————————————————————————————————————————————————
从123页实际117页开始不再详细复制……
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: