T-SQL基础
T-SQL的组成
-
数据定义语言(DDL,Data Definition Language)
-
数据操纵语言(DML,Data Manipulation Language)
-
数据控制语言(DCL,Data Control Language)
T-SQL基础运算符
比较运算符
核心作用主要用作用快速的条件查询
| 运算符 | 作用 |
|---|---|
| = | 判断相等 |
| > | 大于 |
| < | 小于 |
| >= | 大于等于 |
| <= | 小于等于 |
| != <> | 不等于 |
| ! | 非 |
逻辑运算符
| 运算符 | 作用 |
|---|---|
| ALL | 如果一个比较集中全部都是TRUE,则值为TRUE |
| ANY | 如果一个比较集中任何一个为TRUE,则值为TRUE |
| AND | 如果两个布尔表达式均为TRUE,则值为TRUE |
| OR | 如果任何一个布尔表达式是TRUE,则值为TRUE |
| BETWEEN | 如果操作数是在某个范围内(可取上下限),则值为TRUE |
| LIKE | (模糊查询)如果操作数匹配某个模式的话,则值为TRUE |
| IN | 如果操作数与一个表达式列表中的某个相等的话,则值为TRUE |
| NOT | 对任何其他布尔运算符的值取反 |
| SOME | 如果一个比较集中的某些为TRUE的话,则值为TRUE |
| EXISTS | 如果子查询包含任何行,则值为TRUE |
SQL 通配符
在搜索数据库中的数据时,SQL 通配符可以替代一个或多个字符。可以理解为和C#中学习过的正则的元字符类似
| 通配符 | 描述 |
|---|---|
| % | 替代一个或多个字符 |
| _ | 仅替代一个字符 |
| [a,b,d],[a-d] | 字符列中的任何单一字符 |
| [ ^a,b,c] 或者 [!b] | 不在字符列中的任何单一字符 |
SELECT查询语句
对查询结果的字段重新命名
SELECT 字段1名 AS '重命名1',字段2名 AS '重命名2',.... FROM 表名
SELECT StuID AS '学号',SubID AS '科目ID',Score AS '分数' FROM Score
多表连接查询-内联接
内联接查询可以为将数据库中多张表通过其内部关系进行查询,得到一张新的有用的"表",这个新表是内联接查询的结果并不存在
注意:多张表要保证表与表之间的字段有某种特殊意义的联系
SELECT Sname AS '姓名',SubName AS '科目',Score AS '分数' FROM Score JOIN Student ON Score.StuID=Student.SID JOIN Subject ON Score.SubID=Subject.SubID
按排列顺序查询
排序查询肯定是先排序再查询
将查询结果按照某个指定字段以升序(例如:数字按照从小到大)、降序这两种方式进行重新排列显示。
SELECT <字段> FROM 表名 [WHERE条件] ORDER BY <指定列名> ASC/ DESC,<指定列名> ASC/ DESC
升序:使用关键字ASC,如果在查询语句中ORDER BY排序之后未声明任何关键字则默认是升序
降序:使用关键字DESC
SELECT Sname AS '姓名',SubName AS '科目',Score AS '分数' FROM Score JOIN Student ON Score.StuID=Student.SID JOIN Subject ON Score.SubID=Subject.SubID WHERE SubName='C#'ORDER BY Score DESC
注意:排序查询语句中的升序或降序不是仅有一个字段
TOP查询指定行
使用TOP可以从结果中查询出指定的前多少行
SELECT TOP(数量) <列名> FROM 表名
从表中查询前多少行,由括号中的数量决定
SELECT TOP(3) Sname AS '姓名',SubName AS '科目',Score AS '分数' FROM Score JOIN Student ON Score.StuID=Student.SID JOIN Subject ON Score.SubID=Subject.SubID WHERE SubName='C#'
T-SQL分页查询
分页查询的必要
-
针对于目标数据量庞大的查询结果,为了能够快速查询
-
分页查询有助于应用程序对数据的一个显示
如何T-SQL进行分页查询
使用NOT IN分页
SELECT TOP(5) * FROM StudentInfo WHERE StuID NOT IN(SELECT TOP(5)StuID FROM StudentInfo ORDER BY StuID) ORDER BY StuID
SELECT TOP(每页的数据量) * FROM 表名 WHERE 标识列 NOT IN(SELECT TOP(已经过去的页数)标识列 FROM 表名 ORDER BY 标识列) ORDER BY 标识列
使用IN进行分页
SELECT TOP(5) * FROM StudentInfo WHERE StuID IN
(SELECT TOP(5) StuID FROM StudentInfo WHERE StuID IN
(SELECT TOP(10) StuID FROM StudentInfo ORDER BY StuID)ORDER BY StuID DESC)ORDER BY StuID ASC
SELECT * FROM 表名 WHERE 标识列 IN (SELECT TOP(每页的数据) 标识列 FROM 表名 WHERE 标识列 IN (SELECT TOP(当前页在内的总数据) 标识列 FROM 表名 ORDER BY 标识列)ORDER BY 标识列 DESC)ORDER BY 标识列 ASC
注意:
1.在子连接查询中如果有多个排序查询,务必要注意子查询语句如果要使 用ORDER BY则必须要使用TOP关键字
2. 使用IN语句进行分页前提是必须要计算好最后一页的数据
SQL经典题型举例:
使用T-SQL语句查询出Student表中的第3-第8条数据(标识列不连续)
实现思路:
1.首先查出来前两条记录中的标识列数据
2.然后查询从第3条数据之后剩余的所有数据
3.最后在剩余的数据中取前5条数据
SELECT TOP(6)* FROM Teacher WHERE TID NOT IN (SELECT TOP(2) TID FROM Teacher ORDER BY TID) ORDER BY TID
本文介绍了T-SQL的基础知识,包括其组成、基础运算符如比较和逻辑运算符,以及SQL通配符的使用。重点讲解了SELECT查询语句,如内联接查询、按顺序查询和TOP查询。同时,详细阐述了T-SQL的分页查询,包括NOT IN和IN两种方法,并给出了经典分页查询题目的解决思路。
271

被折叠的 条评论
为什么被折叠?



