sql数据库基本操作

128 阅读7分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第12天,点击查看活动详情

安装

SQL Server

SQL SSMS

第一章:数据库设计

一、数据库结构设计三范式

**第一范式:**是对属性的原子性,要求属性具有原子性,不可再分解。

**第二范式:**是对记录的惟一性,要求记录有惟一标识,即实体的惟一性,即不存在部分依赖;

**第三范式:**要求任何字段不能由其他字段派生出来,它要求字段没有冗余,即不存在传递依赖 ;

二、表关系

一对一联系(1:1)

一对多联系(1:N)

多对多联系(N:N)

第二章:建库建表

一、检查数据库名是否存在

如果需要创建数据库,可能会出现数据库名字重名的现象,我们可以使用如下代码查询数据库名是否存在,存在则删除此数据库。

--删除数据库(DBTEST就数据库名)
if exists(select * from sys.databases where name = 'DBTEST')
    drop database DBTEST

此代码检查数据库中是否存在"DBTEST"数据库,如果存在则删除此数据库,此处理方式最好只在学习阶段使用,在正式生产环境中慎用,操作不当可能会删除重要数据。

二、创建数据库

--创建数据库(DBTEST就数据库名)
create database DBTEST
on  --数据文件
(
    name = 'DBTEST',   --逻辑名称
    filename = 'D:\Data\DBTEST.mdf',  --物理路径及名称
    size = 5MB,  --数据文件初始大小
    filegrowth = 2MB --数据文件增长速度,也可以使用百分比来设置
)
log on  --日志文件
(
    name = 'DBTEST_log', --逻辑名称
    filename = 'D:\Data\DBTEST_log.ldf', --物理路径及名称
    size = 5MB, --日志文件初始大小
    filegrowth = 2MB --日志文件增长速度,也可以使用百分比来设置
)

以上代码创建"DBTEST"数据库,并且分别使用on和log on规定了数据文件和日志文件的信息。

创建数据库也可以按照如下简单语法来创建:

create database DBTEST

如果按照上述方式创建数据库,数据库的数据文件和日志文件的相关信息,全部采取默认值。

三、建表

使用数据库和删除数据表:

use DBTEST  --切换当前数据库为DBTEST
--删除表(先判断表在当前数据库是否存在,存在则删除,其中type='U'判断对象类型为用户定义表类型)
if exists(select * from sys.objects where name = 'Department' and type = 'U')
    drop table Department

创建数据表语法:

create table 表名
(
    字段名1 数据类型(长度),
    字段名2 数据类型(长度)
)

字符串类型比较:

char:定长,例如 char(10),不论你存储的数据是否达到了10个字节,都要占去10个字节的空间 。

varchar:变长,例如varchar(10),并不代表一定占用10个字节,而代表最多占用10个字节。最大长度8000,也可以使用varchar(max)表示2G以内的数据,但存储机制会和text一样,效率会降低。

text:长文本, 最大长度为2^31-1(2,147,483,647)个字符 。

nchar,nvarchar,ntext:名字前面多了一个n, 它表示存储的是Unicode数据类型的字符,区别varchar(100)可以存储100个英文字母或者50个汉字,而nvarchar(100)可以存储100个英文字母,也可以存储100个汉字。

四、修改表结构

(1)如需在表中添加列,请使用下面的语法:

alter table table_name
ADD column_name datatype

例如该员工表添加一列员工邮箱:

alter table People
add PeopleMail nvarchar(100)

(2)如需在表中删除列,请使用下面的语法:

ALTER TABLE table_name
DROP COLUMN column_name

例如删除员工表中的邮箱这一列

alter table People
drop column PeopleMail

(3)如需改变表中列的数据类型,请使用下列语法:

ALTER TABLE table_name
ALTER COLUMN column_name datatype

例如需要改变邮箱列的数据类型为varchar(100)

alter table People
alter column PeopleMail varchar(100)

五、删除添加约束

删除约束语法:

if exists(select * from sysobjects where name=约束名)
alter table 表名 drop constraint 约束名;
go

