- 作者简介:一名云计算网络运维人员、每天分享网络与运维的技术与干货。
- 公众号:网络豆
- 座右铭:低头赶路,敬事如仪
- 个人主页: 网络豆的主页
写在前面
本系列文章将会讲解SQL server 中 server T-SQL查询语句,并且会同步视频进行安装讲解。
视频教程:T-SQL查询语句教程
介绍
SQL Server是由微软公司开发的关系型数据库管理系统,现在是全世界主流数据库之一。它具备方便使用、可伸缩性好、相关软件集成程度高等优势,能够从单一的笔记本上运行或以高倍云服务器集群为基础,或在这两者之间任何一种方式上运行。
一.SQL简介
1.SQL和T-SQL
SQL (结构化查询语言)
- 关系数据库的标准语言
- 非过程化语言
- 统一的语言
T-SQL是Transact-SQL的缩写,是SQL在Microsoft SQL Server上的增强版,它是用来让应用程序与SQL Server沟通的主要语言。T-SQL提供标准SQL的DDL和DML功能,加上延伸的函数、系统预存程序以及程式设计结构(例如 IF 和 WHILE)让程式设计更有弹性。
2.T-SQL的组成
DML:数据操纵语言
- 查询,插入,删除和修改数据
DDL:数据定义语言
- 建立数据库,数据库对象和定义其列
DCL:数据控制语言
- 控制数据库组件的存储许可,储存权限等
二.使用T-SQL语句操作数据表
1.插入数据
代码语言:javascript复制insert [INTO] <表名> [列名] values <值列表>
# 可选 必须 可选
- 如果省略[列名],<值列表>与表中字段的顺序保持一致
- 多个列名和多个值列表用逗号分隔
例:
向employee表中插入一行数据
代码语言:javascript复制insert into employee (姓名, 身份证号, 职务, 出生日期, 基本工资)
VALUES ('郭靖', '111222333444555666',
'运维工程师, '1995/1/1', 8000)
2.更新数据
代码语言:javascript复制UPDATE <表名> SET <列名 = 更新值> [WHERE <更新条件>]
# 可选,用来限制更新条件
- 如果省略WHERE字句,表中所有数据行将被更新
例:
更改employee表中黄蓉的基本工资为11000
代码语言:javascript复制update employee SET 基本工资='11000'
WHERE 姓名='黄蓉'
3.删除数据
(1)DELETE语句
代码语言:javascript复制DELETE FROM <表名> [WHERE <删除条件>]
# 可选的, 用来限制删除条件
- 如果省略WHERE字句,表中所有数据行将被删除
例:
删除employee表中杨过的记录
代码语言:javascript复制DELETE FROM employee WHERE 姓名='杨过'
(2)Truncate Table语句
代码语言:javascript复制Truncate table <表名>
例:
删除employee表中的所有记录行
代码语言:javascript复制Truncate table employee
(3)Delete和Truncate table区别
条件删除 | 记录事物日志 | 重置标识符列 | 外键约束 | |
---|---|---|---|---|
Delete | 使用where子句按条件删除 | 是,数据可以恢复 | 否 | 可以用于含有外键约束的表 |
Truncate table | 只能清空整个表 | 否,数据无法恢复 | 重置标识符列为0 | 不能用于含有外键约束的表 |
- Truncate Table执行速度更快,用于清空大数据量表
- 在执行Truncate Table前要确保数据可删除
三.使用使用T-SQL语句查询数据
1.select 语法结构
代码语言:javascript复制SELECT select_list 指定查询内容
[INTO new_table_name] 把查询结果存放到一个新表中
FROM table_name 指定查询源
[ WHERE search_conditions ] 指定查询条件
[GROUP BY group_by_expression] 指定查询结果的分组条件
[HAVING search_conditions] 指定分组搜索条件,与GROUP BY子句一起使用
[ORDER BY order_expression [ASC|DESC] ] 指定查询结果的排序方式
2.条件表达式
- 不等于:<>或!=
- 指定值包含的范围:between... and .….
- 是否为空:isnull
- 模糊查询:like ,常与通配符%和_使用。
- 在数据范围里面:in()
比较运算符 | 含义 |
---|---|
= | 等于 |
> | 大于 |
< | 小于 |
>= | 大于或等于 |
<= | 小于或等于 |
<> | 不等于 |
!= | 不等于 |
BETWEEN | 指定值的包含范围(包含边界),使用 And 分隔开始值和结束值 |
IS [Not] NULL | 指定是否搜索空值或非空值 |
LIKE | 模糊查询,与指定字符串进行模式匹配 |
IN | 是否在数据范围里面 |
3.逻辑表达式
用逻辑运算符将条件连接起来
运算结果是一个逻辑值
- TRUE 或 FALSE
逻辑运算符 | 含义 |
---|---|
AND | 组合两个条件,并在两个条件都为True时取值为True |
OR | 组合两个条件,并在两个条件之一为 True 时取值为True |
NOT | 和其他操作符一起使用,取反的操作 |
4.查询列
查询表中所有列
代码语言:javascript复制SELECT * FROM table_name
查询employee 表中的所有员工信息、
代码语言:javascript复制SELECT * FROM employee
例:
查询employee表中姓名、职务、基本工资列的内容
代码语言:javascript复制SELECT 姓名,职务,基本工资 FROM employee
查询表中特定行—— 条件查询
代码语言:javascript复制SELECT select_list FROM table_name WHERE search_conditions
例:
查询所有运维工程师的姓名
代码语言:javascript复制SELECT 姓名 FROM employee WHERE 职务=’运维工程师’
查询基本工资为8000~10000的员工所有信息
代码语言:javascript复制SELECT * FROM employee
WHERE 基本工资 BETWEEN 8000 AND 10000
查询基本工资<10000或>20000的员工所有信息
代码语言:javascript复制SELECT * FROM employee
WHERE 基本工资<10000 OR 基本工资>20000
查询基本工资为8000、9000和1000的员工所有信息
代码语言:javascript复制SELECT * FROM employee WHERE 基本工资 IN (8000,9000,10000)
查询身份证号以66开头的员工所有信息
代码语言:javascript复制SELECT * FROM employee WHERE 身份证号 LIKE “66%”
查询姓杨的运维工程师的信息
代码语言:javascript复制SELECT * FROM employee
WHERE 姓名 LIKE '杨%' AND 职务=’运维工程师’
查询备注不为空的员工所有信息
代码语言:javascript复制SELECT * FROM employee WHERE 备注 is not NULL
查询employee表中前5行的数据
代码语言:javascript复制SELECT top 5 * FROM employee
5.改变查询结果集列名称
代码语言:javascript复制SELECT column_name AS column_alias FROM table_name
# 改变结果集的列名称
列:
查询employee表中姓名和身份证号两列数据
代码语言:javascript复制SELECT 姓名 AS name, 身份证号 as idcard FROM employee
6.查询结果排序
代码语言:javascript复制SELECT select_list
FROM table_name
ORDER BY column_name [ ASC | DESC ]
# 升序 降序
默认是升序(ASC)排列
例:
查询employee表中所有员工信息,按照基本工资从高到低显示查询结果
代码语言:javascript复制SELECT * FROM employee ORDER BY 基本工资 DESC
查时去重
代码语言:javascript复制SELECT DISTINCT column_name FROM table_name
查询employee表中员工的所有职务
代码语言:javascript复制SELECT DISTINCT 职务 FROM employee
7.使用SELECT生成新数据
SELECT使用INTO关键字
代码语言:javascript复制SELECT select_list INTO new_table_name #把一个表中的数据经过筛选插入到另一个表中
FROM table_name
例:
将employee表中所有员工的姓名、身份证号和职务生成一个新表new01
代码语言:javascript复制SELECT 姓名,身份证号,职务 INTO new01 FROM employee
使用UNION关键字
代码语言:javascript复制INSERT INTO table-name [column_name]
SELECT select_list1 UNION
SELECT select_list2 UNION
……
SELECT select_listn
UNION 将多个不同的数据或查询结果合并成一个新的结果集
代码语言:javascript复制将employee表中所有员工的姓名、职务和出生日期,以及新输入2名员工相关信息,一起保存到新表new03
INSERT INTO new03 (姓名,职务,出生日期)
SELECT '欧阳锋','人事经理','1988-08-08' UNION
SELECT '一灯','财务经理','1977-07-07' UNION
SELECT 姓名,职务,出生日期 FROM employee
实战案例
素材:SQL server 2008 素材
- 3、查询employee 表中的所有员工信息
- 4、查询employee表中姓名、职务、基本工资列的内容
- 5、查询所有运维工程师的姓名
- 6、查询基本工资为8000~10000的员工所有信息
- 7、查询基本工资<10000或>20000的员工所有信息
- 8、查询基本工资为8000、9000和1000的员工所有信息
- 9、查询身份证号以66开头的员工所有信息
- 10、查询姓杨的运维工程师的信息
- 11、查询备注不为空的员工所有信息
- 12、查询employee表中前5行的数据
- 13、查询employee表中“姓名”和“身份证号”两列数据,查询结果“姓名”列名称显示为“name”,“身份证号”列名称显示为“idcard”
- 14、查询employee表中所有员工信息,按照基本工资从高到低显示查询结果
- 15、查询employee表中有哪些职务(去除重复的职务)
- 16、在employee表中列出满足身份证号的左起第三位是0、除CTO以外的,所有员工的姓名、身份证号、职务和基本工资,其中姓名字段显示为name,查询结果按照基本工资的由高到低排列。
- 17、将employee表中所有员工的姓名、身份证号和职务生成一个新表new01
- 18、将employee表中所有基本工资大于等于15000的员工的姓名、职务和出生日期保存到新表new02。(提前先创建表new02)
- 19、将employee表中所有员工的姓名、职务和出生日期,以及新输入2名员工相关信息,一起保存到新表new02。(提前先创建表new02)
- 新输入的2名员工信息如下:
- '欧阳锋','人事经理','1988-08-08'
- '一灯','财务经理','1977-07-07'