SQL Server基础——SQL语句

一、创建和删除数据库;


1.创建数据库(默认化初始值)

格式:

CREATE DATABASE 数据库名称

例如:

CREATE DATABASE SCC

2.创建数据库(自定义初始值)

格式:

CREATE DATABASE 数据库名ON PRIMARY(NAME='逻辑名称',FILENAME='文件存储路径')LOG ON(NAME='逻辑名称',FILENAME='文件存储路径')

例如:

CREATE DATABASE SCCON PRIMARY(NAME='SCC_Data',FILENAME='D:\SQL\SCC\SCC_Data.mdf',SIZE=4MB)LOG ON(NAME='SCC_Log',FILENAME='D:\SQL\SCC\SCC_Log.ldf',SIZE=2MB)

3.删除数据库

格式:

DROP DATABASE 数据库名

例如:

DROP DATABASE SCC

二、创建数据表;


格式:

USE 数据库名GOCREATE TABLE 表名(列名数据类型(长度)列级约束)

例如:

USE SCCGOCREATE TABLE 学生表(SnoCHAR(5)NOT NULLUNIQUE,SnameCHAR(8)NOT NULL,SageSMALLINTDEFAULT 20,--默认值为20SexCHAR(2)CHECK(Sex='男' or Sex='女'))

三、创建视图;


格式:

USE SCCGOCREATE VIEW 视图名AS select 列名 from 表名GO

例如:

USE SCCGOCREATE VIEW View_Cardas select *from CardGO

四、约束语句;


1.主键约束(PRIMARY KEY)

格式一:

列名数据类型(长度)PRIMARY KEY

例如:

USE SCCGOCREATE TABLE 课程表(CnoCHAR(5)PRIMARY KEY)

格式二:

CONSTRAINT 约束名 PRIMARY KEY(列名)--CONSTRAINTS语句

例如:

USE SCCGOCREATE TABLE 课程表(SnoCHAR(5),SnameCHAR(8),CONSTRAINT C1 PRIMARY KEY(Sno)--CONSTRAINT C1 PRIMARY KEY(Sno,Sname)————双主键)

2.外键约束(FOREIGN KEY)

格式:

CONSTRAINT 约束名 FOREIGN KEY(列名) REFERENCES 被引用表的名称(列名)

例如:

USE SCCGOCREATE TABLE 课程表(CnoCHAR(5),CONSTRAINT C1 PRIMARY KEY(Cno))GOCREATE TABLE 选课表(CnoCHAR(5),SnoCHAR(5),CONSTRAINT C2 PRIMARY KEY(Sno),CONSTRAINT C3 FOREIGN KEY(Cno) REFERENCES 课程表(Cno))

3.非空约束(NOT NULL)

格式:

列名数据类型(长度)NOT NULL

例如:

USE SCCGOCREATE TABLE 课程表(CnoCHAR(5)NOT NULL)

4.唯一约束(UNIQUE)

格式:

列名数据类型(长度)UNIQUE

例如:

USE SCCGOCREATE TABLE 课程表(CnoCHAR(5)UNIQUE)

五、修改语句;


1. 添加数据

格式:

INSERT INTO 表名 (列名1, 列名2) VALUES(数据1, 数据2);

例如:

INSERT INTO 学生表 (Sid, Sname) VALUES(3, '陈宇辉');

2. 更改数据

格式:

UPDATE 表名 SET 列名1=新值1, 列名2=新值2 WHERE 过滤条件

例如:

UPDATE 学生表 SET Score='99', Sage='25' WHERE Sname='陈宇辉'

3.删除数据(一行)

格式:

DELETE FROM 表名 WHERE 列名='值'

例如:

DELETE FROM 学生表 WHERE Sno = '8001'AND SAGE not in ('20', '21')

4.删除约束

格式:

ALTER TABLE 表名 DROP CONSTRAINT 约束名

例如:

ALTER TABLE 选课表 DROP CONSTRAINT C2

六、终局之战;


1. 断开数据库连接

格式:

ALTER DATABASE 数据库名SET OFFLINE WITH ROLLBACK IMMEDIATE

例如:

ALTER DATABASE SCCSET OFFLINE WITH ROLLBACK IMMEDIATE

2. 分离数据库

格式:

EXEC sp_detach_db @dbname=N'数据库名'

例如:

EXEC sp_detach_db @dbname=N'SCC'

3.附加数据库

格式:

EXEC sp_attach_db @dbname=N'数据库名',@filename1=N'.mdf文件的存储路径', @filename2=N'.ldf文件的存储路径'

例如:

EXEC sp_attach_db @dbname=N'SCC',@filename1=N'D:\SQL\SCC\SCC_Data.mdf', @filename2=N'D:\SQL\SCC\SCC_Log.ldf'

七、查询语句;


1.查询某列

格式:

SELECT 列名FROM 表名WHERE 查询条件

例如:

USE SCCGOSELECT SNO, SNAMEFROM STUDENTWHERE SDEP='数学系'

2.自定义查询结果

格式:

SELECT 列名 as 重命名FROM 表名WHERE 查询条件
SELECT 列名*0.8--将查询数据乘以0.8后输出FROM 表名WHERE 查询条件

例如:

USE SCCGOSELECT SN, SGRADE, SGRADE*0.8 as 成绩FROM SCWHERE CN='C1'

3.正倒序排列

格式:

ORDER BY 列名 DESC--降序排列
ORDER BY 列名 ASC--升序排列
ORDER BY 列名1 DESC, 列名2 ASC--先按“列名1”降序排列,若“列名1”相同,则按“列名2”升序排列
ORDER BY 2 DESCA--按第二列降序排列

例如:

USE SCCGOSELECT SN, SGRADEFROM SCWHERE CN='C1'ORDER BY SGRADE DESC, SN ASC

