If you don't go after what you want, you'll never have it. If you don't step forward, you're always in the same place.

SQL Server 学习

今天下午无意间看到一篇有关于sql 的面试题。好久没有用sql 了。今天拿来练练手。

希望能唤醒自己对sql 的记忆。

本篇文章只是自己纯粹的学习sql . 没有任何其他意义。

其中包括 create table, select ,insert,create trigger

 

Create table and Select ,Insert

CREATE TABLE student_info

(

学号 VARCHAR(8) PRIMARY KEY,

姓名 VARCHAR(10),

性别 CHAR(4),

出生年月 VARCHAR(10),

家庭住址 VARCHAR(30),

备注 VARCHAR(30)

)

 

SELECT * FROM student_info

 

INSERT INTO student_info VALUES('0001','zhangsan','male','1981-8-9','beijing',NULL)

 

 

 

CREATE TABLE curriculum

(

课程编号 VARCHAR(8) PRIMARY KEY,

 

课程名称 VARCHAR(20),

 

学分 INT

) 

INSERT INTO curriculum(课程编号,课程名称,学分) VALUES('0001','jisuanjijichu',2)

INSERT INTO curriculum VALUES('0002','Clanguage',2)

 

 

 

 

 

CREATE TABLE grade

(

学号 VARCHAR(8),

 

课程编号 VARCHAR(8),

 

分数 INT

)

 

 

 

INSERT INTO grade(学号,课程编号,分数) VALUES('0001','0001',80)

INSERT INTO grade(学号,课程编号,分数) VALUES('0001','0002',90)

 

 /*题目:

条件查询

*/

 

--1、在GRADE表中查找80-90分的学生学号和分数

 

SELECT 学号,分数

FROM grade

where 分数 between 80 and 90

 

--2、在GRADE 表中查找课程编号为0001学生的平均分

SELECT AVG(分数) as 平均分

FROM grade

WHERE 课程编号='0001'

 

--3、在GRADE 表中查询学习各门课程的人数

SELECT COUNT(学号) 人数,课程编号

FROM grade 

GROUP BY 课程编号

 

--4、查询所有姓张的学生的学号和姓名

SELECT 学号,姓名

FROM student_info

WHERE 姓名 LIKE 'zhang%'

 

/*

   嵌套查询:

*/

--1、 查询和学号’0001’的这位同学性别相同的所有同学的姓名和出生年月

 

SELECT 姓名,出生年月

FROM student_info

WHERE 性别 in (SELECT 性别 FROM student_info WHERE 学号='0001')

 

--2、 查询所有选修课程编号为0001 和0002的学生的学号、姓名和性别

SELECT 学号,姓名,性别

FROM student_info

WHERE 学号 in (SELECT 学号 FROM grade WHERE 课程编号='0001' and 学号 in (SELECT 学号 FROM grade WHERE 课程编号='0002'))

 

--3、 查询出学号为0001的学生的分数比0002号学生最低分高的课程编号和分数

 

SELECT 课程编号, 分数

FROM grade

WHERE 学号='0001'  and 分数 > (select MIN(分数) from grade where 学号='0002')

 

 

/*

  多表查询:

*/

--1、 查询分数在80-90分的学生的学号、姓名、分数

SELECT student_info.学号,student_info.姓名,grade.分数 FROM student_info LEFT JOIN grade ON student_info.学号 = grade.学号WHERE grade.分数 BETWEEN 80 AND 90

select student_info.学号,student_info.姓名,grade.分数 from student_info,grade where grade.分数 between 80 and 90

--2、 查询学习了’C语言’课程的学生学号、姓名和分数

SELECT student_info.学号,姓名,分数 FROM  student_info LEFT JOIN grade ON student_info.学号 = grade.学号 WHERE grade.课程编号 IN (SELECT 课程编号 FROM curriculum WHERE 课程名称='Clanguage')

select student_info.学号,student_info.姓名,grade.分数 from student_info,grade,curriculum where student_info.学号=grade.学号 and grade.课程编号=curriculum.课程编号 and curriculum.课程名称='Clanguage'

--3、 查询所有学生的总成绩,要求列出学号、姓名、总成绩,没有选课的学生总成绩为空。

SELECT student_info.学号,姓名,SUM(分数) 总成绩  FROM student_info RIGHT JOIN grade ON student_info.学号 = grade.学号  

group by student_info.学号,姓名 

select grade.学号,student_info.姓名,sum(grade.分数) as 总成绩 from student_info,grade where grade.学号=student_info.学号 group bygrade.学号,student_info.姓名

 

触发器

/*题目、活期存款中,“储户”通过“存取款单”和“储蓄所”发生联系。

    假定储户包括:账号,姓名,电话,地址,存款额;“储蓄所”包括:储蓄所编号,名称,电话,地址(假定一个储户可以在不同得储蓄所存取款)

1、写出设计以上表格的语句(4分)*/

CREATE TABLE 储户

(

账号 int primary key,

姓名 varchar(10),

电话 varchar(13),

地址 varchar(40),

存款额 int

)

 

CREATE TABLE 储蓄所

(

储蓄所编号 int primary key,

名称 varchar(20),

电话 varchar(13),

地址 varchar(40)

)

 

CREATE TABLE 存取款单

(

账号 int,

姓名 varchar(10),

存款额 int,

储蓄所编号 int,

储蓄所名词 varchar(20)

)

 

create table qukuan

(

id int,

yuer int,

flag int

 

)

 

create table cunkuan

(

  id int,

  qian int,

  flag int

)

 

 

/*2、创建一个触发器TR1完成下面内容:

     当向“存取款单”表中插入数据时,

            如果存取标志=1则应该更改储户表让存款额加上存取金额,

              如果存取标志=0 则应该更改储户表让存款额减去存取金额,

              如果余额不足显示余额不足错误。*/

CREATE TABLE CREATE TRIGGER tr1 on qukuan after insert

 

AS

 

BEGIN

declare @sid nvarchar(50)

declare @type int

declare @qian int

declare @yuer int

select @sid=sid,@type=[type],@m=m from inserted

select @yuer=yuer from cunkuan

if(@type=1)

begin

update cunkuan set yuer=yuer+@qian

end

else

begin

if(@yuer<@qian)

   begin

     print '余额不足'

   end

else

    begin

     update cunkuan set yuer=yuer-@qian

    end

end

END

GO

posted @ 2014-11-05 23:04  BlackAnts  阅读(354)  评论(0)    收藏  举报