【数据库视频】第七章 操作查询

一、基本连接

SELECT A.姓名,A.性别,A.出生日期,A.民族,B.班级名,A.家庭住址

FROM 学生信息 A,班级信息 B

WHERE A.所属班级=B.班级编号

二、内连接

  • FROM table1 INNER JOIN table2 [ON join_conditions]

  • SELECT select_list

  • [WHERE search_conditions]

  • [ORDER BY order_expression]

例:

select A.班级名,A.班级人数,B.姓名,B.联系方式

from 班级信息 A INNER(可省略) JOIN 辅导员信息 B

ON A.辅导员=B.辅导员编号

where B.性别='女'

三、左外连接

例:

select A.班级名,A.班级人数,B.姓名,B.联系方式

from 班级信息 A  LEFT OUTER(可省略) JOIN 辅导员信息 B

ON A.辅导员=B.辅导员编号  AND A.班级人数>20

select A.班级名,A.班级人数,B.姓名,B.联系方式

from 班级信息 A LEFT OUTER JOIN 辅导员信息 B

ON A.辅导员=B.辅导员编号

WHERE A.班级人数>20

区别:筛选条件放哪儿,结果是不同的

四、右外连接

select A.班级名,A.班级人数,B.姓名,B.联系方式

from 班级信息 A  RIGHT OUTER join 辅导员信息 B

ON A.辅导员=B.辅导员编号

五、全连接

select A.班级名,A.班级人数,B.姓名,B.联系方式

from 班级信息 A  FULL OUTER join 辅导员信息 B

ON A.辅导员=B.辅导员编号

六、交叉连接

交叉连接不带WHERE子句,它返回被连接的两个表所有数据行的笛卡尔积,返回到结果集合中的数据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数

语法格式:

  • SELECT select_list

  • FROM table1 CROSS JOIN table2

  • [WHERE …]

  • [ORDER BY…]

例:①=②

select A.班级名称,A.人数,B.姓名

from 班级信息 A CROSS JOIN 辅导员信息 B

select A.班级名称,A.人数,B.姓名

from 班级信息 A,辅导员信息 B

Where A.辅导员=B.辅导员编号

七、自连接

例:

 SELECT A.班级名,A.班级人数,B.班级名

 FROM 班级信息 A,班级信息  B

 WHERE A.班级人数=B.班级人数 AND A.班级编号<>B.班级编号 AND A.班级名='艺术系2班'

八、联合查询

语法格式:

  • Select...

  • From...

  • Where...

  • Union[ALL]:重复的结果行保存

  • Select...

  • From...

  • Where...

  • Order by...

例:

    SELECT A.成绩编号,A.分数,B.姓名

    FROM 成绩信息 A,学生信息 B

    WHERE A.学生编号=B.学号 AND A.课程编号='2' AND A.考试编号='0801'

    UNION

    SELECT ' ',SUN(分数),'合计'

    FROM 成绩信息 A,学生信息 B

    WHERE A.学生编号=B.学号 AND A.课程编号='2' AND A.考试编号='0801'

    UNION

    SELECT ' ',avg(分数),'平均'

    FROM 成绩信息 A,学生信息 B

    WHERE A.学生编号=B.学号 AND A.课程编号='2' AND A.考试编号='0801'

    ORDER BY 分数

九、使用子查询

例:①

    SELECT A.成绩编号,A.分数,B.姓名

    FROM 成绩信息 A,学生信息 B

    WHERE A.学生编号=B.学号 AND A.课程编号='2' AND A.考试编号='0801'

    AND A.分数<(

    SELECT AVG(分数) FROM 成绩信息 A.学生信息 B

    WHERE A.学生编号=B.学号 AND A.课程编号='2' AND A.考试编号='0801'

例:②

    SELECT A.成绩编号,A.分数,B.姓名

    FROM 成绩信息 A,学生信息 B

    WHERE A.学生编号=B.学号 AND A.课程编号='2' AND A.考试编号='0801'

    AND B.学号 IN(

    SELECT 学号 FROM 班级信息 A.学生信息 B

    WHERE A.班级编号=B.所属班级 AND A.班级编号='20150101'

十、嵌套子查询

    SELECT A.成绩编号,A.分数,B.姓名

    FROM 成绩信息 A,学生信息 B

    WHERE A.学生编号=B.学号 AND A.课程编号='2' AND A.考试编号='0801'

    AND B.学号 IN(

    SELECT 学号 FROM 班级信息 A.学生信息 B

    WHERE A.班级编号=B.所属班级 AND A.辅导员=(

    SELECT 辅导员编号 FROM 辅导员信息 WHERE 姓名='王艳'

    )

    )

十一、xml查询

    CREAT TABLE STUDENT

    (

    S_ID INT,

    S_data xml

    )

十二、FOR XML查询

    将从数据库系统的表中检索出来的数据自动表示成XML格式

十三、EXISTS关键字查询

    判断子查询是否有结果,返回一个布尔类型的变量

十四、交查询INTERSECT

例:

    select a.成绩编号,a.分数,b.姓名 from 成绩信息 a,学生信息 b

    where a.学生编号=b.学号 and a.课程编号=2 and a.考试编号='0801'

    INTERSECT

    SELECT a.成绩编号,a.分数,A.姓名 FROM

    (

    select top 10 a.成绩编号,a.分数,b.姓名 from 成绩信息 a,学生信息 b

    where a.学生编号=b.学号 and a.考试编号='0801' order by a.分数 DESC

    ) A

注意:Order by是作为整体的排序

十五、差查询EXCEPT

例:

    select a.成绩编号,a.分数,b.姓名 from 成绩信息 a,学生信息 b

    where a.学生编号=b.学号 and a.课程编号=2 and a.考试编号='0801'

    EXCEPT

    SELECT a.成绩编号,a.分数,A.姓名 FROM

    (

    select top 10 a.成绩编号,a.分数,b.姓名 from 成绩信息 a,学生信息 b

    where a.学生编号=b.学号 and a.考试编号='0801' order by a.分数 DESC

    ) A

结果:第一个返回四行数据,两个查询相交有一行,去掉这一行,最后结果是三行

猜你喜欢

转载自blog.csdn.net/hsm_Jasmine/article/details/83864662