数据库的数据查询-select语句(二)
数据库的创建及表的创建、数据录入参考本博客其他文章
SQL 提供了 SELECT 语句进行数据查询,其一般格式为:
SELECT [ALL|DISTINCT]<目标列表达式>[,<目标列表达式>]…
FROM<表名>[,<表名>…]|(<SELECT 语句>)[AS]<别名>
[WHERE <条件表达式>]
[GROUP BY <列名 1>][HAVING <条件表达式>]
[ORDER BY <列名 2> [ASC|DESC]];
整个select语句的含义是:根据where子句的条件表达式从from子句指定的基本表、视图或派生表中找出满足条件的元组,再按select子句中的目标列表达式选出元组中的属性值形成结果表;
如果有 GROUP BY子句,则将结果按<列名1>的值进行分组,该属性列值相等的元组为一个组。通常会在每组中作用聚类函数。如果 GROUP BY子句带HAVING短语,则只有满足指定条件的组才予以输出;
如果有ORDER BY子句,则结果表还要按<列名2>的值的升序或降序排序;
连接
连接查询的WHERE子句中用来连接两个表的条件称为连接条件或连接为此,其一般格式为:
[<表名 1>.] <列名 1> <比较运算符> [<表名 2>.] <列名 2>
其中比较运算符主要有:=,>,<,>=,<=,!=(或<>)等
此外连接谓词还可以使用下面的形式:
[<表名 1>.] <列名 1> BETWEEN [<表名 2>.] <列名 2> AND [<表名 2>.] <列名 3>
一、等值与非等值连接查询
当连接运算符为 = 时,称为等值连接;
使用其他运算符,称为非等值连接。
连接谓词中的列名称为连接字段。连接条件中的各个连接字段类型必须是可比的,但名字不必相同。
eg:查询每个学生及其选修课程的情况
学生情况存放在 student 表中,学生选课情况存放在 sc 表中,所以本查询实际上 涉及到 student 和 sc 两个表。这两个表之间的联系是通过公共属性 Sno 来实现的
在查询设计器中输入:
USE S_T
GO
SELECT student.*,sc.*
FROM student,sc
WHERE student.Sno=sc.Sno;
查询结果为:
一条 SQL 语句可以同时完成选择和连接查询,这时,WHERE 子句是由连接谓词和选择谓词组成的复合条件
eg:查询选修 2 号课程且成绩在 80 分以上的所有学生的学号和姓名
在查询设计器中输入:
USE S_T
GO
SELECT student.Sno,Sname
FROM student,sc
WHERE student.Sno=sc.Sno AND sc.Cno='2' AND sc.Grade>80;
查询结果为:
ps:也可以先从 sc 中挑选出 Cno=’2’并且 Grade>80 的元组形成一个关系,再和 student 中满足 连接条件的元组连接,得到最终的结果关系
二、自然连接
若在等值连接中把目标列中的重复属性去掉则为自然连接
eg:查询每个学生及其选修课程的情况
在查询设计器中输入:
USE S_T
GO
SELECT student.Sno,Sname,Ssex,Sage