未加星标

数据库表的查询

字体大小 | |
[数据库(综合) 所属分类 数据库(综合) | 发布者 店小二04 | 时间 2016 | 作者 红领巾 ] 0人收藏点击收藏

数据库的查询:

/选择查询结果输出列/*

1.表示选择一个表或视图中的所有列

SELECT *
FROM STUD
WHERE 专业='计算机'

2.选择一个表中的指定列

SELECT 学号,姓名,总学分
FROM STUD
WHERE 专业='计算机'

3.定义列别名

SELECT 学号 AS number,姓名 AS name
FROM STUD
WHERE 专业='计算机'
或者
SELECT 学号=number,姓名=name
FROM STUD
WHERE 专业='计算机'
当别名中有空格时,使用引号将标题括起来
SELECT 学号 AS ‘Student number’,姓名 AS name
FROM STUD
WHERE 专业='计算机'
不允许在WHERE子句中使用列别名。

4.替换查询结果中的数据

SELECT 学号,姓名,等级=//将总学分的列值改为等级
CASE
WHEN 总学分 IS NULL THEN'尚未选课'
WHEN <50 THEN'不及格'
WHEN >=50 AND <=52 THEN'合格'
ELSE ‘优秀’
END
FROM STUD
WHERE 专业='计算机'

5.计算列值

查询‘c03’号课程成绩加上10分后的学生学号和成绩,要求给出临时标题

SELECT Sno,Grade+10 as'成绩'
FROM Course,SC
WHERE Course.Cno=SC.Cno AND Course.Cno='C03'

6.消除结果集中的重复行

SELECT DISTINCT 专业
FROM STUD

7.限制结果集返回行数//返回结果集的前6行

SELECT TOP 6 姓名 ,专业
FROM STUD
8.聚合函数
1)SUM ,AVG
SELECT SUM(成绩) AS '总和',AVG(成绩) AS '平均分分'
FROM STUD
WHERE 课程号=‘101’

2)MAX,MIN

SELECT MAX(成绩) AS '最高分',MIN(成绩) AS '最低分'
FROM STUD
WHERE 课程号=‘101’

3)COUNT,统计组中满足条件的行数或总行数

SELECT COUNT(总学分) AS '总学分大于50人数'
FROM STUD
WHERE 总学分>50
如果使用COUNT(*)时将返回检索行的总数目,不论其是否包含空值,如果COUNT()括号中为列名的话,则忽略空值。

/选择查询条件 WHERE*/

1.表达式比较
当两个表达式值中有一个为空值或者都为空值时,比较运算符将返回UNKNOWN。
表达式比较符有 <>,!=不等于,!< 不小于,!> 不大于等运算符。
SELECT *
FROM STUD
WHERE 专业=‘通信工程’ AND 学分>=42

2.模式匹配

% 代表0个或多个任意字符
_ 代表单个字符
[]指定属于范围,如属于[0-9][absd]中的任何单个字符
[^]指定不属于范围,如不属于[^0-9][^absd]中的任何单个字符
SELECT *
FROM STUD
WHERE 姓名 LIKE '王_'
当含有转义字符时,LIKE '%5/%%' ESCAPE '/',这里表示任意位置包含5%的字符串。

3.范围比较(BETWEEN IN )

SELECT 出生时间
FROM STUD
WHERE 出生时间 NOT BETWEEN '1995-1-1' AND '1995-12-31'
SELECT *
FROM STDU
WHERE 专业 IN (‘软件工程’,‘通信工程’)

4.空值比较

SELECT *
FROM STUD
WHERE 备注 IS NULL
5.子查询,子查询中不能使用ORDER BY子句
1)IN,判断一个给定值是否在子查询结果集中,先执行子查询。
查询选修了课程名为“信息系统”的学生学号和姓名
SELECT Sno,Sname ③ 最后在Student关系中
FROM Student 取出Sno和Sname
WHERE Sno IN (SELECT Sno ② 然后在SC关系中找出选 FROM SC 修了3号课程的学生学号 WHERE Cno IN (SELECT Cno ① 首先在Course关系中找出 FROM Course “信息系统”的课程号,为3号 WHERE Cname= ‘信息系统’ ) );
2)比较子查询(ALL,SUM,ANY)
数据库表的查询
找出每个学生超过他选修课程平均成绩的课程号。
SELECT Sno, Cno
FROM SC x
WHERE Grade >=
(
SELECT AVG(Grade)
FROM SC y
WHERE y.Sno=x.Sno
);

3)EXISTS子查询

查询没有选修1号课程的学生姓名。
SELECT Sname
FROM Student
WHERE NOT EXISTS(
SELECT *
FROM SC
WHERE Sno = Student.Sno AND Cno='1');
/指定查询对象*FROM/
1.表或视图
2.导出表
SELECT Sname
FROM (
SELECT Sname
FROM STUD
WHERE SCORE>50
)AS Student//表的别名
WHERE 性别=1
/连接多表*/
1.连接谓词
1)自然连接
SELECT Student.Sno,Sname,Ssex,Sage,Sdept,Cno,Grade
FROM Student,SC
WHERE Student.Sno = SC.Sno;

