(5)查询数据

(1)创建student表和score表
CREATE TABLE student(id INT(10) NOT NULL UNIQUE PRIMARY KEY,
    NAME VARCHAR(20) NOT NULL,
    sex VARCHAR(4),
    birth YEAR,
    department VARCHAR(20),
    address VARCHAR(50)
    );
CREATE TABLE score(id INT(10) NOT NULL UNIQUE PRIMARY KEY AUTO_INCREMENT,
  stu_id INT(10) NOT NULL,
  c_name VARCHAR(20),
  grade INT(10)
  );
(2)插入数据
INSERT INTO student VALUES(901,'张老大','男',1985,'计算机系','北京市海定区');
INSERT INTO student VALUES(902,'张老二','男',1986,'中文系','北京市昌平区');
INSERT INTO student VALUES(903,'张三','女',1990,'中文系','湖南省永州市');
INSERT INTO student VALUES(904,'李四','男',1990,'英语系','辽宁省新市');
INSERT INTO student VALUES(905,'王五','女',1991,'英语系','福建省厦门市');
INSERT INTO student VALUES(906,'王六','男',1988,'计算机系','湖南省衡阳市');


INSERT INTO score VALUES(NULL,901,'计算机',98);
INSERT INTO score VALUES(NULL,901,'英语',80);
INSERT INTO score VALUES(NULL,902,'计算机',65);
INSERT INTO score VALUES(NULL,902,'中文',88);
INSERT INTO score VALUES(NULL,903,'中文',95);
INSERT INTO score VALUES(NULL,904,'计算机',70);
INSERT INTO score VALUES(NULL,904,'英语',92);
INSERT INTO score VALUES(NULL,905,'英语',94);
INSERT INTO score VALUES(NULL,906,'计算机',90);
INSERT INTO score VALUES(NULL,906,'英语',85);


(3)查询student表的所有记录
SELECT * FROM student;


SELECT id,NAME,sex,birth,department,address FROM student;
(4)查询student表的第2~4条记录  通过 LIMIT 关键字查询
1表示从第二条记录开始查询,3表示查询三条数据
SELECT * FROM student LIMIT 1,3;
 
(5)要从student表查询所有的学生的学号、姓名和院系的信息,就必须在select语句中指定字段
SELECT id,NAME,department FROM student;


(6)查询计算机系和英语系的学生的信息有两种方法
SELECT * FROM student
WHERE department IN ('计算机系','英语系');


SELECT * FROM student
WHERE department='计算机系' OR department='英语系';


其中 = 可以用 LIKE 代替
(7)从student表中查询年龄为18~22岁学生的信息  可以通过 AS 关键字将2009-birth取名为age
SELECT NAME,2009-birth AS age FROM student;


SELECT id,NAME,sex,2009-birth AS age,department,address FROM student WHERE 2009-birth BETWEEN 18 AND 22;


SELECT id,NAME,sex,2009-birth AS age,department,address FROM student WHERE 2009-birth>=18 AND 2009-birth<=22;


(8)student表中查询每个院系有多少人。先必须按院系进行分组,然后再计算人数


SELECT department,COUNT(id) FROM student GROUP BY department;


(9)从score表中查询每个科目的最高分。首先按照c_anme字段对score表中的记录进行分组。然后使用MAX()函数计算每组的最大值。


SELECT c_name,MAX(grade) FROM score GROUP BY c_name;


(10)查询李四的考试科目(c_anme)和考试成绩(grade)。科目和成绩都存储在score表中。但是score表中只有学生的学号,没有学生的姓名。
所以必须根据学生学生姓名从student表中取出学生的学号。然后再从score表中查询该学生的考试科目和成绩


SELECT c_name,grade FROM score WHERE stu_id=
(SELECT id FROM student WHERE NAME='李四');


(11)用连接查询的方式查询所有学生的信息号考试信息。因为student表的id字段和score表的stu_id字段都是表示学号。


SELECT student.id,NAME,sex,birth,department,address,c_name,grade 
FROM student,score 
WHERE student.id=score.stu_id;
取名
SELECT s1.id,NAME,sex,birth,department,address,c_name,grade 
FROM student s1,score s2 
WHERE s1.id=s2.stu_id;


(12)计算每个学生的总成绩。所有学生的成绩都存储在score表中。要计算每个同学的总成绩,必须按学号进行分组,然后用SUM()函数计算总成绩
SELECT stu_id ,SUM(grade)
FROM score GROUP BY stu_id;


如果还需要显示学生的姓名,就需要将两个表连接,将连接好的结果进行分组。


SELECT student.id,NAME,SUM(grade)
FROM student,score
WHERE student.id=score.stu_id
GROUP BY student.id;


(13)计算每个考试科目的平均成绩。先必须将score表按照科目(c_name)进行分组
然后再使用 AVG()函数计算每组平均值


SELECT c_name,AVG(grade)
FROM score GROUP BY c_name


(14)查询计算机成绩低于95的学生的信息


SELECT * FROM student
WHERE id IN
(SELECT stu_id FROM score
WHERE c_name="计算机" AND grade<95);


(15)查询同时参加计算机和英语考试的学生的信息。先从score表中查询谁同时参加了计算机和英语这两门考试,
取出该同学的学号,再去student表中查询


SELECT * FROM student 
WHERE id=ANY
(SELECT stu_id FROM score
WHERE stu_id IN(
SELECT stu_id FROM
score WHERE c_name='计算机')
AND c_name='英语');
//嵌套子查询


(16)将计算机成绩按照从高到低排序


SELECT stu_id,grade
FROM score WHERE c_name='计算机'
ORDER BY grade DESC;


(17)从student表和score表中查询出学生的学号,然后合并查询结果   使用 UNION 关键字 自动取出相同记录
 
SELECT id FROM student
UNION
SELECT stu_id FROM score;


(18)查询姓张或者姓王的同学的姓名、院系、考试科目和成绩


SELECT student.id,NAME,sex,birth,department,address,c_name,grade
FROM student,score
WHERE
     (NAME LIKE '张%' OR NAME LIKE '王%')
     AND
     student.id=score.stu_id;


(19)查询都是湖南的同学的姓名、年龄、院系、考试科目和成绩。


SELECT student.id,NAME,sex,birth,department,address,c_name,grade
FROM student,score
WHERE 
     address LIKE '湖南%' AND
     student.id=score.stu_id;
 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值