前阵子由于工作需要简单复习了下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)
)
分享到:
相关推荐
新建两张表:表1:student 截图如下:表2:course 截图如下:(此时这样建表只是为了演示连接SQL语句,当然实际开发中我们不会这样建表,实际开发中这两个表会有自己不同的主键。)一、外连接外连接可分为:左连接...
数据表的设计,id,name,pid,tp, id--该记录的ID name--该区域的名字,可以是省名字,市名字,区名字。 pid--父区域的ID tp--类型,1=>一级分类(国家),2=>二级(省),3=>三级(县) --------------------------- 这个...
计算机后端-PHP视频教程. php与mysql加强- 07. php加强24-左右连接查询.wmv
17、搜索引擎反向链接(通过本工具可以快速查询各大搜索引擎对网站的反向连接数量!) 18、查询手机号码归属地(查询手机号码的归属地及其手机号类型。) 19、SEO综合查询(SEO综合查询。) 20 、PR值查询(PR值...
页面模拟抓取,密度查询,各种加密,ICO在线制作,LOGO在线制作,多功能计数器,各国语言翻译等,增加外链:免费在线快速提高网站暴光率,明显增加网站外部连接(不作弊)。快速提高百度,YAHOO,GOOGLE等排名,网页...
路路通手机版时刻表java版[无需GPRS连接] 2010.04.15最新版 1、携带最方便--弥补携带成本时刻表的不足,无携带负担。 2、数据最准确--数据来源准确,随列车微调图更新及时,包括临时客车及浮动票价。 3、软件...
将SQL里面的表的字段 查询出来并导出生成到Access里面! 用的是笨方法: 1:将SQL数据表读出到DataTable 2:初始OLE连接,将Access数据连接建好 3:给Access加InsertCommand,并给其数据表添加值 4:直接Update(dtmp...
支持同时连接到多个数据库,同时对多个数据库进行操作 允许编辑SQL,PLSQL,JAVA,HTML和文本 使用书签功能,可以在大量SQL语句里,快速定位某个语句所在位置 SQL Editor本身具有强大的编辑功能,非常...
sql查询优化规则,左右连接,执行计划使用,以提高查询效率
打开数据库连接,正常显示中文标签,正常显示负号,使用 execute() 方法执行 SQL 查询
sql内连接、外连接,左右联合查询。通过一些简单的例子,最后发现其实联合查询很简单的^ ^
JS跑马灯.网站首页的图片左右滑动.连接数据库,从数据库中获得图片. 有,ADO.NET的连接功能.
视图就是一个表或多个表的查询结果,它是一张虚拟的表,因为它并不能存储数据。 视图的作用、优点: 限制对数据的访问 让复杂查询变得简单 提供数据的独立性 可以完成对相同数据的不同显示 创建、修改视图 create or...
ChipGenius是一款USB设备芯片型号检测工具,可以自动查询U盘、MP3/MP4、读卡器、移动硬盘等一切USB设备的主控芯片型号、制造商、品牌、并提供相关资料下载地址。当然也可以查询USB设备的VID/PID信息、设备名称、接口...
)17、搜索引擎反向链接(通过本工具可以快速查询各大搜索引擎对网站的反向连接数量!)18、查询手机号码归属地(查询手机号码的归属地及其手机号类型。)19、SEO综合查询(SEO综合查询。)20 、PR值查询(PR值全称...
17、搜索引擎反向链接(通过本工具可以快速查询各大搜索引擎对网站的反向连接数量!) 18、查询手机号码归属地(查询手机号码的归属地及其手机号类型。) 19、SEO综合查询(SEO综合查询。) 20 、PR值查询(PR值...
17、搜索引擎反向链接(通过本工具可以快速查询各大搜索引擎对网站的反向连接数量!) 18、查询手机号码归属地(查询手机号码的归属地及其手机号类型。) 19、SEO综合查询(SEO综合查询。) 20 、PR值查询(PR值...