查询数据

来源:互联网 发布:批量word转pdf windows 编辑:程序博客网 时间:2024/06/05 07:06

数据的查询是一个非常庞大,繁琐的,先从关键字开始检索,介绍。

1.基本查询:

WHERE 根据WHERE的子句检索条件;
FROME 指定视图所满足的原祖;
SELECT 指定列
GROUP 对查询的结果进行分组;
ORDER 查询结果按照ORDER子句进行排序;

多表时,WHERE是连接的条件;

SELECT *FROM S;//列出s表的全部列名;
SELECT DISTINCT SNO FROM S;//

DISTINCT:消除重复行

2.条件查询:

这里写图片描述

a.比较大小

例子://查询选修课号为C1的学生的学号和成绩
SELECT SNo,Score FROM SC WHERE CNO = ‘C1’

b.多重条件查询

例子://查询选修课C1或C2成绩大于等于85分学生的学号、课程号、成绩;
SELECT SNo,CNo,Score FROM SC WHERE (CNo = ‘C1’ OR CNo = ‘C2’) AND(Score >= 85)

c.确定范围

例子://查询工资在1000-1500元之间的教师号、姓名、职称;
SELECT TNo,TN,Prof FROM T WHERE Salary BETWEEN 1000 AND 1500
或者:SELECT TNo,TN,Prof FROM T WHERE Salary >=1000 AND Salary <=1500

d.确定集合

例子1://查询了选修课C1或C2的学生的学号、课程号和成绩;
SELECT SNo,CNo,Score FROM SC WHERE CN = ‘C1’ OR CN = ‘C2’
或者:SELECT SNO,CNO,Score FROM SC WHERE CNo IN(‘C1’,’C2’)

例子2://查询没有选C1,也没有选C2的学生的学好、课程号、成绩;
SELECT SNo,CNo,Score FROM SC WHERE CNo NOT IN(‘C1’,’C2’)
或者 SELECT SNo,CNo,Score FROM SC WHERE ( CNo <> ‘C1’) AND (CNo <> ‘C2’)

e.部分匹配查询

% :代表一个或者多个字符
_ : 代表一个字符
[ ] : 表示在一个范围内的字符
[^] :表示不在某一范围内的字符
例子1://查询所有姓张的教师的教师号和姓名;
SELECT TNo,TN FROM T WHERE TN LIKE ‘张%’

例子2://查询姓名中第二个汉字是‘力’的教师号和姓名
SELECT TNo,TN FROM T WHERE TN LIKE ‘%力%’
或者SELECT TNo,TN FROM T WHERE TN LIKE ‘_力%’

f.空值查询

例子://考试没有考试的学生的学号和课程号;
SELECT SNo,CNo FROM SC WHERE Score is NULL

3.汇总查询

库函数和他的功能;
AVG : 按列计算平均值;
SUM : 按列计算和;
MAX :求一列中的最大值;
MIN :求一列当中最小值;
CONUT :按列统计个数;

例1://统计一学号为S1的总分和平均分
SELECT SUM(Score) AS TotalScore,AVG(Score) AS AvgScore FROM SC WHERE SNo = ‘S1’

例2://统计选修C1号课程的最高分和最低分以及相差的分数,

例3://统计计算机学院的学生的总数
SELECT COUNT(DISTINCT Dept) AS DeptNum FROM S

例4://统计计算机学院的学生总数
SELECT COUNT(*) FROM S WHERE Dept = ‘计算机’ //用来统计元祖的个数,不消除重复行

4.分组查询

GROUP BY子句根据查询结果按照某属性,进行分组;
HAVING是按照分组后,按照条件查找

例1://查询每个教师的教师号和任课的门数
SELECT TNo,COUNT(*)AS C_Num FROM TC GROUP BY TNo

例2://查询选修了两门以上,学生的学号和选课门数;
SELECT SNo,COUNT() AS SC_Num FROM SC GROUP BY SNo HAVING (CONUT() >=2)

5.查找排序

ORDER BY子句必须在最后
DESC : 降序
ASC :升序(缺省时为升序)
例1://查询选修了C1的学生的学号和成绩,并按照成绩的降序排列
SELECT SNo,Score FROM SC WHERE CNo = ‘C1’ ORDER BY Score DESC

6.a等值连接与非等值连接

例1://查询‘刘伟’老师讲授的课程,要求教师号,教师姓名和课程号 —->存在两个表中;
T和TC表中,教师号
SELECT T.TNo,TN,CNo FROM T,TC WHERE (T.TNo = TC.TNo)AND(TN = ‘刘伟’)
TN=’刘伟’ ; //查询条件
T.TNo = TC.TNo; //为链接条件
加上前缀,是因为两个表中列名相同;必须用列名指定是那个表中的数据;避免二义性;

7.子查询

a.返回一个值得子查询
例://查询与刘伟老师职称相同的教师号,姓名
SELECT TNo,TN FROM T WHERE Prof = (SELECT Prof FROM T WHERE TN = ‘刘伟’)

b.返回一组值得子查询——?运算符和子查询插入ANY 或ALL
例2://查询讲授课程号为C5的教师姓名
SELECT TN FROM T WHERE (TNo = ANY (SELECT TNo FROM TC WHERE CNo = ‘C5’) )
分析:1.先查询授课号为C5的教师号,教师号是一组集合,
2.ANY为任意一个
3.根据教师号查询教师名字
或者:SELECT TN FROM T,TC WHERE T.TNo = TC.TNo AND TC.CNo =’C5’
或者:也可以用IN来代替ANY:
SELECT TN FROM T WHERE (TNo IN (SELECT TNo FROM TC WHERE CNo = ‘C5’))

ALL是全部:
例1:查询其他系中比计算机系所有老师工资都高的教师的姓名和工资;
SELECT TN ,Salary FROM T WHERE (Salary >ALL(SELECT Salary FROM T WHERE Dept = ‘计算机’) AND Dept <>’计算机’ )
或者: SELECT TN ,Salary FROM T WHERE (Salary >(SELECT Salary FROM T WHERE Dept = ‘计算机’) AND Dept <>’计算机’ )

例2:查询不讲授课程号为C5的教师的最高工资
SELECT Salary FROM T WHERE (‘C5’ <> ALL(SELCT TNo FROM TC WHERE TNo = T.TNo))
<>ALL :不等于查询结果的任意一直;

8.存储查询

SELECT ..INTO 将查询的结果,存到一个新的数据库表中或临时的表中;
例子:从SC数据表中查询出所有的同学的学号和总分,并将结果存在一个新的数据表Cal_Table中
SELECT TNo AS 学号, SUM(Score) AS 总分 INTO Cal_Table FROM SC GROUP BY SNo

原创粉丝点击