创建数据库连接
string serverName=""
string databaseName="";
string userID="";
string password="";
string connectionString="Data Source="+serverName+"; Initial Catalog="+DatabaseName+"; userID="+userID+";
password="+password;
SqlConnection conn=new SqlConnection(connectionString);
conn.Open();
使用数据库之前应该进行判断:
if(conn.State != ConnectionState.Open)
{
conn.Open();
}
创建数据库:
if(conn.State!=ConnectionState.Open)
{
conn.Open();
}
string sql="CREATE DATABASE mydb ON PRIMARY"
+"(name=text_data,filename='c:\\mysql\\mysql_data.mdf',size=3,"
+"maxsize=5,filgrowth=10%)log on"
+"(name=mydbb_log,filename='c:\\mesql\\mydb_log.ldf',size=3"
+"maxsize=20,filegrowth=1)";
cmd=new sqlConnection(sql,conn);
cmd.ExcuteNonQuery();
向表中添加新的记录
if(conn.State!=ConnectionState.Open)
{
conn.Open();
}
string sql="insert into mytable(ID,name,Address,Email)"+values(111,'Peter','asd','asd@ad.com');
cmd=new SqlCommand(sql,conn);
cmd.ExcuteNonQuery();
向表中添加行的字段(删除字段)
string sql="alter table mytable add(drop)"+"id int";
ExcuteSQLStmt(sql);
删除表
string sql="drop table mytable";
ExcuteSQLStmt(sql);
替换查询结果中的数据:
select 学号,课程,等级=
case
when 成绩 is null then '缺考';
when 成绩 <60 then '不及格';
when 成绩 >=60 and 成绩<70 then '合格';
when 成绩 >=70 and 成绩<80 then '中等';
when 成绩 >=80 and 成绩<90 then '良好';
else '优秀';
end
from 学生成绩表
该表列表示在结果中的显示别名:
select 学号 as xuehao from 学生成绩表
删除重复信息
select distinct 学号 from 学生成绩表
查询部分数据
select top 5 学号 from 学生成绩表
条件查询
select no from data where no > 60;查询大于60的数
select no from data where no>60 and no <80;查询大于60并且小于80的数
select no from data where no>60 or no <50; 查询大于60 或者小于50的数
select no from data where no is NULL 查找为空值的数 is不能用(=)代替
select no from data where no is not NULL 查询不为空的数
select no from data where BETWEEN 60 AND 80 查找60到80之间的数
select no from data where NOT BETWEEN 60 AND 80 查找不属于60到80之间的数
select * from data where 职称 IN('教授','副教授');筛选拥有教授和副教授职称的数据
select * from data where 职称 IN(‘教授’;‘副教授’); 筛选未拥有教授和副教授职称的数据;
关于匹配符的使用
select * from 学生基本信息表 where 姓名 LIKE '王%':王后面跟任意字符
select * from 学生基本信息表 where 姓名 LIKE ‘王_’王后面只跟一个字符
select * from 学生基本信息表 where 姓名 LIKE '[张王]%' 查找张或者王 后面跟任意字符
select * from 学生基本信息表 where 姓名 LIKE '[^张王]%' 查找非张或者王 后面跟任意字符
select * from 学生基本信息表 where 姓名 LIKE 'c\_#' ESCAPE '\' 将'\'声明为转义字符 跟在'\'后面的'_'将作为普通字符
处理不具有通配符的作用
对于查询结果的排序
select no from data order by no desc 将得到的结果降序排列
select no from data order by no asc 将得到的结果升序排列
聚合函数:
COUNT (*| {[ALL| IDSTINCT] expression}) 求组中的项数,返回Int型整数
SUM ([ALL|DISTINCE] expression) 求和
AVG ([ALL|DISTINCE] expression) 求平均值
MAX ([ALL|DISTINCE] expression) 求最大值
MIN ([ALL|DISTINCE] expression) 求最小值
分组汇总
select 学号,SUM(成绩),AVG(成绩) from 成绩表 GROUP BY 学号 按学号汇总成绩平均成绩
select 学号,SUM(成绩),AVG(成绩)from 成绩表 GROUP BY 学号 HAVINGAVG(成绩)>60 在上面的基础之上筛选平均成绩大于60
的学生
select 学号,SUM(成绩),AVG(成绩) from 成绩表 GROUP BY 学号 COMPUTE 学号,SUM(成绩) BY 学号 在1的基础之上按照学号
,总成绩在另一表中显示;
嵌套查询
select * from 学生成绩表 where 课程号=(select 课程号 from 学生课程信息表 where 课程名称=‘计算机文化基础’);
select * from 学生成绩表 where 学号 IN (select 学号 from 学生基本信息表 where 专业=‘电子信息’);
select 姓名,年龄 from 学生基本信息表 where 年龄<ANY(select 年龄 from 学生基本信息表 where 专业=‘计算机科学’)
and 专业<>‘计算机科学’;
select 姓名 from 学生基本信息表 where (NOT) EXISTS(select * from 学生成绩表 where 学号=学生基本信息表.学号 and 课
程号='105');
集合查询
select * from 教师基本信息表 where 年龄>35 UNION select * from 教师基本信息表 where 职称='副教授' 集合并
select * from 学生基本信息表 where 专业='电子信息' except select * from 学生基本信息表 where 年龄<=18 集合差
select * from 教师基本信息表 where 性别='男' INNERSECT select * from 教师基本信息表 where 职称='副教授'; 集合交
连接
使用where实现连接
select 学生基本信息表.学号,姓名,成绩 from 学生基本信息表,学生成绩表 where 学生基本信息表.学号=学生成绩表.学
号 AND 课程号='103' (使用=的为等值连接,使用其他运算符的为非等值连接 等值连接中去掉重复的属性列则为自然连接)
1.内部连接(分为等值连接和自然连接)
select 学生基本信息表.学号,姓名,成绩 from 学生基本信息表 INNER JOIN 学生成绩表 ON 学生基本信心表.学号=学生成
绩表.学号
2.外部链接(左外连接,右外连接,全外连接)
左:select 学生基本信息表.*,学生成绩表.* from 学生基本信息表 left outer join 学生成绩表 on 学生基本信息表.学号
=学生成绩表.学号;
右:select 学生成绩表.*,课程名称 from 学生成绩表 right outer join 学生课程信息表 on 学生成绩表.课程号=学生课程
信息表.课程号
全:full outer join
3.交叉连接
select 学号,姓名,课程号,课程名称 from 学生基本信息表 cross join 学生课程信息表
交叉查询
1,使用case语句
select a.姓名,
(CASE b.课程名 WHEN 101 THEN 成绩 end) as '101',
(CASE b.课程名 WHEN 102 THEN 成绩 end) as '102',
(CASE b.课程名 WHEN 103 THEN 成绩 end) as '103',
(CASE b.课程名 WHEN 104 THEN 成绩 end) as '104',
(CASE b.课程名 WHEN 105 THEN 成绩 end) as '105',
(CASE b.课程名 WHEN 106 THEN 成绩 end) as '106',
from 学生基本信息表 a, 学生成绩表 b
where a.学号=b.学号
2,使用PIVOT语句
PIVOT通过将表达式某一列中的唯一值转换为输出中的多个列来转换表值表达式,并在必要时对最终输出中岁序的任何其余的
列植进行聚合。在查询的FROM子句中使用PIVOT语句可以对一个输入表值表达式执行某种操作,从而获得另一种形式的表。PIVOT运
算符将输入表的行旋转为列,并能同时对行执行聚合运算。
select 学号,
[101] as "101",
[102] as "102",
[103] as "103",
[104] as "104",
[105] as "105",
from 学生成绩表
PIVOT(SUM(成绩) for 课程号 IN ([101],[102],[103],[104],[105]))
as PVT
索引的创建
create UNIQUE INDEX myIndex ON myTable(myNmae(为索引字段));
视图的创建
create VIEW myView as SELECT myName FROM myTable;