数据库总结

【1】SQL语句
1.查询所有文件 select * from 表名 home+f5 执行
2.或者(or),且(and),非(not)
【2】SQL类型
1.Char,8000 固定长度的非Unicode字符数据,固定长度的字符串相对于可变长度的字符串来说效率要高一些,
在数据长度固定的情况下优先选用固定长度,省去了计算长度的过程提高效率。char(10)能存5个汉字或者10个字母,如果存在的字符个数小于10,其他用空格补上。
2.Varchar,8000 可变长度的非Unicode字符数据,存10个字母或数字,5个汉字,如果存的个数小于10后面不回加空格。
3.Nchar,4000 固定长度的Unicode数据,存10个汉字或者10个字母。
4.Nvarchar,4000 可变长度的Unicode数据,存储10个汉字或者字母,数字,但是不到10个不会用空格补上。
5.Textvarchar(max)存储长文本信息(指针,2G)varchar(max),大字符串类型可以保存非常多的字符,
但是对于这种类型的数据DBMS经常将它们保存到单独的空间中,这就导致了数据的加载和保存比较慢,因此除非必要,否则不要使用。
6.Ntextnvarchar(max)Nvarchar(max)代替
【3】代码片段
1.
–通过代码创建数据库
create database MyDatabase
on primary
(
name=’MyDatabase_data’,–数据库主文件名字
filename=’D:\Program Files (x86)\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA\MyDatabase.mdf’,–主文件的路径
size=3mb,–数据库初始大小
maxsize=10mb,–最大值
filegrowth=1mb–增长量
)
log on
(
name=’MyDatabase_log’,–日志文件名字
filename=’D:\Program Files (x86)\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA\MyDatabase.ldf’,–日志文件的路径
size=2mb,–日志文件大小
maxsize=5mb,–日志文件最大值
filegrowth=10%–日志文件的增长量
)
–通过代码创建表
create table Class
(
ClassID int identity(1,1) primary key,
ClassName nvarchar(5) not null,
ClassDesc nvarchar(20)
)
drop table Class–删除表
–创建一个餐桌表
–主键
–餐桌的编号
–餐桌的描述信息
–餐桌的备注
–标识 0–空闲的 1—使用的 2 预定的
–餐桌的创建时间
create table DeskInfo
(
DeskId int identity(1,1)primary key,
DeskNumber nvarchar(10),
DeskDesc nvarchar(10),
DeskRemark nvarchar(10),
Flag int ,
DeskStartDateTime datetime
)

select * from DeskInfo

select * from Class
【4】
–通过代码添加数据
–第一种方式
insert into 表名(列名1,列名2) values(值1,值2)
insert into Class(ClassName, ClassDesc) values(‘0924就业班’,’史上最牛x的班级,以后都是最牛的’)
–添加数据显示的受影响的行数

–第二种
insert into 表名 values(值)–vs
insert into Class values(‘1024就业班’,’和之前班比逊色了一些’)
–第三种方式,一次性插入多条数据
insert into Class values(‘1024就业班’,’和之前班比逊色了一些’)
insert into Class values(‘1025就业班’,’和之前班比逊色了一些’)
insert into Class values(‘1026就业班’,’和之前班比逊色了一些’)
insert into Class values(‘1027就业班’,’和之前班比逊色了一些’)
–第四种方式–一次插入多条数据
insert into Class(ClassName, ClassDesc)
select ‘1111就业班’,’不知道什么样’ union
select ‘1112就业班’,’啥样啊1’ union
select ‘1112就业班’,’啥样啊2’ union
select ‘1112就业班’,’啥样啊3’

select 100+10
【5】
–修改数据

select * from class
update 表名 set 列1=值1,列2=值2
update Class set ClassDesc=’都是好厉害的’
–修改或者更新表中的数据返回的是受影响的行数
update Class set ClassDesc=’都很厉害啊’ where ClassId<>1

–切换数据库
use MyItcast

select * from student

–把名字为张角的人 他的性别变成女 同时 年龄变成12
update student set TSGender=0 ,TSAge=12 where TSName=’张角’
–年龄大于25岁的所有的人 年龄再加1
update student set TSAge=TSAge+1 where TSAge>25

–把id为11的人的年龄和地址 都改变
update student set TSAge=77 ,TSAddress=’许昌’ where TSId=11

