---------------------- Windows Phone 7手机开发、.Net培训、期待与您交流! ----------------------
1.概述:DBMS(DataBase Management System,数据库管理系统)
2.数据库分类:MSSQLServer、Oracle等某种DBMS。
3.主键(PrimaryKey):就是数据行的唯一标识。不会重复的列才能当主键
主键有两种策略:业务主键和逻辑主键。
业务主键:是使用有业务意义的字段做主键,比如省份证号,银行账号等
逻辑主键:是使用没有任何业务意义的字段做主键。给程序、开发人员看的字段(推
荐)
4.外键(ForeignKey):表与表之间关联,表1外键指向表2的主键
5.SQL语句是和DBMS“交谈”专用的语句,不同DBMS都认SQL语法。
6.注意点
SQL语句中字符串用单引号
SQL语句大小写不敏感:关键字 表名,字符串中的内容大小写敏感
SQL 字段值 NULL不是空值,而是一个值,一个未知的值。与任何值运算任为NULL
SQL主要分DDL(数据库定义语言:Create Table,Drop Table,Alter Table等影响表结构)和DML(数据操作语言:Select ,Insert,update,delete)
7.设置主键:右键→设置主键→标识规范:是标识选是(自动增长)一个表只能有一个标识列
8.Guid作为主键保证永远都不会重复:GUID算法是一种可以产生唯一标识的高效算法。SQL数据库中GUID函数newid(), .Net中生成Guid的方法:Guid.NewGuid(),返回值是Guid类型。
9.Int自增字段的优点:占用空间小、无需开发人员干预、易读;缺点:效率低;数据库导入导出的时候很痛苦。Guid的优点:效率高、数据导入导出方便;缺点占用空间大、不易读。
10.每个字段可以设默认值,Guid默认值是newid(),也就是说某个字段不插入的时候自动使用默认值
11.SQL基本语法
创建表: CREATE TABLE T_Person(Id int NOT Null,Name nvarchar(50),Age int Null)
删除表: Drop Table T_Person
修改表: ALTER TABLE T_Employee ADD FSubCompany VARCHAR(20) // 添加字段
ALTER TABLE T_Employee DROP column FSubCompany // 删除字段
插入数据:Insert into T_Person(Id,Name,Age) values(1,'Tom',62)
更新数据:update person2 set age=108,Name='Lucy'(update person2 set age=age+1)
数据过滤:update person2 set NickName=N'青年人'
where (Age>=20 and Age<=30) or Age=80 →过滤条件
删除数据:Delete from Person2 where Age>20 //Delete只是删除表中的数据,不删除表
查询语句:select Fname as 姓名,FAge as 年龄,FSalary as 月薪From T_Employee
select 1+1 as 列,getdate() as 日期,newid() as GUID // 与表无关
SQL聚合函数max(最大值),count(数量),min(最小值),avg(平均值),sum(和)
select count(*) from T_employee // 聚合函数,对结果集进行统计
select max(Fsalary) from T_employee
select min(Fsalary) from T_employee
select avg(Fsalary) from T_employee
select sum(Fsalary) from T_employee
select * from T_Employee where FAge in (23,25,28) // 要取的值
select * from T_Employee where FAge between 20 and 30 // 范围取值
数据排序:select * from T_employee
where FAge>24 // where过滤必须在order by 排序之前
order by FAge DESC,FSalary ASC // 默认ASC升序,DESC 降序
模糊查询:通配符过滤使用Like:单字符"_",任意长度字符串"%"
Select * from T_Employee
where FName LIKE '_n%'
数据分组:select FAge,max(FSalary),count(*) From T_Employee // 根据年龄分组
--where count(*)>1 // 聚合函数不应出现在WHERE 子句中
group by FAge
Having →用在group by 之后
select FAge,count(*) From T_Employee
where Fsalary>2000
group by Fage
having count(*)>1 // having 是分组以后数据过滤,where是原始数据过滤
限制行数:select top 3 * from T_Employee // 取前3条数据
Order by Fsalary DESC
先取出前5条,再剩余的取出前3条 // 分页
Select top 3 * From T_Employee
where FNumber NOT IN (select top 5 FNumber from T_Employee order by Fsalary DESC) // 子查询
order by Fsalary DESC
去重数据:Distinct 不是针对一个字段,而是针对整行,只有整行完全相同才去重复
Select Distinct FDepartment,FSubCompany From T_Employee
联合查询:上下两个要数相同,类型要相容
Union 会自动去掉重复行,不去的话加ALL,即Union ALL
select FName,FAge,FDepartment From T_Employee
Union ALL
select FName,FAge,'临时工,无部门' From T_TempEmployee
//联合报表
SELECT '正式员工最高年龄',MAX(FAge) FROM T_Employee
UNION ALL
SELECT '正式员工最低年龄',MIN(FAge) FROM T_Employee
UNION ALL
SELECT '临时工最高年龄',MAX(FAge) FROM T_TempEmployee
UNION ALL
SELECT '临时工最低年龄',MIN(FAge) FROM T_TempEmployee
//工资合计
Select FName,FSalary From T_Employee
Union all
Select '工资合计',SUM(Fsalary) From T_Employee
---------------------- Windows Phone 7手机开发、.Net培训、期待与您交流! ----------------------