添加约束语法:

--添加主键约束
alter table 表名 add constraint 约束名称 primary key(列名)
--添加check约束
alter table 表名 add constraint 约束名称 check(条件表达式)
--添加unique约束
alter table 表名 add constraint 约束名称 unique(列名)
--添加default约束
alter table 表名 add constraint 约束名称 default 默认值 for 列名
--添加外键约束
alter table 表名 add constraint 约束名称 foreign key (列名) references 关联表名(关联表列名)

第三章:增删改查

一、向部门表插入数据

标准语法:

insert into Department(DepartmentName,DepartmentRemark)
values('软件部','......')
insert into Department(DepartmentName,DepartmentRemark)
values('硬件部','......')
insert into Department(DepartmentName,DepartmentRemark)
values('市场部','......')

简写语法:(省略字段名称)

insert into Department values('行政部','公司主管行政工作的部门')

此写法在给字段赋值的时候,必须保证顺序和数据表结构中字段顺序完全一致,不推荐使用此种写法,因为数据表结构变化的时候,数据会出错或产生错误数据。

一次插入多行数据:

insert into Department 
values
('行政部','公司主管行政工作的部门')
('市场部','......')
('硬件部','......')

二、查询数据是否插入成功

select * from Department
select * from [Rank]
select * from People 

三、修改数据示例

工资普调,为每个员工+500 元工资(批量修改)

update People set PeopleSalary = PeopleSalary + 500

将员工编号为8的工资+1000 元(根据条件修改)

update People set PeopleSalary = PeopleSalary + 1000 WHERE PeopleId = 8

将软件部(部门编号已知=1)所有员工工资低于1万的全部调整成1 万(根据多条件修改)

update People set PEOPLESALARY = 10000 WHERE DepartmentId=1 and PEOPLESALARY < 10000

修改刘备工资为以前的2 倍,并且修改其地址为北京(同时修改多个字段)

UPDATE People SET PEOPLESALARY = PEOPLESALARY*2,PEOPLEADDRESS='北京' WHERE PEOPLENAME = '刘备'

四、删除数据示例

删除员工表中所有数据

delete from People

删除市场部(已知部门编号=3)中工资大于15000 的所有员工

delete from People where DepartmentId = 3 and PEOPLESALARY > 15000

五、drop、truncate、delete区别

drop table:删除表对象,表数据、表结构、表对象都进行了删除。

delete和truncate table:删除表数据,表对象及表结构依然存在

delete与truncate table的区别如下

delete

  • 可以删除表所有数据,也可以根据条件删除数据。

  • 如果有自动编号,删除后继续编号,例如delete删除表所有数据后,之前数据的自动编号是1,2,3,那么之后新增数据的编号从4开始。

truncate table

  • 只能清空整个表数据,不能根据条件删除数据。

  • 如果有自动编号,清空表数据后重新编号,例如truncate table清空表所有数据后,之前数据的自动编号是1,2,3,那么之后新增数据的编号仍然从1开始。

基本查询

查询所有行所有列

select * from Department
select * from People
select * from Department

查询指定列

(姓名,性别,生日,月薪,电话)

select PeopleName,PeopleSex,PeopleBirth,PeopleSalary,PeoplePhone from People

查询指定列

(姓名,性别,生日,月薪,电话)(显示中文列名)

select PeopleName 姓名,PeopleSex 性别,PeopleBirth 生日,PeopleSalary 月薪,PeoplePhone 电话 from People

去重查询:distinct

查询员工所在的城市

(不需要重复数据显示)

select distinct PeopleAddress from People

重字段查询

假设准备加工资(上调20%),查询出加工资后的工资后的员工数据

select PeopleName,PeopleSex,PeopleSalary 原本工资,PeopleSalary*1.2 加薪后的工资 from People

条件查询

SQL中的运算符

符号描述
=等于
!=不等于
大于
<小于
>=大于等于
<=小于等于
is null为空
is not null不为空
in是否在其中
like模糊查询
between...and..是否在两者之间
and逻辑与
or逻辑或
not逻辑非