1. 程式人生 > >SQL基本的45題

SQL基本的45題

nbsp != 最小值 alter day har 查詢 arch 動手

-- 查詢Student表中的所有記錄的Sname、Ssex和Class列。
SELECT Sname,Ssex,Class from student

-- 查詢教師所有的單位即不重復的Depart列。
SELECT distinct Depart from teacher

-- 查詢Student表的所有記錄。
SELECT * from student

-- 查詢Score表中成績在60到80之間的所有記錄。
SELECT * from Score where grade>60 and grade<80

-- 查詢Score表中成績為85,86或88的記錄。
SELECT * from Score where grade in (85,86,88)

-- 查詢Student表中“95031”班或性別為“女”的同學記錄。
SELECT * from Student where class="95031" or Ssex=false

-- 以Class降序查詢Student表的所有記錄。
SELECT * from Student order by Class desc

-- 以Cno升序、Degree降序查詢Score表的所有記錄。
SELECT * from score order by Cno asc,grade desc

-- 查詢“95031”班的學生人數。
SELECT count(*) from student where Class = ‘95031‘

-- 查詢Score表中的最高分的學生學號和課程號。(子查詢或者排序)
SELECT * from score order by grade desc

-- 查詢每門課的平均成績。
SELECT Cno, avg(grade) from score group by Cno

-- 查詢Score表中至少有5名學生選修的並以3開頭的課程的平均分數。
SELECT Cno , avg(grade) from score where Cno like ‘3%‘ group by Cno having count(Sno)>=5

SELECT avg(grade) from score where Cno in(
SELECT Cno from score where Cno like ‘3%‘
and
Cno in(
SELECT Cno from score group by Cno having count(Sno)>=5
)
)
group by Cno
-- 查詢分數大於70,小於90的Sno列。
SELECT Sno from score where grade>70 and grade<90

-- 查詢所有學生的sname、cno和degree列
SELECT Sname,Cno,grade from score join student on score.Sno=student.Sno

-- 查詢所有學生的sno、sname和degree列
SELECT Sno,Cname,grade from score join course on score.Cno=course.Cno

-- 查詢所有學生的sname、cname和degree列

SELECT Sname,Cname,grade from score join student on score.Sno=student.Sno
join course on score.Cno=course.Cno

SELECT Sname,Cname,grade from student,course,score where score.Cno=course.Cno and
score.Sno=student.Sno

-- 查詢“95033”班學生的平均分

SELECT avg(grade) from score join student on score.Sno=student.Sno where class="95033"
--
-- 使用下面命令建立一個grade表
create table grad (
low int (3),
upp int (3),
rank char (1)
)
insert into grad values (90,100,‘A‘)
insert into grad values (80,89,‘B‘)
insert into grad values (70,79,‘C‘)
insert into grad values (60,69,‘D‘)
insert into grad values (0,59,‘E‘)

-- 查詢所有同學的sno、cno和rank列
SELECT Sno,Cno,rank from score,grad where grade between low and upp

-- 查詢選修3-105課程的成績高於109號同學成績的所有同學的記錄

SELECT grade from score where Cno=‘3-105‘ and grade>(
SELECT grade from score where Sno=109 and Cno=‘3-105‘
)

-- 查詢score中選修多門課程的同學中分數為非最高分成績的記錄
SELECT sum(grade) from score group by Sno having count(Sno)>=2
order by sum(grade) desc

SELECT sum(grade) from score where Sno in(
SELECT Sno from score group by Sno having count(Sno)>=2
)
group by Sno-- 分組求和,否則求出總數

-- 查詢成績高於學號為109、課號為3-105 的成績的所有記錄
SELECT * from score where grade>(
SELECT grade from score where Sno=109 and Cno=‘3-105‘
)

-- 查詢京津教師任課的學生成績
SELECT grade from score where Cno in(
SELECT Cno from course where Tno in(
SELECT Tno from teacher where Tname=‘京津‘
)
)

SELECT grade from score join course on score.Cno=course.Cno
join teacher on course.Tno=teacher.Tno where Tname=‘京津‘

--查詢選修某課程的同學人數多於5人的教師姓名
SELECT Tname from teacher where Tno in(
SELECT Tno from course where Cno in(
SELECT Cno from score group by Cno having count(Sno)>=5
)
)
-- group by Cno

-- 查詢95033班和95031班全體學生的記錄
SELECT * from score where Sno in(
SELECT Sno from student where class in(95033,95031)
)


-- 查詢存在有85分以上成績的課程Cno

SELECT distinct Cname from course join score on course.Cno=score.Cno
where grade>=85

SELECT distinct Cno from score where grade>=85

-- 查詢出 計算機系 教師所教課程的成績表
SELECT grade from score where Cno in(
SELECT Cno from course where Tno in(
SELECT Tno from teacher where Depart=‘計算機系‘
)
)

SELECT grade from score join course on score.Cno=course.Cno
join teacher on course.Tno=teacher.Tno
where Depart=‘計算機系‘


