1.SqlHelper的封装
->参数化处理
->DRY原则
->ExcuteNonQuery()
->ExcuteScalar()
->ExcuteReader()
->ExcuteTable()
SqlHelper + app.config
2.Case的用法
->使用方法一:(类似C#中的Case的用法)
->语法:
Case 表达式
when 值1 then 返回值
when 值1 then 返回值
....
End
->使用方法二:(类似C#中的多个if else)
->语法
Case
When 表达式 then 返回值
When 表达式 then 返回值
else 值
end
3.SQL控制语句
->定义变量:declare
->给变量赋值:
->set @参数名=值
->select @参数名=值
->打印 : Print
->IF ELSE
->语法格式:
if(表达式)
begin
SQL语句
end
else
begin
语句
end
->WHILE
->语法:
While(表达式)
begin
SQL语句
end
4.子查询
->把一个查询结果作为一个表来使用,就是子查询
->把一个查询结果作为 一个 表达式进行使用就是子查询。
案例:
--查询顾客表中属于同一家公司超过两个顾客的公司名称
select CompanyName,count(*) as 个数 from SalesLT.Customer group by CompanyName having count(*)>2
--查询顾客表中 相同公司人数最多的 顾客信息
select * from SalesLT.Customer where CompanyName=(
select top 1 CompanyName from SalesLT.Customer group by CompanyName order by count(*) desc
)
--查询 相同公司人数最多的顾客的订单信息
select * from SalesLT.SalesOrderHeader where CustomerID
in(
select CustomerID from SalesLT.Customer where CompanyName=(
select top 1 CompanyName from SalesLT.Customer group by CompanyName order by count(*) desc)
)
--查询山东省的所有的城市信息
use 0413DB
go
select areaId from AreaFull where AreaPId =(select AreaId from AreaFull where AreaName=N'山东省')
--查询山东省中所有县级市的
select * from AreaFull where AreaPId in(
select areaId from AreaFull where AreaPId =(select AreaId from AreaFull where AreaName=N'山东省')
)
--查询山东省中的所有的县
select * from AreaFull where AreaPId in(
select areaId from AreaFull where AreaPId =(select AreaId from AreaFull where AreaName=N'山东省')
) and AreaName like N'%县'
5.分页SQL语句
->Row_Number函数的分页使用
->双Order排序 分页法【越过多少条,取多少条数据】
6.表链接
->Inner Join
->查询员工出差的信息。
->Right Join
->查询所有员工的信息,如果有出差信息则显示出差信息。
->Left Join
->Full Join
->查询所有员工的信息和所有的出差信息,
->Cross Join
->查询所有员工和所有职位的组合情况
7.索引
->索引就是表的目录。 提高查询效率。
->创建索引
->索引的分类
->聚簇索引:索引的存储顺序跟数据的存储顺序一致。
->非聚簇索引:索引指向聚簇索引或者是数据存储的磁盘位置。
->语法
->非聚集索引
->CREATE INDEX 索引名 ON 表名(列名)
->创建唯一非聚集索引
->CREATE UNIQUE INDEX 索引名 ON 表名(列名)
->创建聚集索引
->CREATE TABLE t1 (a int, b int, c AS a/b);
CREATE UNIQUE CLUSTERED INDEX Idx1 ON t1(c);
INSERT INTO t1 VALUES (1, 0);
->使用索引的条件:
->经常查询的字段,经常进行数据筛选的列
->索引失效:
->where条件后面使用了 <> 、not in 、not exist、!= 、Or等
->对列使用了函数处理 类型转换函数 convert cast
->隐式转换使索引失效:
->错误的例子:select * from test where tu_mdn=13333333333;
->正确的例子:select * from test where tu_mdn='13333333333';
->对索引列进行运算导致索引失效,我所指的对索引列进行运算包括(+,-,*,/,! 等)
->错误的例子:select * from test where id-1=9;
->正确的例子:select * from test where id=10;
->like查询是以%开头
->在Where子句中使用IS NULL或者IS NOT NULL