数据库查询

检索
select * from dbo.Student
select stuAge as 年龄 from dbo.Student
select AVG(stuAge) as 平均年龄 from dbo.Student

条件
betwen and
aelect * from dbo.Student where stuAge>15 and stuAge<30
aelect * from dbo.Student where stuAge between16 and 29

in()
aelect * from dbo.Student where stuAge in(17,18)

or

top
select top 3 percent * from dbo.Student(默认以ID排序)

聚合函数与分组
聚合函数对null不受理
count(*)与count(字段)
---------------------------------------------------------
having语句




------------------------------------------------------
联合结果集 union 其结果集是无序的
查询年龄大于25岁的男同学

select
stuid,stuname,stuage
from
dbo.student
where
stuage>25
and
stugender=1
union //两个表集合并成一个
查询年龄最大的女同学
select top 1*

from
dbo.student
where
stugender=0
order by
stuage desc


union会自动合并重复数据
union all保留重复数据
--------------------------------------------------------------------------
考虑类型处理
select 1234,'哈哈'
select '嘻嘻','string'


---------------------------------------------------------------------------------
求最高分 最低分 平均分
select max(math) as 最高分 ,min(math) as 最低分 ,avg(math) as 平均分 from tblscroe

select '最高分' as 等级,max(math) as 分数 from tblscroe
union
select '最低分' as 等级,min(math) as 分数 from tblscroe
union
select '平均分' as 等级,avg(math) as 分数 from tblscroe

----------------------------------------------------------------------------------------
结果集与游标区别
结果集的表是无序的
游标有序,但是游标不效率,大多在显示结果时使用
--------------------------------------------------------------------------------------
常见的函数
LEN()计算字符串的长度
字符串函数
select '我是一个字符串' LEN('我是一个字符串')
datalength() 字节长度

ltrim() 去左边的空格
select ltrim(' ssd')
rtrim() 去右边的空格
select rtrim('ssd ')
去掉两端空格
select rtirm(ltrim(' df '))

截取字符串
left()
right()
substring()
select 'asfdfds',substring('asfdfds',1,3) 数据库的字符串的起始位置为1

日期函数和时间函数
getdate()
year('2012-5-2')
month('2012-5-2')
day('2012-5-2')

日期相加
今天下单买东西,30天以后付款,如何确定时间
select getdate(),dateadd(day,30,getdate())

时间求差
select datediff(second,'2012-7-11 11:45:34','2012-7-11 11:47:34')
select '2012-12-21',convert(nvarchar(20),'2012-12-21',101)

----------------------------------------------------------------------------------
ado.net 是类库
Connection 连接数据库
Command 执行sql语句
DataReader 只读只进的结果集。一条一条的读取数据
DataAdapter 一个封装了上面3个对象的对象

DataSet 存放临时的数据

//链接数据库就找链接的对象sqlconnection
//SqlConnection conn = new SqlConnection();
//要连接数据库,需要一个连接字符串,来指定数据源,数据库,用户名,密码
// string sqlconn = @"server=.\sqlexpress;database=MyDataBase;uid=sa;pwd=123";
//window身份登录的
string sqlconn = @"server=.\sqlexpress;database=MyDataBase;Integrated security=true";
SqlConnection conn = new SqlConnection(sqlconn);
//打开连接
conn.Open();
//关闭 conn.Close()
//conn.Dispose() 释放资源

----------------------------------------------------------------------------------
插入数据
use MyDataBase
go
create table UseLogin
(
id int identity(1,1) primary key, //id自动增长
name nvarchar(10) not null,
pwd varchar(16) check(len(pwd)>=6 and len(pwd)<=16)
)

SqlConnection conn =new SqlConnection(@"server=SAMSUNG-PC;database=MyDataBase;Integrated security=true");
using(conn)
{
SqlCommand cmd=new SqlCommand("sql语句",conn);
using(cmd)
{
//ExecuteNonQuery 对增删改语句有效,执行语句并返回受影响行数,其他语句返回-1
//ExecuteScalar 执行查询时,并返回结果集中的第一行第一列 是object类型
//ExecuteReader
if(conn.State==System.Data.ConnectionState.Closed) //conn状态
{
conn.Open();
}
int res=cmd.ExecuteNonQuery() //对连接执行sql语句并返回受影响的行数
Console.WriteLine("{0}行受影响",res);
}
}
--------------------------------------------------------------------------------------
winfrom 版 插入数据
if(string.IsNUllOrEmpty(txtUid.Text)||txtPwd1.Text==""||txtPwd2.Text=="")
{
MesageBox.Show("请填写完整信息");
}
//验证两次密码是否一致
if(txtPwd.Text.Trim()!=txtPwd2.Text.Trim())
{
Console.WriteLine("两次密码不一致");
return;
}
string uid=txtUid.Text.Trim();
string pwd=txtPwd1.Text.Trim();
string sqlConn=@"server=SAMSUNG-PC;database=MyDataBase;Integrated security=true";
string sql=string.Format("sql语句");
using(SqlConnection conn=new SqlConnection(sqlConn))
{
using(SqlCommand cmd=new SqlCommand(sql,conn))
{
if(conn.State==ConnectionState.Closed)
{
conn.Open();
}
try
{
int res=cmd.ExecuteNonQuery();//对连接执行sql语句并返回受影响的行数
txtUid.Clear();
txtPwd1.Text=string.Empty;
txtPwd2.Text="";
Console.WriteLine(res);
}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
}
}
}

不管有没有插入成功,Id都自动增长
-------------------------------------------------------------
简单查询
SqlConnection conn =new SqlConnection(@"server=SAMSUNG-PC;database=MyDataBase;Integrated security=true");
string sql=@"select count(*) from 表名 where name='蒋坤'";
using(conn)
{
using(SqlCommand cmd=new SqlCommand(sql,conn))
{
if(conn.State==ConnectionState.Closed)
{
conn.Open();
}

//int res=Convert.ToInt32(cmd.ExecuteScalar()); //对连接执行sql语句并返回受影响的行数
//Console.WriteLine("{0}行受影响",res);
object 0=cmd.ExecuteScalar();
if(o==null)
{
Console.WriteLine("查无此人");
}
else
{
Console.WriteLine(o.Tostring());
}
}
}



------------------------------
like '[0-9]%'
[] 和c#正则表达式一样,表示含括号里的一个字符
% 表示0个或0以上的字符

例子
.输出所有数据中拨打长途号码(对方号码以0开头)的总时长
select sum(datediff(s,StartDateTime,EndDateTime)) as 总时长 from T_CallRecord where TelNum like'0%'


posted @ 2012-09-18 00:32  美国如来不如中国上帝  阅读(179)  评论(0编辑  收藏  举报