Java全栈学习笔记33

-- 子查询,在查询语句中可以包含其他查询语句。包含其他查询的查询叫做父查询,被包含的查询叫做子查询

use empdb;

-- 查询工作地点是芝加哥的员工信息

-- 程序每次访问数据库都需要占用资源

select deptno from dept where loc = "CHICAGO"

select * from emp where deptno = 30;

-- 把SMITH的工资修改为ALLEN的工资

-- 查询结果做虚拟表

update emp set sal = (select * from (

select sal from emp where ename = "ALLEN") a) where ename = "SMITH"

-- 查询结果保存在数据库表

create table empinfo

as

select * from emp;

create table t_saltotal

as

select sum(sal),MONTH(now()) - 1 as month from emp

insert into t_saltotal(sal,month)

select sum(sal),MONTH(now()) - 2 as month from emp

select * from t_saltotal

use studb;

-- 查询和杨菲菲系别相同的学生信息

select * from student where class = (select class from student where studname = '杨菲菲')

-- 从成绩管理系统的学生表中查询入学成绩高于张宏的学生的姓名和入学成绩

select studname,ingrade

from student

where ingrade > (

select ingrade from student where studname = "张宏"

) order by ingrade desc

-- 查询和杨菲菲性别不同的学生信息

select * from student where studsex != (

select studsex from student where studname = "杨菲菲"

)

-- 总结:使用比较运算符时,子查询只能返回一个单值(单行单列)

-- 查询杨菲菲考了91分的课程的名称

select coursename from course

where courseid = (

select courseid from grade where grade = 91 and studid =

(

select studid from student where studname = "杨菲菲"

)

)

-- 查询成绩在90分以上的学生姓名,不分科目

select studname from student

where studid not in (select studid from grade where grade > 90)

-- 从成绩管理系统中查询"VB"考了90分以上的学生的姓名

select studname from student

where studid in

(

select studid from grade where grade > 90 and courseid = (

select courseid from course where coursename = "VB"

)

)

-- 查询其他系中比信息系所有学生的入学成绩低的学生姓名,入学成绩和系别

select studname,ingrade,class from student where ingrade < (

select min(ingrade) from student where class = "信息系")

select studname,ingrade,class from student where ingrade <all(

select ingrade from student where class = "信息系"

)

-- 查询其他系中比信息系某一学生的入学成绩低的学生姓名

select studname,ingrade,class from student where ingrade < (

select max(ingrade) from student where class = "信息系"

) and class != "信息系"

select studname,ingrade,class from student where ingrade <any(

select ingrade from student where class = "信息系"

) and class != "信息系"

use studb;

select * from student where exists(select * from student where class = '信息')

-- 在成绩管理系统中查询所有选修了"01"号课程的学生姓名。

select studname from student where exists(

select * from grade where courseid = "01" and studid = grade.studid

);

-- 连接查询,当前的数据显示需要多张表中的内容

use empdb;

-- 查询员工姓名,员工工资,岗位,入职日期,部门名称

select ename,sal,job,hiredate from emp,dept;

select ename,sal,job,hiredate from emp cross join dept;

-- 上述语句中没有条件。计算两张表中的笛卡尔积。

-- 连接查询是把不同的表中的内容,通过条件匹配,组合成一行数据

-- 为了数据的合理性,添加连接条件

select ename,sal,job,hiredate,emp.deptno,dname from emp,dept where emp.deptno = dept.deptno

and sal > 2000

use studb

-- 查询学生姓名,学生系别,以及选了01号课程的成绩

select studname,class,grade

from student,grade

where student.studid = grade.studid and courseid = "01"

-- 等值连接,内联接(inner join ... on 连接条件)

-- select studname,class,grade

-- from (

-- select * from student

-- ) student inner join (select * from grade where courseid = "04") grade

-- where student.studid = grade.studid

-- 表别名

select stu.studid,studname,class,grade

from student stu,grade g

where stu.studid = g.studid and g.courseid = "04"

select max(ingrade) maxIngrade from student group by class

select studname,class,grade

from student s join grade g

on s.studid = g.studid

where g.courseid = "04"

-- 查询所有学生的姓名,系别,考试成绩

select s.studid,studname,class,grade

from student s join grade g

on s.studid = g.studid

-- 外联 左外连接 右外连接 left/right outer join

select s.studid,studname,class,ifnull(grade,0)

from grade g left join student s

on s.studid = g.studid

-- 自己连接自己

-- 使用自联接在学生表中查询和"杨菲菲"性别相同的学生信息

select a.* from

student a,student b

where a.studsex = b.studsex and b.studname = "杨菲菲"

-- 查询学生信息,及学生选课的课程成名称,及分数

select s.*,c.courseid,coursename,grade

from student s join grade g

on s.studid = g.studid

join course c

on c.courseid = g.courseid

select s.*,c.courseid,coursename,grade

from student s,grade g,course c

where s.studid = g.studid and c.courseid = g.courseid

select s.*,c.courseid,coursename,grade

from student s left join grade g

on s.studid = g.studid

left join course c

on c.courseid = g.courseid;

-- 查询各个系别中的最高入学成绩

select max(ingrade),class from student group by class;

-- 查询各个系别中入学成绩由高到低排序的前两名 row number over()

select * from (

select studname,ingrade,class,row_number() over(PARTITION by class order by ingrade desc) rb from student) rb where rb < 3;

-- 查询学号,课程号,成绩,课程名称

select studid,courseid,grade,

(

select coursename from course where courseid = grade.courseid

) as coursename

from grade

use empdb;

-- 查询各个部门当中的最大工资以及这个工资的员工姓名

select emp.sal,ename

from emp,(select max(sal) sal,deptno from emp group by deptno) maxsal

where emp.sal = maxsal.sal and emp.deptno = maxsal.deptno;

select * from (

select ename,sal,

row_number() over(partition by deptno order by sal desc,ename asc) rb

from emp) rb where rb.rb = 1;

相关推荐
落花流水 丶2 分钟前
Java 集合框架完全指南
java
电饭叔10 分钟前
Jupyter学习中的问题--FileNotFoundError
ide·学习·jupyter
lang2015092821 分钟前
Java WebSocket API:JSR-356详解
java·python·websocket
jiang_changsheng24 分钟前
环境管理工具全景图与深度对比
java·c语言·开发语言·c++·python·r语言
计算机学姐26 分钟前
基于SpringBoot的民宿预定管理系统【三角色+个性化推荐算法+数据可视化统计】
java·vue.js·spring boot·mysql·信息可视化·intellij-idea·推荐算法
yaoxin52112329 分钟前
314. Java Stream API - 使用 Collectors.partitioningBy() 分区元素
java·windows
noBt1 小时前
Windows IDEA 卡顿严重
java·ide·intellij-idea
峥嵘life1 小时前
Android16 【CTS】CtsMediaCodecTestCases等一些列Media测试存在Failed项
android·linux·学习
h7ml1 小时前
淘宝返利软件的跨端同步架构:Java RESTful API+GraphQL满足Web/APP/小程序的多端数据需求
java·架构·restful
qq_336313931 小时前
javaweb-web基础(springboot入门)
java·开发语言·mysql