Day3

1.连接查询

可以通过连接运算符(连接条件)可以实现多个表查询

1>内连接:把两张表相同的地方查询出来

2>左连接:包括了内连接,同时还查询左表特有的内容

3>右连接:包括了内连接,同时还查询右表特有的内容


2.内连接

语法:

select * from 表1 inner join 表2 on 表1.字段 = 表2.字段;

内连接最重要的是,找对两张表要关联的字段

隐式内连接语法:

select * from 表1,表2 where 两个表的连接条件;

内连接查询,显示指定的字段

例1:students表与socres内连接,只显示name 课程号 成绩

select name, courseNo, score from students inner join scores on students.studentNo = scores.studentNo;

表的别名在查询中的使用

select name 姓名, courseNo 课程编号 , score  成绩 from students st inner join scores sc on st.studentNo = sc.studentNo;

带有where的内连接

语法:

select * from 表1 inner join 表2 on 表1.字段 = 表2.字段 where 条件;

例 2:查询姓名为’王昭君’,并且成绩小于 90 的信息,要求只显示姓名、成绩

select name, score from students s1 inner join scores s2 on s1.studentNo = s2.studentNo

where s1.name = '王昭君' and s2.score < 90;

例 3:查询学生信息和成绩以及成绩对应的课程名称

select * from students inner join scores on students.studentNo = scores.studentNo

inner join courses on scores.courseNo = courses.courseNo;

写SQL三步法:

- 搭框架

    - 基本的select语句框架搭建起来,如果有多表,把相应的多表也联合进来

- 看条件

    - 决定where后面的具体条件

- 显示的字段

    - select后面到底要显示什么字段


3.左连接

语法:

select * from 表1 left join 表2 on 表1.字段 = 表2.字段;

例 1:查询所有学生的信息以及成绩,包括没有成绩的学生

select * from students left join scores on students.studentNo = scores.studentNo;


4.右连接

语法:

select * from 表1 right join 表2 on 表1.字段 = 表2.字段;

例 1:查询所有课程的信息,包括没有成绩的课程

select * from scores right join courses on scores.courseNo = courses.courseNo;


5.多表联合查询,同名字段的处理方式

如果一条select要用到多个表,表中有同名字段,就需要 表名.字段名 加以区分。

select students.studentNo from students inner join scores on students.studentNo = scores.studentNo;


6.自关联

自关联,是同一张表做连接查询

自关联下,一定找到同一张表可关联的不同字段

例 1:查询广东省的所有城市

SELECT * from areas a1 INNER JOIN areas a2 on a1.id = a2.pid where a1.name = '广东省';


7.子查询

子查询是嵌套到主查询里面的

子查询做为主查询的数据源或者条件

子查询是独立可以单独运行的查询语句

主查询不能独立独立运行,依赖子查询的结果

例 1:查询大于平均年龄的学生记录

select avg(age) from students;

select * from students where age > 30.1667;

-- 用子查询实现

select * from students where age > (SELECT avg(age) from students);

标量子查询------子查询返回结果只有一行,一列

例 2:查询 30 岁的学生的成绩

-- 查询30岁学生的studentNO

select studentNo from students where age = 30;

select * from scores where studentNo in ('001', '003', '011');

-- 用子查询实现

select * from scores where studentNo in(select studentNo from students where age = 30);

列子查询------子查询返回一列多行

例 3:用子查询,查询所有女生的信息和成绩

-- 用内连接实现

select * from students inner join scores on students.studentNo = scores.studentNo where sex = '女';

-- 用子查询实现

select * from (select * from students where sex = '女') stu inner join scores sc on stu.studentNo = sc.studentNo;

表级子查询------子查询返回结果为多行,多列

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一、连接查询 1.接连查询: 同时查询多个表中的数据SELECT * FROM 表名1,表名2... WHERE ...
    ququququ阅读 251评论 0 0
  • 一、列属性 真正的对列的约束是依赖于数据的类型,但是这种约束比较单一,所以需要更多的约束,整个时候就是用到了字段的...
    满天繁星_28c5阅读 640评论 0 2
  • 一、 列属性 真正的对列的约束是依赖于数据的类型,但是这种约束比较单一,所以需要更多的约束,整个时候就是用到了字段...
    致自己_cb38阅读 435评论 0 0
  • 连接查询 内连接 把两张表相同的地方查询出来 左连接 包括了内连接,同时还查询左表特有的内容 右连接 包括了内连接...
    TA二哥阅读 1,117评论 0 1
  • 一、数据库的作用 用来存储数据,方便查询。 二、关系型数据库(RDBMS) 核心是用二维表存储数据 行,记录...
    MAVIS_42bf阅读 808评论 0 0