第16课–数据库开发及ado.net
数据库SQl,创建数据库和表,增删改语句,约束,top和Distinct,聚合函数介绍
SQL语句入门(脚本、命令)
SQL全名是结构化查询语言(Structured Query Language)
SOL语句是和DBMS“交谈”专用的语言,不同的DBMS都认SQL语法。
Sql中字符串使用单引号:通过写俩个单引号来转义一个单引号。
Sql中的注释“——” 单行注释比较好
判断俩个数据是否相等使用=(单等号)
在sql语句中sql代码不区分大小写
SQL主要分为:
DDL(数据定义语言、建表、建库等语言)(例:Create Table、Drop Table、Alter Table)
DML(数据操作语言)(例:Select、Insert、Update、Delete)
DCL(数据库控制语言)(例:GRANT授权、REVOKE取消授权)
实例代码:
–1.创建一个数据库
create database School;
–删除数据库
drop database School;
–创建数据库的时候指定一些选项
create database School
on primary
(
name=’School’,
filename=’D:\Desktop\置心一处,无事不成。\二、编程\(四)笔记\黑马程序员.NET视频教程-Time\第课-数据库开发及ado.net\School.mdf’,
size=5mb,
–filegrowth=10mb,
filegrowth=10%,–按照文件的百分比增长
maxsize=100mb
)
log on
(
name=’School_log’,
filename=’D:\Desktop\置心一处,无事不成。\二、编程\(四)笔记\黑马程序员.NET视频教程-Time\第课-数据库开发及ado.net\School_log.ldf’,
size=3mb,
filegrowth=3%,
maxsize=20mb
)
–切换数据库
use School;
–在School数据库中创建一个学生表.TableStudent
Create table TblStudent
(
–表中列的定义在这对小刮号中
tSId int identity(1,1) primary key,
tSName nvarchar(10) not null ,
tSGender bit not null,
tSAddress nvarchar(300),
tSPhone varchar(100),
tSAge int,
tSBirthday datetime,
tSCardId varchar(18),
tsClassId int not null–最后一行不加“,”
)
go
–创建一个班级表
create table TblClass
(
tclassId int identity(1,1) primary key,
tclassName nvarchar(50) not null,
tclassDesc nvarchar(100)
)
介绍生成脚本工具
数据库→右键→任务→生成脚本
可选择生成什么样的脚本
- 选择生成的数据库版本
- 是否包含某些脚本等
- 是否生成带数据的脚本(2005、2008都有该功能Express没有。)
简单数据插入INSERT
–使用insert语句向数据库的表中插入数据
select * from TblClass
–1.insert向表中插入一条数据
insert into TblClass(tclassName ,tclassDesc ) values(‘Time第三期’,’珍惜时光’)
–向自动编号列插入数据
set identity_insert tblClass on
insert into TblClass(tclassId ,tclassName ,tclassDesc ) values(101,’Time第三期’,’珍惜时光’)
set identity_insert tblClass off
–Ctrl+R 快捷键
–如果要向该表中的除了自动编号以外的其它所有列都插入数据,则可以省略列名
insert into TblClass values(‘Time第四期’,’时光不老,你我不散’)
select * from TblStudent
–向TblStudent表中插入数据
—-表中列的定义在这对小刮号中
— tSId int identity(1,1) primary key,
— tSName nvarchar(10) not null ,
— tSGender bit not null,
— tSAddress nvarchar(300),
— tSPhone varchar(100),
— tSAge int,
— tSBirthday datetime,
— tSCardId varchar(18),
— tsClassId int not null–最后一行不加“,”
insert into TblStudent(tSName,tSGender,tSAddress,tSPhone,tSAge,tSBirthday,tSCardId,tsClassId)
values(‘Time001′,0,’上海区’,’1778918281′,18,’1989-10-11′,’78267287282819829X’,1)
insert into TblStudent
values(‘Time001′,0,’上海区’,’1778918281′,18,’1989-10-11′,’78267287282819829X’,1)
–insert语句向表中那些不允许为空的列插入数据(tsClassId 不允许为空,必须插入数据)
insert into TblStudent(tSName,tSGender ,tSAddress ,tsClassId )
values(‘Time002′,0,’上海”郊区’,2)
–null值就是表示空值
–insert into语句一次只能向表中插入一条记录,如果通过一条语句向表中插入多条记录,
–则需要使用其它方式insert语句。
select * from TblClass
–通过一条sql语句向表中插入多条sql语句
insert into TblClass(tclassName ,tclassDesc)
select ‘Time第五期’,’珍惜时间,岁月不老’ union
select ‘Time第五期’,’珍惜时间,岁月不老’ union
select ‘Time第五期’,’珍惜时间,岁月不老’ union
select ‘Time第五期’,’珍惜时间,岁月不老’ union
select ‘Time第五期’,’珍惜时间,岁月不老’ –最后一行不需要union
create table TblClassBak
(
ClsId int identity(1,1) primary key,
ClsName nvarchar(50) not null,
ClsDesc nvarchar(50) null
)
select * from TblClassBak
–将TblClass表中的数据导入(复制)到TblClassBak表中
–也是使用Insert语句
–insert into表(列) select 列,列from 表
insert into TblClassBak (ClsName ,ClsDesc )
select tclassName,tclassDesc from TblClass
–N前缀,在存储中文字符时候,必须加大写字母N。
简单数据更新(数据修改)
use School
select * from TblClass
–更新语句
update 表名 set 列名=值,列名=值 where 条件
–在编写更新语句的时候,如果没有where条件则表示将表中的所有数据都更新为指定的数据。
–所有学生年龄加
update Student set sAge=sAge+1
–这么写tclassName=’▲’,表示这列的值变为一个‘▲’
–而我们的要求是在原来的列的基础上加上‘▲’
update TblClass set tclassName=tclassName +’▲’ where tclassId <100
–更新多列
update TblClass set tclassName=tclassName +’▲’,tclassDesc =tclassDesc+’★’ where tclassId =100
–where中可以使用其它的运算符:(||)or ,<>(!=), (&&)and,(!)not
简单数据删除(DELETE)
删除表中全部数据:delete from Student
Delete 只是删除数据,表还在,和Drop Table不同
Delete 也可以带whre子句删除一部分数据:例:delete from student where sAage >20
Truncate table student 的作用跟delete from student 一样
都是删除student表中的全部数据,区别在于:
1. Truncate语句非常高效。由于truncate操作采用按照最小方式记录日志,所以效率比较高。对于数百万条数据使用truncate删除只要几秒钟,而使用delete需要几个小时。
2. Truncate语句会把表中的自动编号重置为默认值(恢复到种子的位置),而通过delete删除表中的数据后,还是从之前的数据继续添加。
3. Truncate语句不触发delete触发器。
4. Truncate 只能将表中所有数据删除,无法添加where,不能根据条件来删除。
–复习
insert into 表(列) values(值)
update 表 set 列=值,列=值 where …
–删除语句
delete from 表名 where …
select * from TblClass
–删除tclassId为偶数的数据
DELETE FROM TblClass where tclassId%2=0
–删除表中全部数据
delete from TblClass
truncate table TblClass
–删除表
drop table TblClass
通过设计器增加约束(结束.保证数据完整性)
–通过设计器添加约束
–为EmapEmail添加一个唯一约束
–设计→右键→索引/键(已存在EmpId主键索引)→添加→设置(类型:唯一键;选择对应的列)
–为性别添加一个默认约束,默认为’男’
–设计→选中该列→在下方属性中→默认值或绑定(输入:男)
1.主键约束
2.外键约束
3.唯一约束
4.默认约束
5.检查约束
6.非空约束
7.添加外键时,设置级联更新,级联删除
通过SQL添加约束
–删除表
drop table Employees
drop table Department
–创建表
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),
DepName varchar(50)
)
-============手动增加约束==========
–手动删除一列(删除EmpAddress列)
alter table Employees drop column EmpAddress –删除、修改时候需要加关键字column,添加时候则不需要。
–手动增加一列(增加一列EmpAddr varchar(1000))
alter table Employees add EmpAddr varchar(1000) not null
–手动修改一下EmpEmail的数据类型(varchar(200))
alter table Employees alter column EmpEmail varchar(200) not null
–为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)
–为性别增加一个默认约束,默认为’男’
alter table Employees add constraint
DF_Empyloyees_EmpGender default(‘男’) for EmpGender
–为年龄增加一个检查约束:年龄必须在-120岁之间,含岁与岁。
alter table Employees add constraint
CK_Employees_MepAge check(EmpAge>=1 and EmpAge<=120)
–创建一个部门表,然后为Employee表增加一个DepId列。
alter table Employees add DepId varchar(50) not null
–为Department表增加一个主键约束
alter table Department add constraint
PK_Department_DepId primary key(DepId)
–为DepName列增加一个非空约束与唯一约束
–非空约束
alter table Department alter column DepName varchar(50) not null
alter table Department add constraint UQ_Department primary key(EepName)
–为Employee表增加一个DepId列。
alter table Employees add DepId int not null
–增加外键约束
alter table Employees add constraint
FK_Emolopyees_DepId foreign key(DepId) references Department(DepId)
–删除Employee
drop table Employees
drop table Department
truncate table TblClass
–通过sql代码删除约束
alter table Employees drop constraint CK_Employees_EmpAge
–用一句话来删除相应的约束
alter table Employees drop constraint
CK_Employees_EmpAge,
CK_Employees_MepAge,
DF_Empyloyees_EmpGender
–通过一句代码来创建所有约束
alter table Employees add
constraint UQ_Employees_Empname unique(Empname)
constraint CK_Employees_EmpAge check(EmpAge>=1 and EmpAge<=120),
onnstraint DF_Employees_EmpGender default(‘男’) for EmpGender,
constraint FK_Employees_Dempartment foreign key(DepId)
references Department(DepId) on delete cascade on update cascade
数据检索:数据查询
–查询所有数据:表中的所有列的所有行。
select
from TblStudent
–查询指定的列的数据,由于没有加where条件所以这里也是要返回所有行的数据。
select tsname,tsgender,tsage
from TblStudent
–as 可以设置显示的列名
select ‘黄林’ as 姓名,18 年龄,’huanglin@yahoo.com’ 邮箱
select 1+1 as ‘1+1的结果’
–获取当前系统时间(网格型)
select getdate() as 时间
–输出时间(文本型)
print getDATE()
TOP、Distinct
TOP/Distinct
–查询前五个
select top 5 * from Employees
–查询ID最大值前五条,降序排序
select top 5 * from Employees order by EmployeeId desc
–查询部分数据前五条
select top 5
Lastname,
FirstName,
[Address]–因为Address是关键,则需加上[]
from Employees
–查询前百分之十(向上取整)
select top 10 percent * from Employees
–获取年级最小的五个学生
select top 5 * from TblStudent order by tsage asc
–获取年纪最大的%的学生
select top 10 * from TblStudent order by tsage desc
–distinct是对查询出的整个结果集进行数据重复处理的,而不是针对某一列
select
distinct
tsname,
tsgender,
tsaddress
from TblStudent
聚合函数
SQL聚合函数:
MAX(最大值)、MIN(最小值)、AVG(平均值)、SUM(和)、COUNT(数量:记录的条数)