补充点: 外键的使用
1.插入语句
一条数据插入:字段名 相当于这个表里面的属性
insert into 表名称(字段名1,字段2,.....)values(值1,值2,......)
多条数据插入:
方式一:insert into 表名称(字段名1,字段名2,...)select 值1,值2,... union select 值1,值2,...
方式二:insert into 表名称 values(值1,值2,值3,....),(值1,值2,值3,....),......;2.修改语句
列名称 表中的属性 只是修改查看时候的名称 表中的值还是没有变的
update 表名称 set 列名称=新值 where 列名称=某值
3.删除语句
delete from 表名称 --删除
truncate table 表名 --truncate语句不能跟where条件,无法根据条件来删除,只能全部删除数据。
drop from 表名 --删除表结构和数据
4.查询表格
select* from 表名称 查询表格所有数据
5.like通配符
_ 标识一个字符
% 表示任意长度的字符串
[] 括号中所指定范围内的一个字符
[^] 不在括号中所指定的范围内的一个字符
6.运算符:
>、<、>=、<=、!、=、<>(不等于)
7.排序
order....by
asc 默认的升序排序
desc 要写出来的 降序排序
select * from tb_student where ssex = '男' order by sage;--语法 根据年龄排序 所有的男性tb_表名 ssex 性别 sage 年龄
8. top 查询中选前面多少行,percent 拿到表中百分之多少的数据
--取前几条数据 top
--关键字所处位置 select后面
--查询年龄最大的一位
select top 1 * from tb_student order by sage desc;--percent 百分比
--拿到表中50%的数据。
select percent 50 * from tb_student;9.截断表中所有的数据 就是初始化一样 作用如果表格使用了标识符identity(种子就是开始的值,每次增加的值),这个标识符 删除表格里面的数据后 标识符就不会从原有的种子那个值开始 所以用截止初始化表格 就可以让标识符从最开始的初始化值开始!!!!
--截断表中所有的数据
truncate table tb_student;truncate table 表名 ;
引用代码
--03.sqlserver 数据管理(增删改查)
--在表格已创建好的情况下,对表格进行新增数据,修改数据,删除数据,根据需求查询到指定数据
--通过sql脚本进行操作。
--新增:insert
--删除:delete
--修改:update
--查询:selec
---------------------------------------------------------------
--准备工作
create database db_T281_1115;
use db_T281_1115;
drop table tb_student;
create table tb_student
(
sid int primary key identity(1,1),--编号 identity(1,1):标识列
sname varchar(100) not null,--姓名
ssex varchar(2) not null check(ssex in('男','女')),--性别
sage int check(sage >=10 and sage <=30),--年龄
saddress varchar(100) default '浪琴湾',--地址
stel varchar(100)--电话
)
/*
1.新增操作:将数据通过脚本的方式插入到指定的数据表中
关键词:insert(插入) into(到....) value(值)
语法:insert into tb_表名(属性1,属性2,属性3,...) values
(值1,值2,值3,...);
注意事项:
(1)当插入成功后会提示:(1 行受影响)
(2)如有字段(属性)有默认值,可以省略。不是default修饰也可以省略
表名后面的属性必须与values后面的值的个数以及顺序必须一致。
(3)当插入数据时,如果表中的全部属性全部要进行插入时,
表名后面的属性可以省略。
(4)当表中的编号在插入时,如果是有顺序的,可以通过
"标识列"让系统帮助我们自动表示,用户就不能手动维护。
前提:这个属性必须要用"主键约束"定义
标识列:identity(参数1,参数2)
参数1:种子
参数2:增长量
(5)多行插入
只需一个insert就可以实现插入多行数据
insert into tb_表名 values
(),(),();
*/
insert into tb_student(sname,ssex,sage,saddress,stel)
values('杨威','男',18,'湖南省长沙市玉兰路隔壁网吧','1563767326');
insert into tb_student(sname,ssex,sage,stel)
values('香肠','女',28,'15637633336');
insert into tb_student(sname,ssex,sage)
values('章鱼','女',18);
insert into tb_student
values('康媳妇','男',22,'湖南省长沙市玉兰路隔壁网吧','1563337326');
insert into tb_student values
('东方不败','女',23,'黑木崖','110'),
('唐烨','男',13,'湖南浪琴湾','110'),
('唐铨','男',13,'长沙市浪琴湾','110'),
('唐洁','女',22,'和南浪琴湾','110'),
('唐师傅','男',21,'黑木崖浪琴湾','110'),
('唐养胃','女',18,'邵阳玉兰路','110'),
('瑜伽','男',16,'黑木崖玉兰路','110');
--------------------------------------------------------
/*
修改:update修改 set 设置|更新
作用:1.针对全部记录 2.针对某一个记录
1.针对全部记录 没有条件
update tb_表 set 某属性 = '修改后的新值'
2.针对某一个记录 有针对性的 条件(where)--当....的时候
update tb_表 set 某属性 = '修改后的新值' where 某属性 = '某值';
3.当修改一条记录中多个属性时,只需要使用逗号隔开即可。
*/
--将学生信息表中所有人的年龄+2岁
update tb_student set sage = sage+2;
--将电话都修改为120
update tb_student set stel = '120';
--当学号为3的情况下,修改他的姓名为:谢文建
update tb_student set sname = '谢文建' where sid = 3;
--如果年龄在16-22岁之间,修改他们的电话为15084961293
update tb_student set stel = '15084961293'
where sage >=16 and sage <=22;
--当学号为6的情况下,修改他的全部信息(不包括主键)
update tb_student set sname = '杜欣露' , ssex = '男',
sage = 18,saddress = '湖南省长沙市岳麓区',stel = '1764327337'
where sid = 6;
------------------------------------------------------------------
/*
删除:delete
目的:单个,全部
1.删除全部 不加条件
delete from tb_表
2.删除单个 加条件
delete from tb_表 where 某属性 = '某值'
*/
--删除学号为9的信息
delete from tb_student where sid = 9;
--删除信息表中的所有的男生
delete from tb_student where ssex = '男';
--删除所有数据
delete from tb_student;
--拓展:截断表中所有的数据,类似delete删除
--区别:如果表中属性没有设置标识列,无区别
--如果设置了标识列,delete删除后,再次添加数据,标识列不会归零
--truncate截断后,再次添加数据,标识列会归零。
--特别注意:truncate截断的语法后不能接where
--truncate table 表名;
--截断表中所有的数据
truncate table tb_student;
-------------------------------------------------------------
/*
查询:select
语法:很杂乱,关键字太多了
*/
--1.基础查询语法(查询所有)
--select 属性1,属性2,属性3,属性4,... from tb_表;
--需求:查询student表中所有的数据
--select sid,sname,ssex,sage,saddress,stel from tb_student;
--注意:当查询数据是所有的属性时,可以使用'*'替代。
select * from tb_student;
--查询指定的字段
--查询并显示所有学员的姓名,性别,年龄
select sname,ssex,sage from tb_student;
--2.别名:当属性名过长时,可以用简短的字符替代,不会破坏表的结构
--(1)
select sname as '姓名',ssex as '性别' from tb_student;
select sname 姓名,ssex 性别 from tb_student;--最实用
--(2)
select sname '姓名',ssex '性别' from tb_student;
--(3)
select '姓名' = sname ,'性别' = ssex from tb_student;
--3.条件查询 限制查询指定的数据 where 当....时候
--select * from tb_表 where 某属性 = '某值'
--查询所有的女生
select * from tb_student where ssex = '女'
--查询学号为1的学员信息,显示姓名,年龄
select sname,sage from tb_student where sid = 1;
--查询年龄在18-25岁之间的学员有哪些?
select * from tb_student where sage >=18 and sage <=25;
--在....之间 between ....and
select * from tb_student where sage between 18 and 25;
--查询表中所有的女生并且年龄在18-22岁之间
select * from tb_student where ssex = '女' and sage between 18 and 22;
--查询所有姓唐的学员信息。约等于
--大概等于 包含
--模糊查询 like 像....
--like关键字不能单独使用,一般于匹配符一起使用
-- % 替代任意个的任意字符
-- _ 替代一个任意字符
--select * from tb_student where sname = '唐'--错误的写法
--查询所有姓唐的学员信息。
select * from tb_student where sname like '唐%';
--查询所有行唐的学员信息且唐后面只有一个字。
select * from tb_student where sname like '唐_';
--查询所有住在浪琴湾的学员信息
select * from tb_student where saddress like '%浪琴湾%'
--查询电话以6结尾的学员信息
select * from tb_student where stel like '%6';
---------------------------------------------------------------------
--排序:order by 升序(asc)默认, 降序(desc)
--排序所处的位置 在表后面可以 再where后面也可以。where条件完成后在家order by where 不能用在order后面
--查询学员信息表后按照年龄降序排序
select * from tb_student order by sage desc;
--查询所有的男生,然后年龄升序。
select * from tb_student where ssex = '男' order by sage;
select * from tb_student where ssex = '男' order by sage asc;
--注意事项:当一个select语句中出现多个字段排序,只需逗号隔开即可
--但是:结果可能不是我们想要的,就是正确的。
--先学号降序,然后年龄升序
select * from tb_student order by sid desc,sage asc;
--取前几条数据 top
--关键字所处位置 select后面
--查询年龄最大的一位
select top 1 * from tb_student order by sage desc;
--percent 百分比
--拿到表中50%的数据。
select percent 50 * from tb_student;
补充代码 is null 是空的使用和去除重复查询的方法
--去重重复 distinct
--查看表中的性别有哪些?
select distinct(ssex) from tb_student;
--select distinct|top|percent|as|* from tb_表 where..> < > =.between and order by asc|desc
--!= <> 不等于
select * from tb_student where ssex <> '男'
--is null 是空
insert into tb_student
values('康媳妇','男',22,'湖南省长沙市玉兰路隔壁网吧',null);
select * from tb_student;
--查询电话为空的
select * from tb_student where stel is null;
--查询电话不为空
select * from tb_student where stel is not null;