2)多表连接

查询选修2号课程且成绩在90分以上的所有学生
SELECT Student.Sno, Sname
FROM Student, SC
WHERE Student.Sno = SC.Sno /* 连接谓词*/ AND SC.Cno= ‘2’ AND SC.Grade > 90; /* 其他限定条件 */

2.以JOIN关键字指定的连接

1)内连接 INNER JOIN
按照ON所指定的连接条件合并两个表,返回满足条件的行
查询每个学生的情况以及选修课的课程情况
SELECT *
FROM Student INNER JOIN SC
ON Student.sno=SC.sno
2)外连接 OUTER JOIN
其中的OUTER关键字均可省略
外连接操作以指定表为连接主体,将主体表中不满足连接条件的元组一并输出
左外连接(LEFT OUTER JOIN)结果表中除了包括满足连接条件的所有行外,还包括左表的所有行
查询每个学生及其选修课程的情况
SELECT Student.Sno,Sname,Ssex,Sage,Sdept,Cno,Grade
FROM Student LEFT OUTER JOIN SC ON Student.Sno=SC.Sno;

右外连接(RIGHT OUTER JOIN)结果表中除了包括满足连接条件的所有行外,还包括右表的所有行

查找选修了的课程和所有开设的课程名
SELECT SC.*,课程名
FROM SC RIGHT OUTER JOIN Course
ON Sc.Sno=Course.Sno

完全外连接(FULL OUTER JOIN)结果表中除了包括满足连接条件的所有行外,还包括两个表的所有行

3)交叉连接 CROSS JOIN,实质是对两个表进行笛卡尔积运算
列出所有学生的可能选课情况:
SELECT 学号,姓名,课程号,课程名
FROM COURSE CROSS JOIN SC
/指定查询结果分组方法*GROUP BY/
根据字段对记录分组,对结果集进行分组,常和聚合函数搭配使用。
在SELECT之后的字段名,除了GROUP BY之后的字段名和聚合函数之外,不能有其他字段名。
SELECT 专业,COUNT(*) AS 人数
FROM Student
GROUP BY 专业
/指定查询结果分组后筛选条件*HAVING/
HAVING子句可以使用聚合函数,而WHERE不可以。常和GROUP BY搭配使用,对分组数据进行过滤。
子句的执行顺序: FROM->WHERE->GROUP BY->HAVING
SELECT 学号
FROM Student
WHERE 成绩>=80
GROUP BY 学号
HAVING COUNT(*) > 2
/指定查询结果排序顺序*ORDER BY/
1.对查询结果排序输出
对查询结果排序输出,ASC升序,DESC降序
SELECT *
FROM Student
WHERE 专业=‘通信工程’
ORDER BY 出生时间
2.对结果排序附加汇总
COMPUTE BY子句 常跟在ORDER BY子句之后搭配使用。
/其他参加集合操作的各查询结果的列数必须相同,对应项的数据类型也必须相同 */
1.INTO 将SELECT查询结果保存到新建的表中去 SELECT..INTO..FROM..WHERE
2.UNION(并) 将多个SELECT查询结果集合并成一个结果集
查询计算机科学系的学生及年龄不大于19岁的学生。
SELECT *
FROM Student
WHERE Sdept= 'CS'
UNION
SELECT *
FROM Student
WHERE Sage<=19;
UNION:将多个查询结果合并起来时,系统自动去掉重复元组。
UNION ALL:将多个查询结果合并起来时,保留重复元组
3.EXCEPT(交)
查询计算机科学系的学生与年龄不大于19岁的学生的交集
SELECT *
FROM Student
WHERE Sdept='CS'
INTERSECT
SELECT *
FROM Student
WHERE Sage<=19
实际上就是查询计算机科学系中年龄不大于19岁的学生

4**.INTERSECT(差)**

查询计算机科学系的学生与年龄不大于19岁的学生的差集。
SELECT *
FROM Student
WHERE Sdept='CS'
EXCEPT
SELECT *
FROM Student
WHERE Sage <=19;
实际上是查询计算机科学系中年龄大于19岁的学生

5.CTE 在SELECT语句的最前面可以使用一条WITH子句指定临时结果集。

本文数据库(综合)相关术语:系统安全软件

主题: 数据UT软件工程SU数据库DUUWFUTI通信工程
分页:12
转载请注明
本文标题:数据库表的查询
本站链接:http://www.codesec.net/view/480249.html
分享请点击:


1.凡CodeSecTeam转载的文章,均出自其它媒体或其他官网介绍,目的在于传递更多的信息,并不代表本站赞同其观点和其真实性负责;
2.转载的文章仅代表原创作者观点,与本站无关。其原创性以及文中陈述文字和内容未经本站证实,本站对该文以及其中全部或者部分内容、文字的真实性、完整性、及时性,不作出任何保证或承若;
3.如本站转载稿涉及版权等问题,请作者及时联系本站,我们会及时处理。
登录后可拥有收藏文章、关注作者等权限...
技术大类 技术大类 | 数据库(综合) | 评论(0) | 阅读(65)