连接条件关键字 and并且 ?or或者 ? not非
查询 select * from 表名 where 条件 添加 insert into 表名?values(值) 或 insert into 表名(列名)values(值)列和值一一对应 注意:不允许给标识列赋值 一次添加多列 或 insert 表名(列名)values(值),(值) 直接后面跟括号即可 修改 update 表名 set 列名='值' where 条件 注意值为要修改的值 删除 delete from 表名 where 条件 Truncate table 表名 清空表,会重置标识列(慎用)
使用order by 进行排序 语句 select * from 表名 order by 需要排序的列 可以排序多列,但前提是出现相同的值,才会进行第二组的排序
模糊查询 四个通配符(%,_,[值],[^值]) 都需要配合like关键字使用 %匹配任意字符串使用 _匹配一个任意字符 []括号中的任意一个字符 [^]不在括号中的任意一个字符
聚合函数 sum()求和 max()最大值 min()最小值 avg()平均分 count()个数
使用group by进行分组 select * from 表名 group by 列名 一般使用使用时会配合着聚合函数一起使用 例如 select sex,count(*) from 表名 group by sex 根据性别就行分组,并且显示人数
使用having进行筛选 select sex,count(*) from 表名 group by sex having count(*)>1(筛选调人数少于1个人的性别(排除人妖,哈哈哈))
看到这里依旧会发现我们的查询语言有很多分支,会有一个执行的先后顺序 Select *? from 表名 Where 条件 Group by 列名 Having 聚合函数>60 Order by 聚合函数 先分组再筛选,最后进行排序
表连接 select ?* from 表名 inner join 另一张表 on 表名.列名=另一张表.列名(博主写的比较通俗易懂,就将就将就吧) 注意:两张表连接时的列名的数据类型应该是一致的 内连接:两张表相关数据(inner join) 外连接:两张表的相关数据和另一张表的不相关数据(left join ,right join)左外连接和右外连接
(在实际工作中,很少会手动创建数据库和表,主要还是兼容性的问题,高版本可以兼容低版本,但低版本不能兼容高版本) 通过代码创建数据库和表 create database 数据库 on primary ( ? ?Name='名称' ? ?FileName='文件创建地址' ? ?Size=文件初始大小 ? ?MaxSize=文件最大值 ? ?FileGrowth=文件增长量 ? ?注意:这个是数据文件 ) log on ( ? ?日志文件(和数据文件一样) ) 创建表 create table 表名 ( ? ?列名 ?数据类型 ?约束 ) 删除数据库和表(慎用,哈哈哈) drop database 数据库名称 drop table 表名称 约束 check()检查约束 unique()唯一约束 primary key 主键约束 foreign key(列名) references 表名(列名)外键约束 identity 自增列 default 默认值
定义变量 declare关键值 可以同时定义多个变量 select和set为赋值 但set只能赋值一个,而select语句可以赋多个值 输出语句二个select 和print 显示不同,select以网格形式显示,而print以文本形式显示
数据类型转换 cast(表达式 as 数据类型) convert(表达式,数据类型,参数) 可以去看看帮助文档选中按F1
begin-end语句相当于程序里的大括号 if-else 判断语句 while循环,注意循环条件和循环操作 case when then else end 判断分支语句相当于编程语句的switch语句 when 分数>60 then '良好' when 分数>80 then '优秀' else '该努力了' end 注意:要使用end进行结尾
使用子查询(比较运算符) select * from 表名 where 分数>(select 分数 from 表名 where 条件) 子查询(in和not in) select * from 表名 where 分数 in(select 分数 from 表名 where 条件) not in 就是取反,很简单的子查询 大家肯定有点疑惑用比较运算符好还是in关键字好呢? 在特定的情况使用不同的子查询,很简单,子查询返回一个值使用比较运算符,多个值时使用in关键字 注意:子查询可以出现在sql语言的任何地点(可以看出子查询的强大能力)
使用exists关键字进行判断 博主理解吧,exists大部分是判断数据库是否存在或者是表是否存在 判断数据库是否存在语句 if exists(select * from sys.databases where name='数据库的名称') 这个当然也有not exists关键字也是取反
事务 事务:显示事务,隐式事务,自动提交事务 开始事务:begin transaction 提交事务:commit transaction 撤销事务(回滚):rollback transaction 平常会配合全局变量@@ERROR来进行配合使用,进行判断是否出错,如果出现错误将进行回滚,把执行的错误操作进行回滚,没有出错就提交保存
视图 create view 视图名称 as 查询语句 视图会把查询出来的信息放在一张新的表中(视图,便于理解),但在修改视图里的值时,表中的值也会进行修改 删除视图:drop view 视图名称 判断视图是否存在:if exists(select * from sys.objects where name='视图名称')
索引 注意:大大提高查询速度,重点适当使用,使用不恰当就会起到反作用,和填充因子有关系,可以去百度去看看,博主就不过多的解释了 create 索引类型 index 索引名称 on 表名(列名) with fillfactor=值 fillfactor表示填充因子 使用索引进行查询 select * from 表名 with(index=索引名称) where 条件 判断索引是否存在 if exists(select * from sys.indexes where name='索引名称') 删除索引 drop index 表名.索引名称 索引分为六大类型 唯一索引 主键索引 聚集索引 非聚集索引 复合索引 全文索引
下面是一些扩展 向表里添加一列 语法:alter table 表名 add 列名 数据类型 从数据库随机读取数据 select top 10 * from student order by newid() 获取数据库中所有的表名 SELECT * FROM SYSOBJECTS WHERE TYPE='U' 获取指定表的所有列名 SELECT * FROM Result WHERE ID=OBJECT_ID('TableName') 获取全部信息,1=1表示全部选择 1=2表示全部不选择 select * from student where 1=1 根据姓氏笔画进行排序 Select * From Student Order By StudentName Collate Chinese_PRC_Stroke_ci_as 清除名称两端空格 update Student set StudentName=TRIM(StudentName)?
|