第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(数量:记录的条数)