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

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页开始不再详细复制……







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值