T-SQL语句基础
一 SQL简介
1 SQL(结构化查询语言)
·关系数据库的标准语言
SQL Server、 Oracle、DB2
·非过程化语言
不需要指定对数据的存放方法
·统一的语言
创建、修改以及删除数据对象(数据库、表等)
2 T-SQL
·SQL的加强版, 提供了类似于程序语言的基本功能
变量说明、流程控制、功能函数
DML:数据操纵语言
查询、插入、删除和修改数据:SELECT、INSERT、UPDATE、DELETE
DCL:数据控制语言
建立数据库、数据库对象和定义其列:CREATE、ALTER、DROP
DDL:数据定义语言
控制数据库组件的存取许可、存取权限等:GRANT、REVOKE
二使用T-SQL操作数据库表
·INSERT 语法结构
INSERT [INTO] <表名> [列名] VALUES <值列表>
·参数解释
·[INTO]是可选的
·<表名>是必需的
·<列名>是可选的
·如果省略<列名>,<值列表>与表中字段的顺序保持一致
·多个列名和多个值列表用逗号分隔
·数据值的数目必须与列数相同,每个数据值的数据类型、精度和小数位数也必须与相应的列匹配。
·Insert语句不能为标识符列指定值,因为它的值是自动增长的
·对于字符类型的列,当插入数据的时候,用单引号将其引起来。
·如果在设计表的时候指定某列不允许为空,则该列必须插入数据,否则将报告错误信息。
·插入的数据项要求符合检查约束的要求。
·尽管可以不指定列名,但是应养成好习惯,明确指定插入的列和对应的值
选择表所在的数据库,然后在查询窗口中输入插入语句,全选后点击"执行",便可插入数据(也可以单击"√"检查语法错误)
·UPDATE语法结构
·参数解释
WHERE子句是可选的,用来限制条件
如果省略WHERE字句,表中所有数据行将被更新
update student set age='25',class='2' where name='lisi'
3 删除数据
·DELETE语法结构
DELETE FROM <表名> [WHERE <删除条件>]
·参数解释
WHERE子句是可选的,用来限制删除条件
如果省略WHERE字句,表中所有数据行将被删除
Delete from student where name='lisi'
3) Delete和Truncate table区别
·Delete:使用where子句按条件删除、数据可以恢复、不会重置标示符、可以用于含有外键约束的表
·Truncate table:只能清空整个表、数据无法恢复、重置标识符列为0、不能用于含有外键约束的表、执行速度更快,用于清空大数据量表,在执行Truncate Table前要确保数据可删除
4查询数据
·T-SQL中的查询基本结构:由SELECT子句(想要查看什么)、FROM子句(从哪查看)和WHERE子句(条件)组成;
·Select语法结构:
[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子句:指定查询结果的排序方式
常量:表示单个指定数据值的符号(字母、数字或符号)字母和日期数据类型的常量需要用单引号括起来,而二进制字符串和数字常量则不需要
列名:表中列的名称
一元运算符:仅有一个操作数的运算符("+"表示正数,"-"表示负数,"~"表示补数运算符)
二元运算符:将两个操作数组合执行操作的运算符(算术运算符、赋值运算符(=)、位运算符、逻辑运算符、比较运算符、字符串串联运算符(+))
比较运算符
条件表达式举例:
PRICE <> 20,表示满足不等于20的PRICE值
PRICE Between 10 And 20,表示满足大于等于10并且小于等于20的PRICE值
NAME Like '李%',表示满足NAME姓名字段里姓李的所有姓名
通配符
通配符 | 解释 | 示例 |
'_' | 任何单个字符 | Name like '_ean'查找以ean结尾的所有名字 |
% | 任意长度的字符 | Name like '�n%'查找虽有包含ean的名字 |
[] | 括号中所指定范围内的一个字符 | Name like '[C-P]ean查找以ean结尾且开头是C与P之间任意单个字符开始的名字 |
[^] | 不在括号中所指定范围内的任意一个字符 | Name like 'car[^afg]查找以car开头且其后字母不为c、f、g的所有名字 |
·用逻辑运算符(and、or、not)将条件连接起来,运算结果是一个逻辑值(TRUE或FALSE)
逻辑运算符
逻辑表达式举例:付款方式为信用卡,并且只能是A卡、B卡或C卡
参数解释:TOP关键字用来限制查询返回的行数,n为需要返回的行数
参数解释:AS子句用来改变结果集列的名称(可以省略)
Select 姓名 as name,成绩 as chengji from student
SELECT 列名或聚合函数 FROM student GROUP BY 列名 HAVING 条件
聚合函数:用于对一组值执行计算,并返回单个值,如求和、平均值、最大或最小值等
示例
查询表中所有学生的总成绩
Select sum(成绩) as 总成绩 from student
查询表中所有学生的平均成绩
Select avg(成绩)平均成绩 from student
WHERE子句和 HAVING子句的区别
·WHERE在分组之前过滤数据,条件中不能包含聚合函数,一般用于from之后
·HAVING在分组之后过滤数据,条件中经常包含聚合函数,一般用于group by之后
示例
查询表中每个班的总成绩
Select 班级,sum(成绩) as 总成绩 from student group by 班级
查询表中总成绩大于200的班级
Select 班级,sum(成绩) as 总成绩 from student group by 班级 having sum(成绩)>200
参数解释:INTO把一个表中的数据经过筛选另存到新表中,新表不存在
示例:
将A表数据插入到新表B(新表不能存在,会新建)
Select * into A from B
Class2
select student.*,class2.* from student,class2 where student.姓名=class2.姓名
或
Select student.*,class.* from student inner join class on姓名=class2.姓名
外连接:根据连接查询的两个数据集合按照其出现位置的不同,可以将两个表分别定义为左侧表(左表)和右侧表(右表)
·左外连接:两个表中分别指定一列,进行对比,有相同字段的这一行与左表所有行对其显示,不相同的则显示为空;类似于A+A∩B
select student.*,class2.* from student left join class2 on student.姓名=class2.姓名
select student.*,class2.* from student right join class2 on student.姓名=class2.姓名
查询两个表中相同