diff --git "a/57 \345\210\230\346\263\260\346\261\237/20230227\345\205\263\350\201\224\346\237\245\350\257\242.md" "b/57 \345\210\230\346\263\260\346\261\237/20230227\345\205\263\350\201\224\346\237\245\350\257\242.md" new file mode 100644 index 0000000000000000000000000000000000000000..4ec70b4234016f1ed398249bc4b102f575504349 --- /dev/null +++ "b/57 \345\210\230\346\263\260\346\261\237/20230227\345\205\263\350\201\224\346\237\245\350\257\242.md" @@ -0,0 +1,141 @@ +# 1.笔记 + +```sql +1.1 查询每个员工的姓名和部门名称 +SELECT ename,dname FROM t_employee +left join t_department on t_employee.did=t_department.did; +select 查询的类型 from a表 left join b表 on a表的关联内容=b表的关联内容; + 1.2 外连接查询 (使用的关键字 outer join --outer 可以省略) + +mysql +左外连接 :left outer join + + select * from A left outer join B on 条件; + +右外连接 :right outer join + + select * from A right outer join B on 条件; + +满外连接 :full outer join + + select * from A full outer join B on 条件; +1.3内连接查询 + +隐式内连接 : select * from A,B where 条件; + +显式内连接 : select * from A inner join B on 条件; +``` + +# 2.作业 + +```sql +CREATE database wdnmd charset utf8; +use wdnmd; +create table student( +Sno varchar (20), +Sname varchar (20), +Ssex varchar (20), +Sbirthday datetime, +Class varchar (20) +); +CREATE table Course( +Cno varchar (20), +Cname varchar (20), +Tno varchar (20) +); +create table Score( +Sno varchar (20), +Cno varchar (20), +Degree Decimal(4,1) +); +create table Teacher( +Tno varchar (20), +Tname varchar (20), +Tsex varchar (20), +Tbirthday datetime, +Prof varchar (20), +Depart varchar (20) +); +drop TABLE Teacher; +INSERT into student values +(108,'曾华','男','1977-9-1','95033'), +(105,'匡明','男','1975-10-2','95031'), +(107,'王丽','女','1976-1-23','95033'), +(101,'李军','男','1976-2-20','95033'), +(109,'王芳','女','1975-2-10','95031'), +(103,'陆君','男','1974-6-3','95031'); +insert into Course values +(3-245,'操作系统','804'), +(6-166,'数字电路','856'), +(9-888,'高等数学','831'); +insert into Score values +(103,'3-245','86'), +(105,'3-245','75'), +(109,'3-245','68'), +(103,'3-105','92'), +(105,'3-105','88'), +(109,'3-105','76'), +(101,'3-105','64'), +(107,'3-105','91'), +(108,'3-105','78'), +(101,'6-166','85'), +(107,'6-166','79'), +(108,'6-166','81'); +insert into Teacher values +(804,'李诚','男','1958-12-2','副教授','计算机系'), +(856,'张旭','男','1969-3-12','讲师','电子工程系'), +(825,'王萍','女','1972-5-5','助教','计算机系'), +(831,'刘冰','女','1977-8-14','助教','电子工程系'); + +-- 1,查询所有学生,都学了哪些课程,要显示学生信息和课程信息 +select student.sno,sname,ssex,sbirthday,class,cname +from student left join score on student.sno=score.sno +left join course on score.cno=course.cno; +-- 2,查询没有学生的教师的所有信息\ +-- 4.查询 +-- ① 查询Score表中的最高分的学生学号和课程号。 +select 查询的类型 from a表 left join b表 on a表的关联内容=b表的关联内容; +select sno,cno from score where degree=(select max(degree) from score); +-- ② 查询所有学生的Sname、Cno和Degree列。 +select sname,score.cno,degree from student inner join score on student.sno=score.sno; +-- ③ 查询所有学生的Sno、Cname和Degree列。 +select score.sno,cname,degree from score inner join course on score.cno=course.cno; +-- ④ 查询所有学生的Sname、Cname和Degree列。 +select sname,cname,degree from student inner join score on student.sno=score.sno inner join course on score.cno=course.cno; +-- ⑤ 查询“95033”班学生的平均分。 +select avg(score.Degree) from score inner join student on student.Sno = score.Sno where student.Class = '95033'; +-- ⑥ 查询选修“3-105”课程的成绩高于“109”号同学成绩的所有同学的记录。 +select * from student inner join score on student.sno=score.sno where score.cno='3-105' +and degree > (select degree from score where score.sno=109 and score.cno='3-105' ); +-- ⑦ 查询score中选学多门课程的同学中分数为非最高分成绩的记录。 +-- ⑧ 查询成绩高于学号为“109”、课程号为“3-105”的成绩的所有记录。 +-- ⑨ 查询和学号为108的同学同年出生的所有学生的Sno、Sname和Sbirthday列。 +-- ⑩ 查询“张旭“教师任课的学生成绩。 +-- ⑪ 查询选修某课程的同学人数多于5人的教师姓名。 +-- ⑫ 查询出“计算机系“教师所教课程的成绩表。 +select score.sno,score.cno,degree from score left join course +on score.cno=course.cno left join teacheron course.tno=teacher.tnowhere depart='计算机系'; +-- ⑬ 查询“计算机系”与“电子工程系“不同职称的教师的Tname和Prof。 +select tname,prof from teacher where prof in (select distinct prof from teacher); +-- ⑭ 查询选修编号为“3-105“课程且成绩至少高于选修编号为“3-245”的同学的Cno、Sno和Degree,并按Degree从高到低次序排序。 +-- ⑮ 查询选修编号为“3-105”且成绩高于选修编号为“3-245”课程的同学的Cno、Sno和Degree. +-- ⑯ 查询成绩比该课程平均成绩低的同学的成绩表。 +-- ⑰ 查询所有任课教师的Tname和Depart. +-- ⑱ 查询所有未讲课的教师的Tname和Depart. +-- ⑲ 查询“男”教师及其所上的课程。 +select tname,cname from teacher left join course +on teacher.tno=course.tno +where tsex='男'; +-- ⑳ 查询最高分同学的Sno、Cno和Degree列。 +select sno,cno,degree from score where degree=( +select max(degree) from score); +-- 21 查询和“李军”同性别的所有同学的Sname. +select sname from student +where ssex=(select ssex from student where sname='李军'); +-- 22 查询和“李军”同性别并同班的同学Sname. +select sname from student +where ssex=(select ssex from student where sname='李军') +and class=(select class from student where sname='李军'); +-- 查询所有选修“计算机导论”课 +``` +