一:SQL简介
通过编写SQL语句来维护数据库便于解决重复或批量维护数据的难题
1、 SQL和T-SQL
SQL是关系数据库的标准语言
a) 非过程化语言
- 一次只处理一个记录,对数据提供自动导航功能
- SQL的集合特性允许一条SQL语句的输出作为另一条SQL语句的输入
- SQL语句使用查询优化器,不要求用户指定数据的存放方法
b) 统一的语言
- Sql提供:
- 查询数据
- 在表中插入、修改、删除记录
- 建立、修改、删除数据对象
- 控制对数据和数据对象的存取
- 保证数据库一致性和完整性
c) 所有关系数据库的公共语言
2、 T-SQL的组成
a) 数据操纵语言:用来查询、插入、删除、修改数据库中的数据
b) 数据定义语言:从来建立数据库、数据库对象、定义列
c) 数据控制语言:控制数据库组件的存取许可、存取权限等
二:使用T-SQL语句操作数据表
1、 插入数据:INSERT
a) 语法:INSERT [INTO] <表名> [列名] VALUES <值列表>
- [into] 是可选的,可以省略
- 表名是必须的,表的列名可选的
- 多个列名和多个值列表用逗号分隔
b) 注意:
- 每次插入一整行数据
- 数据值的数目必须与列数相同,数据类型和精度与列匹配
- Insert语句不能为标识列指定值
- 对于字符类型的列,当插入数据的时候,需要使用单引号
- 如果表中某列不能为空,则该列必须插入数据
- 插入数据要符合check约束的要求
- 尽量明确指定插入的列和对应的值
2、 更新数据:UPDATE
a) 语法:UPDATE <表名> SET <列名=更新值> [WHERE <更新条件>]
- SET后面可以紧随多个数据列的更新值,不限一个
- WHERE子句是可选的,用来限制条件,如果不限制,则整个表的所有数据行将被更新
3、 删除数据:DELETE
a) 使用delete语句删除表中的数据
- 语法:DELETE FROM <表名> [WHRER <删除条件>]
b) 使用Truncate table 语句删除表中的数据
- 语法:truncate table <表名>
c) 区别:
- Truncate table语句不带where子句,只能将整个表数据清空,
Delete语句带where子句,可以按条件删除某些数据
- Truncate table语句不记录事务日志,
Delete语句记录所有事务日志
- Truncate table删除表中所有行,标识行会重置为0
Delete语句不会重置标识列
- Truncate table语句不能用于有外键约束引用的表,
Delete可以
- Truncate table语句执行速度更快,适用于清空大量数据,且不需要恢复
三:使用T-SQL查询数据
1、 SELECT语法结构
a) 语法:SELECT <列名> FROM <表名> WHERE <查询限定条件>
b) 语法:
SELECE select_list
[INTO new_table_name]
FROM table_name
[WHERE search_conditions]
[GROUP BY group_by_expression] [HAVINS search_conditions]
[ORDER BY order_expression [ASC | DESC] ]
- 说明:
- Select子句:指定查询内容。
- Select_list:指定查询字段列表
- INTO子句:可选,把查询结果存放到一个新表中
- FROM子句:指定查询源
- WHERE子句:可选,查询条件
- GROUP BY子句:可选,指定查询结果的分组条件
- HAVING子句:可选,指定分组搜索条件
- ORDER BY子句:可选,指定查询结果的排序方式,ASC:升序,DESC:降序
2、 表达式
a) 条件表达式
- 表达式中包含一个或多个参数:
- 常量:表示单个指定数据值的符号,小写字母、大写字母、数字、特殊符号。字母、日期和时间需要单引号括起来
- 列名:表中列的名称,表达式中仅允许使用列的名称
- {一元运算符}:仅有一个操作数的运算符,“+”正数。“—”负数,“~”补数
- {二元运算符}:将两个操作数组合执行操作的运算符,算数运算符、赋值运算符(=),位运算符,比较运算符,逻辑运算符,字符串串联运算符(+)
比较运算符 |
|
= |
等于 |
> |
大于 |
< |
小于 |
>= |
大于等于 |
<= |
小于等于 |
<> |
不等于 |
!= |
不等于 |
Between |
指定值的的包含范围(包含边界),使用and分隔开始值和结束值 |
is [not] null |
指定是否搜索空值或非空值 |
Like |
模糊查询,与指定字符串进行模糊匹配 |
in |
是否在数据范围里面 |
通配符 |
|
‘_’ |
任何单个字符 |
% |
任意长度的字符串 |
[] |
括号中所指定范围内的一个字符 |
[^] |
不在括号中所指定范围内的任意一个字符 |
a) 逻辑表达式
a) 当一个语句中用了多个逻辑运算符时,先求not的值,然后求and的值,最后求or的值
逻辑运算符 |
|
Not |
取反 |
And |
并且 |
Or |
或者 |
3、 查询举例
a) 查询表中所有列
- Select * from 表名
b) 查询表中特定列
- Select 列名,列名 from 表名
c) 查询表中特定行——条件查询
- Select * from 表名 where 条件
d) 限制查询返回的行数
- Select top 数字 * from 表名
e) 改变查询结果集列名称
- Select 列名 AS 新列名 from 表名
- Select 列名 新列名 from 表名
- Select 新列名=列名 from 表名
f) 查询结果排序
- Select * from 表名 order by 列名 [ASC | DESC]
g) 查询时去重
- Select distinct 列名 from 表名
h) 综合查询
4、 使用SELECT生成新数据
a) Select使用into关键字
- Select使用into关键字可以从一个表中选择一些数据插入新表中,新表自动生成
- Select 列名,列名,列名 into 新表名 from 旧表名
b) insert使用select子句
- 可以将现有表中数据添加到新标中,新表需要提前创好
- Insert into 新表名 (列名,列名,列名) select 列名,列名,列名 from 旧表名 where 条件
c) 使用union关键字
- 用于将多个不同的数据或查询结果合并成一个新的结果集
- 不同的数据或查询结果要求数据个数、顺序、数据类型都一致
- 需要提前创建新表
- Insert into 新表 (列名1,列名2,列名3)
Select ‘列1值’,’列2值’,’列3值’ union
Select ‘列1值’,’列2值’,’列3值’ union
Select 列名1,列名2,列名3 from 旧表名