25、查问出计算机系老师所教课程的成绩表

子查问

SELECT tno FROM teacher WHERE depart='计算机系';SELECT cno FROM course WHERE tno IN(SELECT tno FROM teacher WHERE depart='计算机系');SELECT * FROM score WHERE cno IN(SELECT cno FROM course WHERE tno IN(SELECT tno FROM teacher WHERE depart='计算机系'));sno cno     degree103    3-245    86105    3-245    75109    3-245    68101    3-105    90102    3-105    91103    3-105    92104    3-105    88105    3-105    88109    3-105    76

26、查问计算机系与电子工程系不同职称的老师的tname和prof

union求并集,联结在一起

SELECT tname,prof FROM teacher WHERE depart='计算机系' AND prof NOT IN(SELECT prof FROM teacher WHERE depart='电子工程系')UNIONSELECT tname,prof FROM teacher WHERE depart='电子工程系' AND prof NOT IN(SELECT prof FROM teacher WHERE depart='计算机系');

27、查问选修编号为3-105课程且问题至多高于选修编号为3-245的同学的cno,sno和degree,并按degree从高到底排序

至多的含意:大于其中至多一个,any

SELECT * FROM score WHERE cno = '3-105';SELECT * FROM score WHERE cno = '3-245';SELECT * FROM score WHERE cno = '3-105' AND degree >ANY(SELECT degree FROM score WHERE cno = '3-245')ORDER BY degree DESC;sno cno     degree103    3-105    92102    3-105    91101    3-105    90104    3-105    88105    3-105    88109    3-105    76

28、查问选修编号为3-105课程且问题高于选修编号为3-245的同学的cno,sno和degree

且:所有,all示意所有的关系

SELECT * FROM score WHERE cno = '3-105' AND degree >ALL(SELECT degree FROM score WHERE cno = '3-245')sno cno     degree101    3-105    90102    3-105    91103    3-105    92104    3-105    88105    3-105    88

29、查问所有老师和同学的name,sex,和birthday

as:取别名

SELECT tname AS name,tsex AS sex,tbirthday as birthday FROM teacherUNIONSELECT sname,ssex,sbirthday FROM student;name  sex   birthday李诚    男    1958-12-02 00:00:00王萍    女    1972-05-05 00:00:00刘冰    女    1977-08-14 00:00:00张旭    男    1969-03-12 00:00:00曾华    男    1977-09-01 00:00:00匡明    男    1975-10-02 00:00:00王丽    女    1976-01-23 00:00:00李军    男    1976-02-20 00:00:00王芳    女    1975-02-10 00:00:00陆君    男    1974-06-03 00:00:00王尼玛    男    1974-06-03 00:00:00张全蛋    男    1974-06-03 00:00:00赵铁柱    男    1974-06-03 00:00:00关羽    男    1974-06-03 00:00:00

30、查问所有女老师和女同学的name,sex和birthday

SELECT tname AS name,tsex AS sex,tbirthday AS birthday FROM teacher WHERE tsex='女'UNIONSELECT sname,ssex,sbirthday FROM student WHERE ssex='女';name  sex      birthday王萍    女    1972-05-05 00:00:00刘冰    女    1977-08-14 00:00:00王丽    女    1976-01-23 00:00:00王芳    女    1975-02-10 00:00:00

31、查问问题比该课程均匀问题低的同学的成绩表

SELECT cno,AVG(degree) FROM score  GROUP BY cno;cno      avg(degree)3-105    87.50003-245    76.33336-166    81.6667--把表分成两个,而后通过score a这样的形式取别名。SELECT * FROM score a WHERE degree <(SELECT AVG(degree) FROM score b WHERE a.cno=b.cno);sno  cno  degree105    3-245    75105    6-166    79109    3-105    76109    3-245    68109    6-166    81

32、查问所有任课教师的tname和depart

在课程表里安顿了课程

SELECT tname,depart FROM teacher WHERE tno IN(SELECT tno FROM course);tname  depart李诚    计算机系王萍    计算机系刘冰    电子工程系张旭    电子工程系

33、查问至多有两名男生的班号

条件加分组筛选

SELECT class FROM student WHERE ssex='男' GROUP BY class HAVING COUNT(*)>1;class9503395031

34、查问学生表中每个学生的姓名年龄

year函数与now函数

SELECT sname,year(NOW())-year(sbirthday) AS '年龄' FROM student;曾华    43匡明    45王丽    44李军    44王芳    45陆君    46王尼玛    46张全蛋    46赵铁柱    41关羽    42

35、查问student表中最大和最小的birthday

max与min函数

SELECT MAX(sbirthday) AS max_birthday,MIN(sbirthday) AS min_birthday FROM student;max                         min1979-11-30 00:00:00    1974-05-14 00:00:00

