SQL基础和高级(语法格式)总结一

前几天同学问了我一个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学习总结,有错的地方还望众大神海涵啊。

SQL基础和高级总结.zip
posted @ 2014-02-23 14:58  鹏程万里-zdp  阅读(2752)  评论(0编辑  收藏  举报