create table Class
(
ClassId int identity(1,1) primary key,
ClassName nvarchar(10),
ClassDesc nvarchar(20)
)
【6】
–删除

–新增和修改 返回的都是受影响的行数

select * from class
insert into class values(‘0924就业班’,’好厉害’)
–第一种,数据没了,表还在,但是id接着删除前的id继续加1
delete from class where classid=15
–第二种,表没了,数据也没了
drop table class–轻易不要尝试

–第三种方式,表存在,数据没了,id从1开始
truncate table class
–删除一条数据
delete DeskInfo where DeskId=11 and DeskName=’李德坤’

【7】
select * from TblScore

update TblScore set TEnglish=TEnglish+10 where TSId=9

–给所有人加5分,如果超过100,按100算,不到100就按加上5分后的成绩算
update TblScore set tEnglish=100 where tEnglish+5>100
update TblScore set tEnglish=tEnglish+5 where tEnglish+5<=100

【8】
select * from TblStudent

create table Employees
(
EmpId int identity(1,1),
EmpName varchar(50),
EmpGender char(2),
EmpAge int,
EmpEmail varchar(100),
EmpAddress varchar(500)
)

create table Department
(
DepId int identity(1,1) primary key,
DepName varchar(50) unique not null
)
【9】
非空约束:null前的勾干掉
主键约束:右键设置主键,改一下标识,有图

【10】
–练习
–手动删除一列(删除EmpAddress列)
alter table Employees drop column EmpAddress
select * from Employees
–手动增加一列(增加一列EmpAddr varchar(1000))
alter table Employees add EmpAddr varchar(100)
–手动修改一下EmpEmail的数据类型(varchar(200))
alter table Employees alter column EmpEmail varchar(200)
–为EmpId增加一个主键约束
alter table Employees add constraint PK_Employees_EmpId primary key(EmpId)
–非空约束,为EmpName增加一个非空约束
alter table Employees alter column EmpName varchar(50) not null
–为EmpName增加一个唯一约束
alter table Employees add constraint UQ_Employees_EmpName unique (EmpName)
insert into Employees values(‘小虎’,’男’,23,’[email protected]’,’北京’)
–为性别增加一个默认约束,默认为’男’
alter table Employees add constraint DF_Employees_EmpGender default(‘男’) for EmpGender
–为年龄增加一个检查约束:年龄必须在1-120岁之间,含岁与岁。
alter table Employees add constraint CK_Employees_EmpAge check(EmpAge>=1 and EmpAge<=120)
–创建一个部门表,然后为Employee表增加一个DepId列。
alter table Employees add DepId int not null
–增加外键约束
alter table Employees add constraint FK_Employees_Department_DepId foreign key(DepId) references Department(DepId)
【11】
use MyItcast–切换数据库
–查询
select * from student

select tsname,tsage,tsgender from student
–第一种方式
select tsname as ‘姓名’,tsage as ‘年龄’ from student
第二种方式
select tsname as 姓名,tsage as 年龄 from student
–第三种方式
select 名字=tsname,年龄=tsage from student

select 名字=tsname,年龄=tsage from student where TSGender=1

select 100+90
select GETDATE()
print 100+90
print ‘当前时间’+getdate()–转换的问题–坑 .

–查询所有的数据中的前10条数据
select top 10 * from student
–查询年龄最小的5个学生的信息(数据库默认是从小到大查询,如果是想从大到小查询的话则是加上desc)
select top 5 * from student order by TSAge
–从大到小排序 查询的是 年龄最大的百分之10的学生信息
select top 10 percent * from student order by TSAge desc
select * from student
–去除重复
select distinct TSName from student
–多重条件查询
select distinct Name as 不及格的同学 from Score where Chinese<60 or Math<60 or English<60 or Java<60 or C#<60 or Datebase<60
select * from TblScore
–查询 英语成绩最高的三个人
select top 3 * from TblScore order by TSEnglish desc
–查询 数学成绩和英语成绩,要求 列名显示的是中文,并且数学成绩从低到高 前5个人
select top 5 tsmath as 数学, tsenglish as 英语 from TblScore order by TSMath

select * from student
–查询的是有多少条的数据
select COUNT(*) from student
–Max
select * from TblScore

–查询的是最高的数学成绩
select MAX(TSMath) from TblScore
–数学成绩最高的这个人的英语成绩和数学最高成绩

select MAX(tsmath),TSEnglish from TblScore

