Sql根底
- 1. sql根底
- 1.1. 数据库常用的数据类型
- 1.2. 带n与不带n的差异
- 1.3. 带var与不带var的差异
- 1.4. 2.根底操作
- 1.4.1. 更新句子
- 1.4.2. 删去句子
- 1.4.3. 束缚
- 1.4.4. 修正表结构
- 1.4.5. 查询表
- 1.4.6. 含糊查询 _ % [ ] ^
- 1.4.7. 多表查询
- 1.5. 3.ADO衔接数据库
1. sql根底
1.1. 数据库常用的数据类型
-
image:存储byte[],存储什么都能够只要是byte[]
-
字符串类型:
- char
- nchar
- varchar
- nvarchar
- text
- ntext
- varchar(max)
- nvarchar(max)
-
数值类型
- int
- float
- decimal
1.2. 带n与不带n的差异
char(2)
表明能够存储两个字节- 不带
n
的数据类型,存储中文等双字节符,占用两个字节,存储英文、数字等每个字符占用1个字节。 nchar(2)
表明存储两个字符- 带
n
的数据类型,不管存储数字、英文仍是中文都是一个字符,都是占两个字节。 - 带
n
的数据类型长度最长能够设置为4000,而不带n的数据类型的长度最长能够设置为8000 char(8000) varchar(8000
)nchar(4000)nvarchar(4000)
1.3. 带var与不带var的差异
char(10)
固定的长度,存储一个字节也是要占用10个字节,会主动补9个字节。varchar(10)
可变长度,会依据存储数据的巨细动态的重新分配存储空间,相对来说节约存储空间。- 10表明10字节,无论是可变长度仍是固定长度,超越10个字节都会报错。
1.4. 2.根底操作
1.4.1. 更新句子
update 表名 set 列=新值,列2=新值2 where 条件
1.4.2. 删去句子
delete form 表名 where 条件(条件可有可无)
truncate table 表名 (不能够加where条件)
- 删去整个表主张是用truncate
- truncate 删去时主动编号会康复初始的值。
- 运用truncate删去表中一切的数据的时分要比delete效率高的多。
1.4.3. 束缚
- 非空束缚
- 主键(PK)
- 仅有束缚(UQ)
- 默许束缚(DF)
- 查看束缚(CK)
- 外键束缚(FK)
1.4.4. 修正表结构
alter table 表名 drop(你要进行的操作alter) coulumn 列名
1.4.5. 查询表
select *from 表名 order by(默许为升序排序asc,降序为desc)
select Top 5 *from 表名 order by 列名 排序关键字。
select Top 30 percent *from 表名 order by 列名 排序关键字。(百分比取的话体系主动向上取整)
select distinct 列名 from 表名
distinct:针对内存中查询出的成果集,去除重复记录。
Top:一般与order by(排序)来合作运用,不排序的话前几名就没有什么含义。
1.4.6. 含糊查询 _ % [ ] ^
_
表明恣意的单个字符%
表明多个恣意的字符[ ]
表明挑选一个规模。如[0-9]
^
非的意思
1.4.7. 多表查询
语法:SELECT TABLE. FROM TABLENAME1 LEFT JOIN TABLENAME2 ON TABLENAME1.=TABLENAME2. WHERE
LEFT JOIN :回来左表中的一切数据
RIGHT JOIN :回来右表中的数据
FULL OUTER JOIN:回来左右表中的数据
SELECT
P.ProName AS '省份',
P.ProID,
ISNULL( C.CityName,'未匹配') as '省份',
C.CityID FROM Province AS P
LEFT JOIN City AS C
ON P.ProID=C.ProID
WHERE P.ProName='山东省'
ORDER BY P.ProID;
1.5. 3.ADO衔接数据库
衔接数据库的根本过程:(要点查看数据库衔接字符串的还有sql句子的履行)
- 创立数据库衔接字符。
- 创立数据库衔接目标。
- 创立履行指向sql 句子的目标(
sqlcommand
)。 - 翻开数据库衔接。
- 履行sql句子。
cmd.ExecuteNonQuery()
;//insert/delete/update句子时这个办法,这个办法有一个int的回来值,值是受影响的行数。履行其他的sql句子时永久回来-1。cmd.ExecuteScalar()
;//履行回来单个成果的时分运用这个办法。cmd.ExecuteReader()
;//查询出多行,多列时运用这个办法。
string constr = "Data Source=127.0.0.1;Initial Catalog=Test;User=sa;Password=neu@1234 ";
//创立数据库衔接目标
using (SqlConnection con=new SqlConnection(constr))
{
#region 刺进句子的履行
string sqlInsert = "insert into Tb_Student values('小黄','男',1333333333,18,'5454878','112')";
//创立履行sql句子的目标
using (SqlCommand cmd=new SqlCommand(sqlInsert, con))//刺进数据
{
con.Open();
Console.WriteLine("翻开数据库衔接成功!");
int r= cmd.ExecuteNonQuery();
Console.WriteLine("成功刺进了{0}行",r);
//cmd.ExecuteNonQuery();//insert/delete/update句子时这个办法,这个办法有一个int的回来值,值是受影响的行数。履行其他的sql句子时永久回来-1.
//cmd.ExecuteScalar();//履行回来单个成果的时分运用这个办法
//cmd.ExecuteReader();//查询出多行,多列时运用这个办法
}
将变量作为入参传入sql句子:
string sql = string.Format("insert into Tb_Class values(N'{0}',N'{1}')", name, info);
运用string.Format办法,选用的也是挖坑填坑的办法。