4.去除重复项

格式:

SELECT DISTINCT 列名FROM 表名WHERE 查询条件

例如:

USE SCCGOSELECT DISTINCT SNO, SNAMEFROM STUDENTWHERE SDEP='数学系'

5.把一个表的数据插入到另一个表

格式一:(当要插入的表不存在时)

SELECT 列名INTO 新表名FROM 表名WHERE 查询条件

例如:

USE SCCGOSELECT *INTO TU_STUDENTFROM STUDENTWHERE SDEP='计算机系'

格式二:(当要插入的表本身便存在时)

INSERT into 表名1(列名1, 列名2)select 列名1, 列名2from 表名2where 查询条件

例如:

INSERT into Student_back(S_StuNo,S_Name,S_Sex,S_Height)select S_StuNo,S_Name,S_Sex,S_Heightfrom Studentwhere S_Sex='女'

八、分类汇总;


1.求总人数

格式:

SELECT count(*)FROM 表名

例如:

USE SCCGOSELECT count(*)FROM STUDENT

2.求最高值和最小值

格式:

SELECT max(列名), min(列名)FROM 表名WHERE 查询条件

例如:

USE SCCGOSELECT COURSE.CNAME, MAX(SC.SGRADE), MIN(SC.SGRADE)FROM SC, COURSEWHERE SC.CN=COURSE.CNOGROUP BY COURSE.CNAME--以COURSE.CNAME为依据分组

3.求平均值

格式:

SELECT AVG(列名)FROM 表名WHERE 查询条件

例如:

USE SCCGOSELECT STUDENT.SNAME, AVG(SC.SGRADE)FROM STUDENT, SCWHERE STUDENT.SNO=SC.SNGROUP BY STUDENT.SNAME

九、连接查询;


1.第一种连接方式

格式:

SELECT 列名FROM 表名1, 表名2WHERE 表名1.列名=表名2.列名

例如:

USE SCCGOSELECT *FROM STUDENT, SCWHERE STUDENT.SNO=SC.SN

2.第二种连接方式

格式:

SELECT 列名FROM 表名1 JOIN 表名2 ON 表名1.列名=表名2.列名

例如:

USE SCCGOSELECT *FROM STUDENT JOIN SC ON STUDENT.SNO=SC.SN

十、特殊查询;

1.姓张的同学

代码:

USE SCCGOSELECT *FROM STUDENTWHERE SNAME LIKE '张%'

2.数学系或计算机系的同学

代码:

USE SCCGOSELECT *FROM STUDENTWHERE (SDEP='数学系' or SDEP='计算机系')

3.缺少了成绩的同学

代码:

USE SCCGOSELECT *FROM SCWHERE SGRADE is NULL

4.选修课超过三门的学生学号

代码:

USE SCCGOSELECTFROM SCGROUP BY SN having count(*)>3

5.求各系的男女生人数

代码:

USE SCCGOSELECT SDEP, SSEX, COUNT(*)FROM STUDENTGROUP BY SDEP, SSEXORDER BY SDEP

6.查询每一门课的间接先行课

代码:

USE SCCGOSELECT X.CNO, Y.PRECNOFROM COURSE X, COURSE YWHERE X.PRECNO=Y.CNO

7.求 C1 课程的成绩高于张三的学生

代码:

USE SCCGOSELECT *FROM SC, STUDENTWHERE SC.CN='C1'AND STUDENT.SNO=SC.SNAND SC.SGRADE>(SELECT SC.SGRADEFROM SC, STUDENTWHERE SC.CN='C1'AND STUDENT.SNAME='张三'AND STUDENT.SNO=SC.SN)

8.查询选修了全部课程的学生

代码:

【25】查询选修了全部课程的学生USE SCCGOSELECT SNAMEFROM STUDENTWHERE NOT EXISTS(SELECT *FROM COURSEWHERE NOT EXISTS(SELECT *FROM SCWHERE SC.SN=STUDENT.SNOAND SC.CN=COURSE.CNO))

9.求至少选修了学号为“S2”的学生所选修的全部课程的学生学号和姓名

代码:

USE SCCGOSELECT SNAME, SNOFROM STUDENTWHERE SNO NOT IN('S2')AND SNO IN(SELECT SNFROM SC XWHERE NOT EXISTS(SELECT *FROM SC YWHERE Y.SN='S2'AND NOT EXISTS(SELECT *FROM SC ZWHERE Y.CN=Z.CNAND X. SN=Z.SN)))

10.类别中最高的图书定价不低于全部按类别分组的图书平均定价的 2 倍

代码:

USE BookGOSELECT BTypeFROM BookInfoGROUP BY BTypehaving max(BPrice)>=ALL(SELECT AVG(BPrice)*2FROM BookInfoGROUP BY BType)

11.选修C1课程,并且也选修C2课程的学生学号

例一:in 语句

USE SCCGOSELECT SC.SNFROM SC, COURSEWHERE SC.CN=COURSE.CNOAND SC.CN='C1'AND SC.SN IN(SELECT SC.SNFROM SC, COURSEWHERE SC.CN=COURSE.CNOAND SC.CN='C2')

例二:exists 语句

USE SCCGOSELECT A.SNFROM SC A, COURSEWHERE A.CN=COURSE.CNOAND A.CN='C1'AND EXISTS(SELECT *FROM SC B, COURSEWHERE B.CN=COURSE.CNOAND B.CN='C2'AND B.SN=A.SN)

例三:intersect 语句

USE SCCGOSELECT SC.SNFROM SC, COURSEWHERE SC.CN='C1'AND SC.CN=COURSE.CNOINTERSECTSELECT SC.SNFROM SC, COURSEWHERE SC.CN='C2'AND SC.CN=COURSE.CNO