select top 1 tsenglish,TSMath from TblScore order by TSMath desc

–成绩表中数学成绩最低的是多少
select MIN(TSEnglish) from TblScore

select SUM(tsenglish) from TblScore
select AVG(tsenglish) from TblScore
【12】
–NULL是否参与运算 不参与聚合函数运算
select * from TblScore
select
MAX(tsenglish)as 英语最高成绩,
MIN(tsenglish)as最低成绩,
SUM(tsenglish) as 总和,
AVG(tsenglish) as 平均成绩
from TblScore
–统计行的时候null也没参与
select COUNT(TSEnglish) from TblScore

–数学
最大值
最小值
平均值
总和
有多少条数据
—合并到一起显示

关于和所有列 换行 null是否 包含在的问题
【13】确定范围 in or的使用
select * from TblScore
select tsid,tsenglish,tsmath from TblScore
select COUNT(TSEnglish) from TblScore

select TSId from TblScore where TSEnglish<60

select * from student where TSAge>=20 and TSAge<=30 and TSGender=1
select * from student where TSGender=1 and TSAge between 19 and 29

–第一种方式
select * from student where TClassId=1 or TClassId=2 or TClassId=3
–第二种方式
select * from student where TClassId in(1,2,3)

use nononodeleteImportant
select * from Customers where Country in(‘UK’,’USA’)

use MyItcast
【14】字符串的匹配
select * from tblstudent
–查询的是以张开头的所有的名字
select * from tblstudent where TSName like ‘张%’
–查询的是以张开头的名字,只有两个字
select * from tblstudent where TSName like ‘张_’
–查询的是以张开头的名字,三个字
select * from TblStudent where tSName like ‘张%’ and LEN(tSName)=3
–第二种
select * from tblstudent where TSName like ‘张_ _’
查询以张开头的名字并且第二个字中有字母的,三个字
select * from TblStudent where tSName like ‘张[a-z]%’
查询名字包含张
select * from TblStudent where TSName like ‘%张%’
查询名字中第二个字包含百分号
select * from TblStudent where TSName like ‘张[%]%’
查询名字中第二个字为数字并且一共有三个字
select * from TblStudent where tSName like ‘张[0-9]_’
查询名字第二个字不是数字并且一个三个字
select * from TblStudent where tSName like ‘张[^0-9]_’

select * from TblScore where english = null
【15】
use MyItcast
–不行
–错误写法select * from TblScore where TSEnglish=null
select * from TblScore where TSEnglish is null
select * from TblScore where TSEnglish is not null
【16】
–英语成绩高的按数学成绩排
select * from TblScore order by TSEnglish desc,TSMath desc

select * ,总成绩=(TSEnglish+TSMath)from TblScore order by (tsEnglish+tsMath) desc
【17】 group by
select * from student
–请从学生表中查询出每个班的班级Id和班级人数:
select tclassid as 班级的id,COUNT(*) as 班级的人数 from student group by TClassId
having COUNT(*)>3
–having 是在分组后还要进行筛选…….
–.请从学生表中查询出每个班的班级Id和班级中男同学的人数:
select tclassid as 班级的id,COUNT(*) as 班级的人数 from student where TSGender=1 group by TClassId
–总查询
select
购买人,
销售总数量=SUM(销售数量)
from MyOrders
where 商品名称=’可口可乐’
group by 购买人
order by 销售总数量 desc
【18】union

– 首先将int英语成绩转换为varchar,在转换过程中如果值是null,则将用缺考替代
select
ISNULL(CONVERT(varchar(10),tsEnglish),’缺考’)–判断是否为null
from Tblscore

–合并表
合并两个表:确保列数相同,类型相同
–联合结果集
select tsid,tsname,tsaddress from student
union
select tclassid,tclassname,tclassdesc from Tblclass
union
select sid,convert(varchar(5),tsmath),convert(varchar(10),tsenglsih) from Tblscore
–利用union将横表改成竖表
select ‘最高成绩’as 内容,MAX(tsenglish)as 分数 from Tblscore
union
select ‘最低成绩’,MIN(tsenglish) from Tblscore
union
select ‘平均成绩’,AVG(tsenglish) from Tblscore
union作用就是把几个列合并一块,遵循列数相同,类型相同的原则
select ID,Name,Gender ,CONVERT(varchar(5),Sage)as 内容 from Score
union
select CONVERT(varchar(5),SID),SName,CONVERT(varchar(5),Sscore),SGender from student
union 会去重复
union all 不会去重复

