数据库查询语句
插入数据
INSERT 语法结构
INSERT [INTO] <表名> [列名] VALUES <值列表>
参数解释
[INTO]和[列名]是可选的
<表名>是必需的
如果省略[列名],<值列表>与表中字段的顺序保持一致
多个列名和多个值列表用逗号分隔
向student表中插入一行数据
insert into student (姓名,×××号,所在班级,成绩)
values('王兰', '126125199008222446', 2,90)
更新数据
UPDATE 语法结构
UPDATE <表名> SET <列名 = 更新值> [WHERE <更新条件>]
参数解释
WHERE子句是可选的,用来限制条件
如果省略WHERE字句,表中所有数据行将被更新
更改student表中王兰的成绩为95,备注为"勤奋好学"
update student set 成绩='95',备注='勤奋好学' where 姓名='王兰'
删除数据
DELETE 语法结构
DELETE FROM <表名> [WHERE <删除条件>]
参数解释
WHERE子句是可选的,用来限制删除条件
如果省略WHERE字句,表中所有数据行将被删除
Truncate Table语法结构
Truncate table <表名>
删除表中的所有行
条件删除 | 记录事物日志 | 重置标识符列 | 外键约束 | |
Delete | 使用where子句按条件删除 | 是,数据可以恢复 | 否 | 可以用于含有外键约束的表 |
Truncate table | 只能清空整个表 | 否,数据无法恢复 | 重置标识符列为0 |
Truncate Table执行速度更快,用于清空大数据量表
在执行Truncate Table前要确保数据可删除
SQL和T-SQL
SQL(结构化查询语言)
关系数据库的标准语言
SQL Server、 Oracle、DB2
非过程化语言
不需要指定对数据的存放方法
统一的语言
创建、修改以及删除数据对象(数据库、表等)
T-SQL
SQL的加强版, 提供了类似于程序语言的基本功能
变量说明、流程控制、功能函数
T-SQL的组成
DML:数据操纵语言
查询、插入、删除和修改数据
SELECT、INSERT、UPDATE、DELETE
DDL:数据定义语言
建立数据库、数据库对象和定义其列
CREATE、ALTER、DROP
DCL:数据控制语言
控制数据库组件的存取许可、存取权限等
GRANT、REVOKE
SELECT语法结构
SELECT select_list
[INTO new_table_name]
FROM table_name
[ WHERE search_conditions ]
[GROUP BY group_by_expression] [HAVING search_conditions]
[ORDER BY order_expression [ASC|DESC] ]
参数解释
SELECT子句:指定查询内容
INTO子句:把查询结果存放到一个新表中
FROM子句:指定查询源
WHERE子句:查询条件
GROUP BY子句:指定查询结果的分组条件
HAVING子句:指定分组搜索条件,与GROUP BY子句一起使用
ORDER BY子句:指定查询结果的排序方式
表达式
条件表达式
常量:表示单个指定数据值的符号
字母、数字或符号
列名:表中列的名称
一元运算符:仅有一个操作数的运算符
"+"表示正数,"-"表示负数
二元运算符:将两个操作数组合执行操作的运算符
算术运算符、位运算符、逻辑运算符、比较运算符
运算符含义
=等于
>大于
<小于
>=大于或等于
<=小于或等于
<>不等于
!=不等于
BETWEEN指定值的包含范围(包含边界)。使用 And 分隔开始值和结束值
IS [Not] NULL指定是否搜索空值或非空值
LIKE模糊查询,与指定字符串进行模式匹配
IN是否在数据范围里面
条件表达式举例
PRICE > 20,表示满足大于20的PRICE值
PRICE <> 20,表示满足不等于20的PRICE值
PRICE Between 10 And 20,表示满足大于等于10并且小于等于20的PRICE值
NAME Like '李%',表示满足NAME姓名字段里姓李的所有姓名
逻辑表达式
用逻辑运算符将条件连接起来,运算结果是一个逻辑值
TRUE或FALSE
逻辑运算符
运算符含义
AND组合两个条件,并在两个条件都为True时取值为True
OR组合两个条件,并在两个条件之一为 True 时取值为True
NOT和其他操作符一起使用,取反的操作
逻辑表达式举例
付款方式为信用卡,并且只能是牡丹卡、金穗卡或龙卡
付款方式 = '信用卡' AND 信用卡 in ('牡丹卡', '金穗卡', '龙卡')
查询举例--查询列
查询表中所有列
SELECT * FROM table_name
查询student 表中的所有学生信息
SELECT * FROM student
查询表中特定列
SELECT column_name_1,column_name_2,... FROM table_name
查询student表中姓名、所在班级、成绩列的内容
SELECT 姓名,所在班级,成绩 FROM student
查询举例--查询特定行
语法结构
SELECT select_list FROM table_name WHERE search_conditions
查询student表中2班的名叫刘婷的学生
SELECT * FROM student WHERE 姓名='刘婷' AND 所在班级=2
查询student表中成绩在90到100的所有学生
SELECT * FROM student WHERE 成绩 BETWEEN 90 AND 100
查询student表中姓刘的所有学生
SELECT * FROM student WHERE 姓名 LIKE '刘%'
查询student表中备注不为空的所有学生
SELECT * FROM student WHERE 备注 is NOT NULL
查询举例--查询返回限制的行数
语法结构
SELECT TOP n select_list FROM table_name
参数解释
TOP关键字用来限制查询返回的行数,n为需要返回的行数
查询student表中前5行的数据
SELECT top 5 * FROM student
查询举例--改变查询结果集列名称
语法结构
SELECT column_name AS column_alias FROM table_name
参数解释
AS子句用来改变结果集列的名称
查询student表中姓名和×××号两列数据
SELECT 姓名 AS name,×××号 as idcard FROM student
查询举例--查询结果排序
语法结构
SELECT select_list FROM table_name ORDER BY column_name [ASC|DESC]
参数解释
ASC:升序
DESC:降序
查询student表中学生信息,按照成绩从高到低显示结果
SELECT * FROM student order by 成绩 DESC
查询举例--聚合函数
用于对一组值执行计算,并返回单个值
如求总和、平均值、最大或最小值等
SUM:求总和
查询student表中所有学生的总成绩
SELECT SUM(成绩) 总成绩 FROM student
AVG:求平均数
查询student表中所有学生的平均成绩
SELECT AVG(成绩) 平均成绩 FROM student MAX和MIN:返回最大最小值
查询student表中所有学生中的最高分和最低分
SELECT MAX(成绩) 最高分,MIN(成绩) 最低分 FROM student
COUNT:返回非空值的计数
查询student表中所有行数
SELECT COUNT(*) 总行数 FROM student
查询举例--分组查询
语法结构
SELECT select_list FROM table_name GROUP BY column_name
HAVING search_conditions
参数解释
GROUP BY子句对查询结果进行分组
HAVING子句指定分组搜索条件
查询student表中每个班级的总成绩
SELECT 所在班级,SUM(成绩) AS 总成绩 FROM student GROUP BY 所在班级
查询student表中总成绩大于200的班级
SELECT 所在班级,SUM(成绩) AS 总成绩 FROM student GROUP BY 所在班级 HAVING SUM(成绩)>200
WHERE子句和 HAVING子句的区别
WHERE子句在分组之前过滤数据,条件中不能包含聚合函数
HAVING子句在分组之后过滤数据,条件中经常包含聚合函数
查询举例--插入数据
语法结构
SELECT select_list INTO new_table_name FROM table_name
参数解释
INTO子句把一个表中的数据经过筛选插入到另一个表中
将student表的数据插入到新表student_bak中
SELECT * INTO student_bak FROM student
将student表中2班的学生信息保存到表student_2中
SELECT * INTO student_2 FROM student WHERE 所在班级=2
表的连接类型
内连接(INNER JOIN)
只返回两个数据集合之间匹配关系的行
外连接
左外连接(LEFT JOIN )
结果集包括左表的所有行
右外连接(RIGHT JOIN )
结果集包括右表的所有行
完整外连接(FULL JOIN)
返回左表和右表中的所有行
交叉连接
返回左表与右表挨个连接的所有行
内连接
方式一:在Where子句中指定连接条件
SELECT A.name 姓名A,A.school 学校A,B.name 姓名B,B.job 职业B FROM A,B WHERE A.name=B.name
方式二:在FROM子句中使用INNER JOIN…ON子句
SELECT A.name 姓名A,A.school 学校A,B.name 姓名B,B.job 职业B FROM A inner join B on A.name=B.name
左外连接和右外连接
左外连接查询
SELECT A.name 姓名A,A.school 学校A,B.name 姓名B,job 职业B FROM A left join B on A.name=B.name
右外连接查询
SELECT A.name 姓名A,A.school 学校A,B.name 姓名B,job 职业B FROM A right join B on A.name=B.name
完整外连接查询
SELECT A.name 姓名A,A.school 学校A,B.name 姓名B,job 职业B FROM A full join B on A.name=B.name