黑马程序员技术交流社区
标题: Sql server数据库基本语法 [打印本页]
作者: 冯超 时间: 2014-5-20 21:21
标题: Sql server数据库基本语法
本帖最后由 冯超 于 2014-5-21 13:37 编辑
本人数据库版本:sql server 2008
学过的有mysql, sql server 2008, sqlite.
基本的增 删 查 改 都是相同的,所以以网上的数据库面试题在复习,总结, 常用的数据库。
题目1:为管理岗位业务培训信息,建立3个表(如下:)
- /*
- SNO,SNAME,SDD,SAGE 分别代表学号、学员姓名、所属单位、学员年龄
- */
- create table S(
- sno varchar(20),
- sname varchar(20),
- sdd varchar(20),
- sage varchar(20)
- );
- /*
- CNO,CNAME 分别代表课程编号、课程名称
- */
- create table C (
- cno varchar(20),
- cname varchar(20)
- );
- /*
- SNO,CNO,SCORE 分别代表学号、所选修的课程编号、学习成绩
- */
- create table SC (
- sno varchar(20),
- cno varchar(20),
- score varchar(20)
- );
复制代码
S (SNO,SNAME,SDD,SAGE)
sno,sname,sdd,sage 分别代表学号、学员姓名、所属单位、学员年龄
C (CNO,CNAME )
cno,cname 分别代表课程编号、课程名称
SC(SNO,CNO,SCORE )
sno,cno,score 分别代表学号、所选修的课程编号、学习成绩
(表名大写,字段小写)
1. 使用标准SQL嵌套语句查询选修课程名称为‘税收基础’的学员学号和姓名
2. 使用标准SQL嵌套语句查询选修课程编号为‘C2’的学员姓名和所属单位
3. 使用标准SQL嵌套语句查询不选修课程编号为‘C5’的学员姓名和所属单位
4. 使用标准SQL嵌套语句查询选修全部课程的学员姓名和所属单位
5. 查询选修了课程的学员人数
6. 查询选修课程超过5门的学员学号和所属单位
说下第一题:
1.查询'税收基础'的学员学号和姓名
学员学号和姓名 在S表中
查询条件'税收基础' 在C表中
前者是需要的结果,后者是条件,观察不难发现C.cno --- SC.cno SC.sno ---S.sno
select sno, sname from S where sno in (select sno from C, SC where C.cno = SC.cno and C.cname = '税收基础');
重点:in关键字
在使用where自居进行查询时,若条件表达式中出现若干条相同的情况,就会表达式显得长,这时可以用in关键字。
例如:查询学号为'1'和'2'的学生姓名
select 姓名 from 表名 where 学号 in ('1', '2');
2.查询选修课程编号为‘C2’的学员姓名和所属单位
select sname, sdd from S where sno in
(select sno from SC where SC.cno = 'C2');
3.查询不选修课程编号为‘C2’的学员姓名和所属单位
select sno, sdd from S where sno in
(select sno from SC where SC.cno != 'C2');
4.查询选修全部课程的学员姓名和所属单位SELECT sname,sdd FROM S WHERE sno IN
(SELECT sno FROM SC RIGHT JOIN C ON SC.cno = C.cno GROUP BY sno having (COUNT(*) = count(sno)));
这个里面有3个字句 right join on, group by , having字句
重点1: group by
当用户要对查询结果进行分组时,就需要在select语句中加入group by字句。
重点2:having
having字句用来选择特殊的组,他将组的一些属性与常数值进行比较,如果一个组满足having子句中的逻辑表达式,它就可以包含在查询结果中。
重点3:right join ..on
这个是连接查询中的外表连接查询,外部连接分为左外部连接(left outer join)和右外部连接(right outer join).这两种以主表所在的方向区分外部连接,
主表在左则成为左外部连接,主表在右,则称为右外部连接。
语法:right join 表名 on 条件
5.查询选修了课程的学员人数
select count(distinct sno) from SC;
6.查询选修课程超过1门的学员学号和所属单位
select sno, sdd from S where sno in
(select sno from SC group by sno having (COUNT(cno) > 1));
sql server流程控制语句:
- --定义变量
- declare @x int;
- declare @y int;
- declare @z int;
- --为变量赋值
- select @x= 9;
- select @y= 2;
- select @z= -5;
- if(@x > @y)
- print 'x > y';
- else if(@y > @z)
- print 'y > z';
- else
- print 'z > y';
复制代码- --case语句
- create table Country_Pop (
- country varchar(20),
- population int
- );
- insert into Country_Pop values('中国', 600);
- insert into Country_Pop values('美国', 600);
- insert into Country_Pop values('加拿大', 100);
- insert into Country_Pop values('英国', 100);
- insert into Country_Pop values('法国', 200);
- insert into Country_Pop values('日本', 300);
- insert into Country_Pop values('德国', 250);
- insert into Country_Pop values('墨西哥', 50);
- insert into Country_Pop values('印度', 250);
- select * from Country_Pop;
- select
- case country
- when '中国' then '亚洲'
- when '美国' then '北美洲'
- when '加拿大' then '北美洲'
- when '日本' then '亚洲'
- when '墨西哥' then '北美洲'
- else
- '其他' end
- as '州',SUM(population) as '人口'
- from Country_Pop
-
- group by
- case country
- when '中国' then '亚洲'
- when '美国' then '北美洲'
- when '加拿大' then '北美洲'
- when '日本' then '亚洲'
- when '墨西哥' then '北美洲'
- else
- '其他' end;
复制代码
结果:
州 人口
北美洲 750
其他 800
亚洲 900
作者: 谜燕 时间: 2014-5-20 21:22
长知识了
作者: 不羁的风1230 时间: 2014-5-20 21:44
长知识了
作者: liang090214 时间: 2014-5-20 21:52
不错 学习下
作者: an1911 时间: 2014-5-21 05:16
学习了。。。
作者: lvc 时间: 2014-5-21 06:34
分享一下
-
-
sql中文参考手册.chm
215.06 KB, 下载次数: 211
作者: 冯超 时间: 2014-5-21 09:39
还没写完···称不上长知识 谢谢
作者: jsjchenlong 时间: 2014-5-21 11:26
谢谢分享。。。
作者: 875588381 时间: 2014-5-22 07:54
不错不错,值得一看。
作者: 诺忔。初禾、 时间: 2014-5-22 08:52
学习下。。。。。。。。。。。。。。。。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |