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;

相关推荐
WZTTMoon7 分钟前
Spring Boot 4.0 迁移核心注意点总结
java·spring boot·后端
丝斯20118 分钟前
AI学习笔记整理(26)—— 计算机视觉之目标追踪‌
人工智能·笔记·学习
('-')13 分钟前
《从根上理解MySQL是怎样运行的》第二十五章笔记
数据库·笔记·mysql
m0_6896182815 分钟前
会“变形”的软3D电磁结构,让4D电子、柔性机器人迎来新可能
笔记·学习·机器人
旷野说25 分钟前
为什么 MyBatis 原生二级缓存“难以修复”?
java·java-ee·mybatis
8***235528 分钟前
【wiki知识库】07.用户管理后端SpringBoot部分
java
雍凉明月夜31 分钟前
c++ 精学笔记记录Ⅰ
开发语言·c++·笔记
柒柒钏41 分钟前
PyTorch学习总结(一)
人工智能·pytorch·学习
阿蔹44 分钟前
JavaWeb-Selenium 配置以及Selenim classnotfound问题解决
java·软件测试·python·selenium·测试工具·自动化
小毅&Nora1 小时前
【后端】【C++】从裸指针到 C++20 协程:现代 C++ 内存与并发编程的双重革命
java·c++20