【19】 备份 select *into 一次插入多条数据
–备份 把表中的数据 在存放到另一个表中
–第一种方式,把结构和数据一块备份 但是不会把约束备份
select * into allstudent from student
select * from allstudent
–第二张方式 只拷贝表的结构 不要表的数据 效率低
select *into asstudent from student where 1<>1
select *from asstudent
–第三种方式 只拷贝表的结构 不要表的数据 效率比第二种高
select top 0 * into sstudent from student
select top 1 * into sstudent1 from student
select * from sstudent
select * from sstudent1
–第四种方式
insert into backupStudent select * from student (backupstudent表必须提前建好)
【20】
–字符串的长度
select LEN(SName) from student
select LEN(‘挖掘你技术哪家强’)
–查字节个数(汉字站两个字节,标点以及英文字母站一个字节)
select DATALENGTH(‘我叫李德坤,a’);
–大小写转换
select LOWER(‘HELLO’);–转小写
select UPPER(‘word’);–转大写
–去除两边的空格
select ‘========’+LTRIM(’ 哈哈哈哈哈哈 ‘)+’===’;–去除左边的空格
select ‘========’+RTRIM(’ 哈哈哈哈哈哈 ‘)+’===============’;–去除右边的空格
select ‘=====’+RTRIM(LTRIM(’ 哈哈哈 ‘))+’=====’;

–时间日期函数
–dateadd
select DATEADD(YEAR,5,GETDATE());–当前时间的年加5年
select DATEADD(MONTH,5,GETDATE());–
select DATEADD(DAY,5,GETDATE());
select DATEADD(HOUR,5,GETDATE());
select DATEADD(SECOND,5,GETDATE());
–DATEDIFF 获取几年,求年份差
select DATEDIFF(YEAR,’2010’,GETDATE());
–DATEPART 获取当前时间的某个部分
select DATEPART(YEAR,GETDATE())
【21】
–查找子字符串在父的位置
SELECT CHARINDEX(‘ACCP’,’My Accp Course’,1)
–字符长度
SELECT LEN(‘SQL Server课程’)
–字节长度
SELECT DATALENGTH (‘SQL Server课程’)
–转小写
SELECT LOWER(‘HELLO’)
–转大写
SELECT UPPER(‘hello’)
–去空格
SELECT LTRIM(’ 周 瑜 ‘)
SELECT RTRIM(’ 周 瑜 ‘)
SELECT LTRIM(RTRIM(’ 周 瑜 ‘))
–截取
SELECT RIGHT(‘买卖提.吐尔松’,3)
SELECT left(‘买卖提.吐尔松’,3)

SELECT SUBSTRING(‘hello everyone’,3,2)
–替换
SELECT REPLACE(‘莫乐可切.杨可’,’可’,’兰’)
SELECT REPLACE(’ 周 瑜 ‘,’ ‘,”)

SELECT STUFF(‘ABCDEFG’, 2, 3, ‘我的音乐我的世界’)

–日期
SELECT GETDATE()
–日期加法
SELECT DATEADD(mm,3,DATEADD(yy,4,’99-01-01’))
–日期差
SELECT DATEDIFF(mm,’1999-01-05’,’1998-08-06’)

–转换函数
SELECT CONVERT(VARCHAR(20),200)

SELECT CAST(200 AS VARCHAR(20))
【22】查询的同时拿到插入的主键
第一种方法 select @@identity;
第二种方法 insert into class(列名) output inserted.想显示的列名,inserted.想显示的列名 values()
【23】
三种读取列的数据的方式
using(sqlDateReader reader=cmd.ExecuteReader)
1.string name=reader.getstring()
2.reader[i];
3.reader[列名];
【24】根据列名获取该列的序列号
int index=reader.getordinal(列名);
int count=reader.fieldcount;
【25】注意事项
//如果数据中 某列的值是float 小数 C#中 double
//关于NULL C#中的null 不是一个–后面用代码 演示 —坑
//bit 类型的数据 在C#中怎么显示–性别 true false —坑
【26】关于文件读写操作的问题
using(StreamWriter sw=new StreamWriter())
{
sw.Writerline(“文件名.txt”,写方式);
}
读一样的操作
【27】封装类操作
1.首先将App.config 文件添加,具体如下

你可能感兴趣的:(C#)