-- 查詢計算機系與電子工程系不同職稱的Tname和Prof教師的
SELECT Tname,Prof from teacher where Depart=‘計算機系‘ and Prof not in (
SELECT prof from teacher where Depart=‘電子工程系‘
)
union all
SELECT Tname,Prof from teacher where Depart=‘電子工程系‘ and Prof not in (
SELECT prof from teacher where Depart=‘計算機系‘
)

SELECT Tname,Prof from teacher a where Prof
not in (SELECT Prof from teacher b where a.Depart != b.Depart)
-- 查詢選修編號為“3-105“課程且成績至少高於選修編號
-- 為“3-245”的同學的Cno、Sno和Degree,並按Degree從高到低次序排序。
SELECT * from score where Cno=‘3-105‘
and grade >
any(SELECT grade from score where Cno=‘3-245‘
)
order by grade asc
-- all 所有,any 任意
-- 查詢選修編號為“3-105”且成績高於選修編號為“3-245”課程的同學的Cno、Sno和Degree.

SELECT * from score where Cno=‘3-105‘
and grade >
(SELECT max(grade) from score where Cno=‘3-245‘
)


-- 查詢所有教師和同學的name、sex和birthday.
SELECT Tname,sex from teacher
union all
SELECT Sname,Ssex from student


-- 查詢所有“女”教師和“女”同學的name、sex和birthday.
SELECT Tname,sex from teacher where sex=0
union all
SELECT Sname,Ssex from student where Ssex=0


-- 查詢成績比該課程平均成績低的同學的成績表。


SELECT * from score where Cno=‘3-245‘ and grade<
(SELECT avg(grade) from score where Cno=‘3-245‘
)
union
SELECT * from score where Cno=‘3-105‘ and grade<
(SELECT avg(grade) from score where Cno=‘3-105‘
)
union
SELECT * from score where Cno=‘6-116‘ and grade<
(SELECT avg(grade) from score where Cno=‘6-116‘
)

SELECT * from score join (SELECT Cno,avg(grade) as a from score group by Cno) as b on
(b.Cno=score.Cno) where grade<a

Select * from score a where grade<(select avg(grade) from score b where a.cno=b.cno)
-- 查詢所有任課教師的Tname和Depart.
SELECT Tname,Depart from teacher where Tno in(
SELECT Tno from course where Cno in(
SELECT Cno from score group by Cno
)
)

--查詢所有未講課的教師的Tname和Depart.

SELECT Tname,Depart from teacher where Tno not in(
SELECT Tno from course where Cno in(
SELECT Cno from score group by Cno
)
)

SELECT Tname,Depart from teacher where Tno not in(
SELECT Tno from course where Cno in(
SELECT distinct Cno from score
)
)

-- 查詢至少有2名男生的班號。

SELECT distinct class from student where Ssex in(
SELECT Ssex from student where Ssex=1 and Ssex in(
SELECT Ssex from student group by Ssex having count(Ssex)>=2
)
)
SELECT class from student where Ssex=‘1‘ group by class having count(*)>=2

-- 查詢Student表中不姓“王”的同學記錄。

SELECT * from student where Sname not like ‘王%‘

-- 查詢Student表中每個學生的姓名和年齡。

SELECT Sno,Sname from student

alter table student add column birthday varchar(30);
select sname as ‘姓名‘,(year ( date ( now() )) - year(birthday) ) as ‘年齡‘ from student;
select sname,(year(date(now()) ) -year(birthday) ) from student;
-- 查詢Student表中最大和最小的Sbirthday日期值。
SELECT max(Sno)from student
union
SELECT min(Sno)from student

SELECT max(Sno) as ‘最大值‘,min(Sno) ‘最小值‘ from student
--以班號和年齡從大到小的順序查詢Student表中的全部記錄。
SELECT * from student order by class desc,Sno desc

-- 查詢“男”教師及其所上的課程。

SELECT Cname from course where Tno in(
SELECT Tno from teacher where sex=1
)


-- 查詢最高分同學的Sno、Cno和Degree列。

SELECT Sno,Cno,grade from score where grade in(
SELECT max(grade) from score
)

--查詢和“李軍”同性別的所有同學的Sname.

SELECT Sname from student where Ssex in (
SELECT Ssex from student where Sname=‘張三‘
)

--查詢和“李軍”同性別並同班的同學Sname.

SELECT Sname from student where class in (
SELECT class from student where Sname=‘張三‘
)
and
Ssex in(
SELECT Ssex from student where Sname=‘張三‘
)

--查詢所有選修“計算機導論”課程的“男”同學的成績表。
SELECT grade from score where Cno in(
SELECT Cno from course where Cname=‘計算機導論‘
)
and
Sno in(
SELECT Sno from student where
Ssex in(
SELECT Ssex from student where Ssex=1
)
)

沒事兒就查一下 沒事兒就查一下 邏輯不是特別的難 連動手都不想動的時候就看 註意保護眼睛

SQL基本的45題