mysql03

查询的列不在同一表中必须使用连接内连接,外链接


-- 输出学生姓名以及对应的年级名称

内连接
select studentName,gradeName
from student inner join grade
on student.gradeId=grade.gradeId

隐式内连接
select studentName,gradeName from
student,grade
where student.gradeId =gradeID

左外连接查询
以left join左边的表为准,右表没有的数据返回null

select studentName ,gradeName
from student left join grade
on student.gradeId=grade.gradeId

右外连接查询
以left join右边的表为准,左表没有的数据返回null

select studentName ,gradeName
from student left join grade
on student.gradeId=grade.gradeId

-- 查询考试课程编号为1 的学生姓名,以及年级名称和科目名称以及成绩

select studentName ,gradeName ,subjectName ,studentResult
from student s,grade g, subject b,result r
where s.studentId=r.studentId,
and r.subjectNO=b.subjectNo,
and g.gradeId=s.gradeId ,
and g.gradeId=b.gradeId ,
and b.subjectNo=1


临时表:只在当前连接可见,当这个连接关闭时,会自动ry删除,不会占用数据库空间。修改临时表数据不会影响原来表数据,因此如希望 验证某些修改表后的查询,又不想更改原表内容时,可以使用临时表备份原表数据,在临时表上做数据验证,当连接关闭后,系统会自动删除临时表。
create temporary table 表名 (查询语句);


自连接:
把一个表当成多个表来使用,关键是使用别名。
例 1        

name      bumen     zhiwu
张三      市场       员工
李四      销售       经理
王五      市场      经理

使用自连接的方式 查询员工所在的 部门 经理 的 姓名


select name from table where bumen =(
select bumen from table where name='张三'
) and zhiwu='经理'

例 2

teacher 表
id       name         tid
1         导师1
2         导师2
3         老师1         1
4         老师2         1
5         老师3         2

---查询老师3的姓名和对应的 导师姓名


t1 老师    t2 导师
select t1.name as 老师名 ,t2.name as 导师名
from teacher t1, teacher t2
where t1.tid=t2.id
and t1.name='老师3'


例 3
name     class      socre
黑1       1           89
黑2       1           6
黑3       1           90
白1       2           34
白2       2           27
白3       2           72


a.查询分数前三名
b.找出前三名并输出


a. select * from table
order by socre desc
limit 0,3

b. select * from table t1
where (
select count (1) from table t2
where t1.socre <t2.socre
and t1.class=t2.class
)<3
order by class ,socre desc

 

原文地址:https://www.cnblogs.com/cuixiaomeng/p/7121520.html