SQL学习第6次

1、今天来做一做复习。

2、建立数据库的复习。使用的是SQL SERVER 2005 64位,打了SP3补丁。另装了SQLPrompt和SQLSearch,用起来爽多了。。

1、打开Microsoft SQL Server Management Studio。

2、连接-数据库引擎-地址localhost-验证。

3、右键数据库-新建数据库:

数据库名称:test1

4、分别指定数据文件(D:\MSSQL\test1_DATA)和日志文件(D:\MSSQL\test1_LOG)的路径。

5、确定后报错,看样子需事先建立好文件夹。

6、新建文件夹后,再次确定,成功。

---------------------------------------------------------------------------------------------------------------

本来想用PowerDesign来建表,但用了下不是很会用,还是Microsoft SQL Server Management Studio直接建吧,以后再用PD。

1、右键表——新建表——填入相关字段或者新建查询——输入语句——点击执行即可。

 

PS:在编写的时候居然不能像SQLyog一样自动转变关键词为大写,提示功能也没有,所以装了一个SQLPrompt。可以到我的百度盘下载

 

--创建系表

CREATE TABLE DEPT

(

    DNO CHAR(3) PRIMARY KEY,

    DN VARCHAR(255) NOT NULL,

    TEL CHAR(8) CHECK(SUBSTRING(TEL,1,4)='0571')

);

 

--创建学生表

CREATE TABLE STUD

(

    XH CHAR(7) PRIMARY KEY,

    XM CHAR(8),

    CSNY DATETIME,

    DNO CHAR(3) REFERENCES DEPT(DNO)

);

 

2、插入一些数据。

INSERT INTO DEPT VALUES('D01','计算机系','0571625');

INSERT INTO DEPT VALUES('D02','物理系','0571626');

INSERT INTO DEPT VALUES('D03','化学系','0571627');

INSERT INTO DEPT VALUES('D04','管理系','0571628');

INSERT INTO DEPT VALUES('D05','外语系','0571629');

INSERT INTO STUD VALUES ('1101138','王明',GETDATE()-365*21,'D01');

INSERT INTO STUD VALUES('1101101','胡天',GETDATE()-365*21,'D01');

INSERT INTO STUD VALUES('1101102','唐海',GETDATE()-365*22,'D01');

INSERT INTO STUD VALUES('1101103','张丽',GETDATE()-365*20,'D01');

INSERT INTO STUD VALUES('1102101','李能',GETDATE()-365*22,'D02');

INSERT INTO STUD VALUES('1102103','王中',GETDATE()-365*22,'D02');

INSERT INTO STUD VALUES('1102102','高强',GETDATE()-365*21,'D02');

INSERT INTO STUD VALUES('1103101','JONE',GETDATE()-365*23,'D03');

INSERT INTO STUD VALUES('1103102','SMITH',GETDATE()-365*21,'D03');

INSERT INTO STUD VALUES('1103103','TOM HONE',GETDATE()-365*22,'D03');

INSERT INTO STUD VALUES('1104101','张三', GETDATE()-365*22,'D04');

INSERT INTO STUD VALUES('1104103','李四', GETDATE()-365*21,'D04');

INSERT INTO STUD VALUES('1104102','王五', GETDATE()-365*20,'D04');

 

*SYSDATE是Oracle中的,在SQL里为GETDATE,用处是获取系统时间。

3、做一些查询练习。

--查询所有学生记录

SELECT * FROM STUD;

 

 

--查询所有系的记录,并按系号升序排列

SELECT * FROM DEPT ORDER BY DNO;

 

--查询'张三'XHXMCSNY

SELECT XH AS '学号',XM AS '姓名',CSNY AS '出生年月' FROM STUD WHERE XM='张三';

 

--查询计算系所有的学生记录

SELECT * FROM DEPT LEFT JOIN STUD ON DEPT.DNO=STUD.DNO WHERE DN='计算机系' ORDER BY STUD.XH;

 

--查询各计算系学生在各年龄值的人数,如的为,的有等

SELECT COUNT(XH) AS '人数' ,DATEPART(yyyy,GETDATE())-DATEPART(yyyy,CSNY) AS '年龄'

FROM STUD

GROUP BY CSNY;

 

--查询'张三'XHCSNYDNODN

SELECT STUD.XH AS '学号',STUD.XM AS '姓名',STUD.CSNY AS '出生年月',DEPT.DNO AS '系编号',DEPT.DN AS '系名'

FROM STUD LEFT JOIN DEPT

ON STUD.DNO=DEPT.DNO

WHERE XM='张三';

 

--查询学生的记录数

SELECT COUNT(XH) AS '学生记录数' FROM STUD;

 

--查询平均年龄小于岁的系号及学生XH,XM,NL(年龄)

--建一个投影方便使用

CREATE VIEW STUD_VIEW AS

SELECT XH,XM,NL=DATEPART(yyyy,GETDATE())-DATEPART(yyyy,CSNY),DEPT.DNO,DEPT.DN

FROM STUD LEFT JOIN DEPT

ON STUD.DNO=DEPT.DNO

--分两步,先找出平均年龄小于岁的系,然后再找出该系中的学生。

SELECT XH,XM,NL,DNO FROM STUD_VIEW WHERE DNO IN (SELECT DNO FROM STUD_VIEW GROUP BY DNO HAVING AVG(NL)<22);

 

--找出平均年龄大于的系名及平均年龄数

SELECT 系名=DN,平均年龄=AVG(NL) FROM STUD_VIEW GROUP BY DN HAVING AVG(NL)>20;

posted on 2013-04-21 00:23  百舸争流info  阅读(146)  评论(0编辑  收藏  举报

导航