T-SQL查询语言(DQL)查询举例(一)

2014-11-24 11:16:34 · 作者: · 浏览: 0

T-SQL查询语言(DQL)查询举例
(1)学生基本情况数据表Student,结构如下:
字段名(列名)
字段类型
约束控制
字段含义说明
S_No
char(6)
primary key
学号
Class_No
char(6)
Foreign key
班级号
S_Name
char(10)
not null
学生姓名
S_Sex
char(2)
‘男’或‘女’
性别
S_Birthday
datetime
www.2cto.com
出生日期
(2)班级数据表Class,结构如下:
字段名(列名)
字段类型
约束控制
字段含义说明
Class_No
char(6)
primary key
班级号
Class_Name
char(20)
not null
班级名称
Major
char(20)
所属专业
Department
char(20)
www.2cto.com
系别
(3)课程数据表Course,结构如下:
字段名(列名)
字段类型
约束控制
字段含义说明
Course_No
char(5)
primary key
课程号
Course_Name
char(20)
not null
课程名称
Course_Credit
numeric(6,2)
学分
(4)选修课程情况数据表Choice,结构如下:
字段名(列名)
字段类型
约束控制
字段含义说明
S_No
char(6)
Foreign key
学号+课程号为主键
Course_No
char(5)
Foreign key
课程号
Score
numeric(6,1)
www.2cto.com
成绩
(5)教师数据表Teacher,结构如下:
字段名(列名)
字段类型
约束控制
字段含义说明
T_No
char(6)
primary key
教师号
T_Name
varchar(10)
not null
教师姓名
T_Sex
char(2)
‘男’或‘女’
性别
T_Birthday
datetime
出生日期
T_Title
char(10)
职称
T_Salary
int
Check>0
工资
T_Dept
Char(10)
Not null
系别
(6)教师任课情况表Teaching ,结构如下:
字段名(列名)
字段类型
约束控制
字段含义说明
Course_No
char(5)
Foreign key
课程号+教师号为主键
T_No
char(6)
Foreign key
教师号
以上的6个表用于下面举例时用
www.2cto.com
本篇概要图


1、普通查询
含义:一个表的查询。
举例:求选课在3门以上(含3门)且各门课程均及格的学生的学号及其总成绩,查询结果按总成绩降序排序。
Select S_No sum(Score) as S_S from Choice group by S_No having(count(*)>=3)
2、连接查询
含义:查询“同时”涉及两个以上的表时,称为连接查询。表和表之间为并列关系
1>、From……Where型
含义:From字句指明进行连接的表名,Where字句指明连接的列名及其连接条件
举例:查询每门课程的课程名称、任课老师姓名及其职务、选课人数。
Select Course.Course_Name,Teacher.T_Name,Teacher.T_Title,count(Course.S_No)as People from Course,Teacher,Choice,Teaching Where Teaching.T_No =Teacher.T_No and Teaching.Course_No = Course.Course_No and Course.Course_No =Choice.Course_No Group by Choice.S_No
2>、关键字Join型
1>>、具体类型
Innerjoin(内连接):显示符合条件的记录,此为默认值。没有主辅之分
Right[outer] join(右外连接):显示符合条件的记录以及右表中不符合条件的记录,此时,左表记录行一般用null来显示。有主辅之分
Left [outer] join(左外连接):显示符合条件的记录以及左表中不符合条件的记录,此时,右表记录行一般用null来显示。有主辅之分
Full [outer] join(全外连接):显示符合条件的记录以及左右表中不符合条件的记录,此时,缺省左右记录行一般用null来显示。没有主辅之分
www.2cto.com
2>>、举例:检索所有学生姓名、出生日期、和选课名称
SelectStudent.S_Name,Student.S_Birthday,Course.Course_NameFrom (select S_No,S_Name,S_BirthdayFrom Student) as R3 INNER JOIN (selectR2.S_No,R1.Course_No From (selectCourse_No,Course_Name From Course) as R1 InnerJoin (select S_No,Course_No From Choice) as R2 on R1.Course_No=R2.CNo) as R4 ONR3.S_No=R4.S_No
3、子查询
含义:在Where子句中包含一个形如Select-From-Where的查询块,此查询块称为子查询或嵌套查询。
1>、相关子查询
含义:子表中查询的条件用到了父表中的字段名。所以,执行顺序:根据在字表中出现的父表的字段名,选取父表中的第一行记录的相应字段值,然后,进行配对,符合条件的组成新的虚拟表,此时,子查询完成。
举例:查询不讲授课程号为C5的教师姓名
SelectT_Name From Teacher Where (‘C5’<>all(Select Course_No From Teaching WhereT_No=Teacher.T_No))
2>、普通子查询
含义:子表中查询的条件没有用到父表中的字段名
1>>、