前阵子由于工作需要简单复习了下SQL,现在把之前写的总结发到这里。很基础的东西,出现错误欢迎指正。
一, 表结构:
create table USER_ID
(
ID number(10),
name varchar2(255),
age number(3),
telephone number(11),
birthday varchar2(8)
);
create table school
(
school_id number(10),
name varchar2(255),
address varchar2(255),
level1 number(1),
is_985 varchar2(1),
createdate date
);
create table student
(
ID number(10),
student_id number(10),
school_id number(10),
enter_date date
);
create table course
(
school_id number(10),
course_id number(10),
course_name varchar2(255),
teacher varchar2(255)
);
create table grade_core
(
school_id number(10),
course_id number(10),
student_id number(10),
grade_core number(10),
term varchar2(10)
)
二, 题目及sql:
1、 要求输出:学生号,学生名,年龄,课程名称,分数,学期;
Select student.student_id,User_id.Name,user_id.age,course.course_name,grade_core.grade_core,grade_core.term
from User_Id,student,grade_core,course
where User_Id.id=student.id
and student.student_id=grade_core.student_id
and grade_core.course_id=course.course_id
and course.school_id=student.school_id
其中:grade_core.student_id不是唯一的,所以加上了最后一个and
左链接:
select us.ID,g.STUDENT_ID,us.NAME,us.age,g.COURSE_NAME,g.GRADE_CORE,g.TERM
from grade_core g
left join COURSE c
on g.COURSE_ID=c.COURSE_ID
left join student st
on st.STUDENT_ID=g.STUDENT_ID
and st.SCHOOL_ID=g.SCHOOL_ID
left join user_id us
on st.ID=us.ID
2求liming第一学期的平均成绩,
select avg(grade_core.grade_core)
from user_id,student,grade_core
where user_id.id=student.id
and student.school_id=grade_core.school_id
and grade_core.term=1
and user_id.name='liming'
left:select avg(g.grade_core)
from grade_core g
left join student stu
on stu.student_id=g.student_id
left join user_id us
on us.id=stu.id
where g.term=1
and us.name='liming'
3求清华所有的学生数
select count(student.id)
from student,school
where school.name='清华'
and student.school_id=school.school_id
4、求每个人每个学期的平均成绩
select avg(g.grade_core)
from grade_core g,student s,user_id u
group by g.student_id,g.term
左连接,右链接的理解。
select * from grade_core g
left join student st
on g.SCHOOL_ID = st.school_id
and g.Student_id=st.student_id
and g.STUDENT_ID=22201—左链接的这一条,如果有的话,一定就会出现这个结果?
where id='102';
select * from grade_core g
left join student st
on g.SCHOOL_ID = st.school_id
and g.Student_id=st.student_id
where g.STUDENT_ID=22201—求此条件与上面左链接的交集?
and id='102'
感受一下这两个有什么区别
select * from grade_core g
left join student st
on g.SCHOOL_ID = st.school_id
and g.Student_id=st.student_id
and g.STUDENT_ID=22201;
上句更常写成:
select * from grade_core g
left join student st
on g.SCHOOL_ID = st.school_id
and g.Student_id=st.student_id
and st.STUDENT_ID=22201
select * from grade_core g
left join student st
on g.SCHOOL_ID = st.school_id
and g.Student_id=st.student_id
where g.STUDENT_ID=22201
可以先拆分成这样看看结果有什么不一样
首先,select * 会把左链接的两表所有字段都查出来,链接、形成一个中间表。
Left join on 后边的and 通过限制表的链接过程,只对中间表的右表起限制,但不影响左表;而where后边的and则是对链接后形成的中间表起限制作用。
以后写关联的时候,尽量使用left join比较直观,方便梳理逻辑,一点点的查看关联是否正确。where X=X,作关联,是inner join的形式,取的是交集,不能满足所有的业务统计需求。
今天有时间的话,看一下,left join,right join,inner join,full join,cross join五种关联关系
Full join :返回左右链接的的并集。
Cross join: 返回笛卡尔积,返回两个表中所有可能的行组合。
create table grade_core_lsj
(
course_id number(10) ,
student_id number(10), primary key (course_id,student_id),
school_id number(10) not null,
grade_core number(10)not null,
term varchar2(10)not null,
student_name varchar(20)
)
分享到:
相关推荐
在本教程中,我们将深入探讨MySQL中的多种查询语句,包括多表查询、视图、数据库管理、SELECT语句以及创建表等核心概念。 首先,让我们从多表查询开始。在实际应用中,往往需要从多个相关表中获取信息,这就需要...
本主题聚焦于MySQL中的多表查询,这是数据库操作中不可或缺的一部分,特别是在处理复杂数据关联时。下面我们将深入探讨多表查询的相关知识点。 1. **JOIN操作**: - 内连接(INNER JOIN):返回两个表中存在匹配的...
连接允许用户结合两个或多个表的数据,以便进行更复杂和精确的数据分析。本文将详细介绍Oracle中的左连接(Left Join)、右连接(Right Join)、内连接(Inner Join)、全连接(Full Join)以及交叉连接(Cross Join...
以上只是Oracle SQL多表查询和统计功能的一部分,实际使用中还有更多的复杂查询和统计技巧,例如子查询、窗口函数、集合操作等。通过持续学习和实践,你可以掌握这些技能,提高在Oracle数据库中的数据处理能力。
本文将深入探讨Oracle中的“左右连接”操作,以及如何通过实践提升SQL查询技能。 首先,我们来理解Oracle中的“左右连接”(Left Join)。左连接是一种SQL联接类型,它返回左表的所有记录,即使右表中没有匹配的记录...
在关系型数据库管理中,表连接是一种重要的查询操作,它允许从多个相关表中检索数据。连接使得数据间的关联性得以展现,增强了数据查询的灵活性。通常,一个实体的信息可能分散在多个表中,通过连接操作,我们可以...
在MySQL数据库管理中,多表查询是处理复杂数据关系的核心技术。当数据分布在多个相关联的表中时,为了获取全面的信息,我们需要联合这些表进行查询。本篇将重点讨论如何利用MySQL进行多表查询以及执行计划的选择。 ...
左连接是一种数据库查询操作,其目的是将两个表进行连接,并返回左表的所有记录及右表中匹配的记录。如果右表没有与左表相匹配的记录,则结果集中相应的列将显示为NULL。在SQL中,左连接通常通过`LEFT JOIN`或`LEFT ...
本文将深入讲解MySQL中的多表查询,包括各种类型的连接查询,旨在帮助读者理解和掌握如何有效地从多个表中提取所需信息。 首先,我们要理解“笛卡尔现象”,即在没有明确连接条件的情况下,两个或更多表进行连接...
数据库表连接是数据库管理系统中用于整合来自多个表的数据的关键操作,尤其在处理复杂查询和关联数据时至关重要。本文主要探讨了四种基本的表连接类型:内连接、外连接(包括左外连接、右外连接)以及交叉连接。 ...
SQL连接是数据库操作中的重要概念,它允许我们合并来自两个或更多表的数据。在这个文档中,主要介绍了四种类型的SQL连接:内连接、左连接、右连接和自连接。这些连接类型都是在查询时将数据从一个表与另一个表关联...
数据库多表连接查询是数据库管理中常用的操作,特别是在处理复杂数据关联时显得尤为重要。本文主要探讨了如何在数据库系统中实现多表连接查询,特别是针对MySQL这样的关系型数据库。通过连接查询,可以从多个相关联...
综上所述,多表关联查询是SQL中的核心技能,掌握好等值连接、非等值连接、外连接和自连接,以及如何处理重复列名和避免笛卡尔积,将有助于我们在数据库管理和数据分析中更加高效地提取和整合信息。
新建两张表:表1:student 截图如下:表2:course 截图如下:(此时这样建表只是为了演示连接SQL语句,当然实际开发中我们不会这样建表,实际开发中这两个表会有自己不同的主键。)一、外连接外连接可分为:左连接...
SQL 多表连接查询是指在 SQL 语句中连接多个表,以便从不同表中获取数据。多表连接查询可以分为外连接、内连接、交叉连接等类型。下面详细介绍每种类型的连接查询。 一、外连接 外连接可以分为左连接、右连接、...
同时,统计用户的总评论数、查找指定作者的所有文章等,都需要利用多表查询。 综上所述,单表和多表操作是数据库管理的基础,熟练掌握这些技能对于在CSDN或其他任何需要处理大量数据的系统中构建高效、可靠的数据库...
当我们需要从多个表中获取数据并合并它们时,SQL提供了不同类型的连接操作,包括内连接、外连接(左连接和右连接)。以下是这些连接方式的详细说明。 **内连接(Inner Join)** 内连接返回两个表中存在匹配的记录。...
SQL表连接查询是数据库操作中不可或缺的部分,尤其在处理涉及多张表的复杂查询时显得尤为重要。表连接允许我们从多个相关联的表中检索出所需的数据,避免了单独对每张表进行多次操作,提高了查询效率。接下来,我们...
数据表的设计,id,name,pid,tp, id--该记录的ID name--该区域的名字,可以是省名字,市名字,区名字。 pid--父区域的ID tp--类型,1=>一级分类(国家),2=>二级(省),3=>三级(县) --------------------------- 这个...