36、以班号和年龄从大到小的程序查问student表中的全副记录

mysql> SELECT * FROM student ORDER BY class desc, sbirthday;

37、查问男老师及其所上的课程

SELECT cname FROM course WHERE tno in(SELECT tno FROM teacher WHERE tsex='男');操作系统数字电路

38、查问最高分同学的sno,cno和degree列

SELECT sno,cno,degree from score WHERE degree=(SELECT max(degree) FROM score);103    3-105    92

39、查问和李军同性别的所有同学的sname

SELECT sname FROM student WHERE ssex=(SELECT ssex FROM student WHERE sname='李军');曾华匡明李军陆君王尼玛张全蛋赵铁柱关羽

40、查问和李军同性别同班级的同学的sname

SELECT sname FROM student WHERE ssex=(SELECT ssex FROM student WHERE sname='李军') AND class=(SELECT class from student WHERE sname = '李军');曾华李军

41、查问所有选修计算机导论课程的男同学的成绩表

SELECT * FROM score WHERE cno=(SELECT cno FROM course WHERE cname='计算机导论') AND sno in(SELECT sno from student WHERE ssex='男');sno   cno    degree101    3-105    90102    3-105    91104    3-105    88109    3-105    76

42、假如应用如下命令建设一个grade表

create table grade(low int(3),upp int(3),grade char( 1));insert into grade values ( 90,100, 'A');insert into grade values(80,89,'B');insert into grade values ( 70,79,'C') ;insert into grade values(60,69,'D') ;insert into grade values ( 0,59,'E' );

现查问所有同学的sno,cno和grade列。

SELECT sno,cno,grade FROM score,gradeWHERE degree BETWEEN low AND upp;sno  cno   grade101    3-105    A102    3-105    A103    3-105    A103    3-245    B103    6-166    B104    3-105    B105    3-105    B105    3-245    C105    6-166    C109    3-105    C109    3-245    D109    6-166    B

sql的四种连贯查问

内连贯inner join 或者join外连贯左连贯 left join 或者left outer join右连贯 right join 或者right outer join齐全外连贯full join 或者full outer join



创立两个表:

person表id,name,cardID1    张三    12    李四    33    王五    6card表id,name1    饭卡2    建行卡3    农行卡4    工商卡5    邮政卡并没有创立外键--inner join查问(内连贯)SELECT * from person INNER JOIN card ON person.cardID=card.id;id name  cardid id name1    张三    1    1    饭卡2    李四    3    3    农行卡--内连查问,其实就是两张表中的数据,通过某个字段相等查问出相干记录数据。--left join左外连贯SELECT * FROM person LEFT JOIN card ON person.cardID=card.id;+------+--------+--------+------+-----------+| id   | name   | cardID | id   | name      |+------+--------+--------+------+-----------+|    1 | 张三   |      1 |    1 | 饭卡      ||    2 | 李四   |      3 |    3 | 农行卡    ||    3 | 王五   |      6 | NULL | NULL      |+------+--------+--------+------+-----------+3 rows in set (0.00 sec)---左外连贯,会把右边表里所有的数据取出来,而左边表里的数据,如果有相等的,就显示进去,如果没有就补null。----right join右外连贯SELECT * FROM person RIGHT JOIN card ON person.cardID=card.id;+------+--------+--------+------+-----------+| id   | name   | cardID | id   | name      |+------+--------+--------+------+-----------+|    1 | 张三   |      1 |    1 | 饭卡      || NULL | NULL   |   NULL |    2 | 建行卡    ||    2 | 李四   |      3 |    3 | 农行卡    || NULL | NULL   |   NULL |    4 | 工商卡    || NULL | NULL   |   NULL |    5 | 邮政卡    |+------+--------+--------+------+-----------+5 rows in set (0.00 sec)---右外连贯,会把左边表里所有的数据取出来,而右边表里的数据,如果有相等的,就显示进去,如果没有就补null。---------------------------------------------------------------------------------------------------------------------------------------------full join全外连贯---MySQL不反对全外连贯---只能通过union来实现mysql> SELECT * FROM person LEFT JOIN card ON person.cardID=card.id    -> UNION    -> SELECT * FROM person RIGHT JOIN card ON person.cardID=card.id;+------+--------+--------+------+-----------+| id   | name   | cardID | id   | name      |+------+--------+--------+------+-----------+|    1 | 张三   |      1 |    1 | 饭卡      ||    2 | 李四   |      3 |    3 | 农行卡    ||    3 | 王五   |      6 | NULL | NULL      || NULL | NULL   |   NULL |    2 | 建行卡    || NULL | NULL   |   NULL |    4 | 工商卡    || NULL | NULL   |   NULL |    5 | 邮政卡    |+------+--------+--------+------+-----------+6 rows in set (0.00 sec)