前几天同学问了我一个sql问题,发现她有些语法都忘光了。在此整理一下学过的知识和笔记,总结出了sql语句的基本格式。希望给大家有所帮助。
一.创建
1.创建数据库,一般来说我们都是通过界面来创建数据库的。但是用sql语句创建数据库也是必须掌握的。
语法格式如下:
示例代码如下:
1 create database blackhourse
2 on primary
3 (
4 name='黑马'
5 ,filename='E:\新建文件夹\黑马.mdf'
6 ,size=10MB
7 ,maxsize=100MB
8 ,filegrowth=10%
9 )log on
10 (
11 name='黑马_log'
12 ,filename='E:\新建文件夹\黑马_log.ldf'
13 ,size=5MB
14 ,maxsize=50MB
15 ,filegrowth=10%
16 );
创建数据库
2.手动删除数据库,示例代码如下
3.分离和附加数据库,一般来说都是通过界面方式来附加和分离数据库的,包括我也是。因为比较快捷。但是sql语句方式我们也是需要知道的。
示例代码如下
1 /*调用存储过程,分离数据库*/
2
3 exec sp_detach_db 'blackhourse';
4 exec sp_detach_db 'archive';
5 exec sp_detach_db 'zdp';
6 exec sp_detach_db 'zdpdsy';
7 exec sp_detach_db 'archive1';
8
9 /*附加数据库*/
10 create database archive
11 on(
12 filename='E:\新建文件夹\黑马.mdf'
13 )log on(
14 filename='E:\新建文件夹\黑马_log.ldf'
15 )
16 for attach;
分离和附加数据库
4.创建表,这个是最基本的语法,必须要掌握。格式:create table 表名(列名,数据类型,约束(自动编号,主键))
示例代码如下:
1 create table Mydounaifen.TlStudent
2 (
3 /*列名,数据类型,约束(自动编号,主键)*/
4 stuName char(10),
5 stuAge int,
6 stuSex char(2)
7 );
创建表
二.约束
什么叫约束呢。约束有什么作用呢?答:保护数据完整性的机制:让存储的数据有意义的条件。
分为1.主键约束 2.唯一约束 3.检车约束 4.默认约束 5.非空约束 6.主外键约束 6种。
基本语法格式:alter table 架构.表名 add constraint 约束名 约束类
1.添加约束。在此添加一个检查约束,其他约束类似。
1 alter table Mydounaifen.TlStudent
2 add constraint CK_TlStudent_stuSex
3 check(stuSex='男'or stuSex='女');
添加约束
2.添加多个约束,添加非空约束,为年龄与性别添加检查约束,为邮箱添加唯一约束。一般来说sql考试会经常考到
1 alter table Student
2 add constraint ck_Student_stuAge
3 check(stuAge>0 and stuAge<30),
4 constraint ck_Student_stuSex
5 check( stuSex='男'or stuSex='女'),
6 constraint uq_Student_stuEmail
7 unique(stuEmail);
添加多个约束
3.列操作。包括添加一列,修改列的数据类型,删除列。
1 --增加一列
2 alter table Mydounaifen.TlStudent
3 add email varchar(20) null;
4
5 --删除一列
6 alter table Mydounaifen.TlStudent
7 drop column email;
8
9 --修改某个列数据类型
10 alter table Mydounaifen.TlStudent
11 alter column email nvarchar(20) null;
列操作
4.主外键约束。sql语句容易忘,不过在此还是给大家罗列出来。
1 create table tblCourseT_SQL2
2 (
3 cId int identity(1,1) not null
4 , cName nvarchar(10) not null
5 , cDesc nvarchar(100) null -- description
6 );
7 alter table tblCourseT_SQL2
8 add constraint PK_tblCourseT_SQL2_cId primary key(cId);
9
10 -- 学生
11 create table tblStudentT_SQL2
12 (
13 stuId int identity(1,1) not null
14 , stuName nvarchar(10) not null
15 , cId int null -- 外键stuTocId
16 );
17
18 --创建外键约束主键表中必须有个主键
19 alter table tblStudentT_SQL2
20 add constraint [FK_tblStudentT_SQL2_tblCourseT_SQL2_cId]
21 foreign key(cId) references tblCourseT_SQL2(cId);
22
23 /*
24 补充说明
25 主外键表中,关联主键表的字段必须是主键和唯一键
26
27 */
添加主外键约束
三.增删改查
增删改查,想必大家都很熟悉了吧。在做网站开发的时候,通常和ado.net结合起来使用。拼接各种sql语句,来操作数据。
1.插入insert
插入语句语法格式非常简单,也比较好记。格式:insert 架构名.表名(列,列,.....) values(值,值,....)。
也有其他的用法。在此一一罗列出来
1 --基本插入
2 insert into Mydounaifen.TlStudent(stuName,stuAge,stuSex)
3 values('豆奶粉',22,'女');
4 insert into Mydounaifen.TlStudent(stuName,stuAge,stuSex)
5 values('大鹏',22,'男');
6 这种写法每次只能插入一条数据
7
8 --为自动编号插入数据(tid为自动编号)
9 set IDENTIY_INSERT TblTeacher on
10 insert into TblTeacher(tid,tname,tsalary)
11 values(100,'bob',50000)
12
13 --当向表中的除自动编号外的所有其他列插入数据的时候,这是可以省略列名。
14 insert into T_Seats values(LoginId,RealName,Pwd);
15
16 --向一个已经存在的表中插入数据,数据的来源是另外一张表
17 insert into NewTblTeacher (tname,tage)
18 select tname,tage from TblTeacher
19
20 --返回刚插入数据的自动增长编号
21 insert into Exe2.LoginTbl output inserted.id values('zdpdsy123','123');
22
23 --表值函数
24 /*
25 格式:insert into 表名(列1,列2,…) values(值1,值2,…), (值1,值2,…),
26 (值1,值2,…);
27 可以插入多个数据
28 */
29 insert into StudentTest(stuName,stuSex,StuAge)
30 values('牛亮亮','m',30),('王成伟', 'm', 28),
31 ('赵晓虎', 'm', 29),('李艳茹', 'f', 19),
32 ('牛亮亮','f',22),('苏坤','m',30),('苏坤','f',27);
插入用法
2.修改update
没什么复杂的用法。就一条基本的语法:update 架构名.表名set 字段=值,字段=值.... where 条件
1 update Mydounaifen.TlStudent set stuAge=20 where stuName='豆奶粉';
修改
3.删除delete
有三种方式。delete,drop,truncate.
1 语法
2 -- delete from 表名where 条件;
3 -- drop database|table|schema 名字;
4 -- truncate table 表名
5
6 drop table Student;
7
8 delete from Mydounaifen.TlStudent where stuName='大鹏';
9
10 truncate table TblTeacher
11
12
13 ===========================
14 两者区别
15 1.delete删除的时候,自动编号没有恢复到默认值,而truncate 可以.
16 2.truncate 删除数据的时候,只能一次性都清除,不能根据条件来删除 则delete可以.
17 3.truncate删除数据的速度比delete快的多
18 4.truncate语句不会触发delete触发器
View Code
4.查询select
也有两种方式。一种是普通的select用法。还有一种是select into 用法
1.普通的select用法
格式如下:
select distinct |top 数字[percent]
字段as常量
,包含字段表达式
,函数 Sum,max
,常量
from
表或结果集
where
条件: 逻辑|空值|多条件|模糊|范围
group by
字段
having
筛选条件
order by
字段 desc | asc
执行顺序
from -> where -> group by -> having -> select -> order by
示例代码:
select
*
from MyStudent --1>先从MyStudent表中拿到数据
where fage>30 --2>从MyStudent的数据中筛选出所有年龄大于30的人的信息
group by fgender --3>按照性别分组,分完组以后又得到一个新结果集
having count(*)>500 --4>基于分组以后的结果集,然后再筛选,筛选出人数>500的记录
/*
from 子句
寻找数据源,后面可以跟表,视图,表值函数,结果集等
where子句
对from所得到的临时表做一次筛选,是直接在结果中将筛选到的结果组成一个临时表
null值处理
判断一个字段是否为null使用
字段 is [not] null
null表示的是不知道,凡是与null参与的运算得到的结果都是null和不知道
*/
--查看整个表
select * from TblScore;
--考试期中及格
select * from TblScore where ScoreNum>=60;
--期末及格考试
select * from TblScore where ScoreLast>=60;
--按照姓名分组
select stuName from StudentTest
group by stuName;
--取成绩前五名
select top 5 * from MyStudent
order by fag desc
/*模糊查询 */
通配符;
1. % //匹配多个字符
select
*
from Mystudent
where fname like '%敏%'
2. -//匹配一个字符
--查询姓赵的同学,且长度为三个
select * from MyStudent
where fanme like '赵__'
select * from MyStudent
where fanme like '赵%' and len(fname)=3
3. []
--查询出姓名包含'雷'或'伟'的人的姓名
select * from MyStudent
where fname like '%[雷伟]%'
用[]括起来,表示转义字符 如[%]
View Code
补充:给列取名。
-- select列 as 别名 (推荐)
-- select列 别名 (不推荐)
-- 别名=select列 (推荐)
2.select into 通常用来把旧表数据插入到新表中
格式如下:
select
字段等
into 表名
from
数据源
其他子句
示例代码:
1 select * into
2 FormSelect
3 from StuSetInto;
4
5 select * from FormSelect;
6 /*
7 select * into 新表名from 数据源where 1>2;
8 只会把表的结构复制过来,
9 但是键和约束索引等不会复制过来。
10 除了自动增长的
11 */
12 select * into NewTable from FormSelect where 1>2;
View Code
以上是个人的SQL学习总结,有错的地方还望众大神海涵啊。