- 组合查询
组合查询
本小节主要介绍如何使用GROUP BY、HAVING和ORDER BY等进行分组查询。
- 使用CREATE TABLE语句创建数据表。将以下语句复制到SQLConsole页签中,然后单击【执行】。
CREATE TABLE student
(sid
int(11) NOT NULL,sname
varchar(30) DEFAULT NULL,sage
int(11) DEFAULT NULL,ssex
varchar(8) DEFAULT NULL,
PRIMARY KEY (sid
)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
insert into student
(sid
,sname
,sage
,ssex
) values
(1005,'xiaohua',19,'0'),
(1004,'xiaohong',18,'0'),
(1003,'wangwu',18,'1'),
(1002,'lisi',17,'1'),
(1001,'zhangsan',18,'1');
CREATE TABLE sc
(sid
int(11) NOT NULL,cid
int(11) NOT NULL,score
int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
insert into sc
(sid
,cid
,score
) values
(1001,101,75),
(1001,102,85),
(1002,101,65),
(1002,102,95),
(1003,101,65),
(1003,102,95),
(1004,101,80),
(1004,102,80),
(1005,101,75),
(1005,102,85);
CREATE TABLE course
(cid
int(11) NOT NULL,cname
varchar(30) DEFAULT NULL,tid
int(11) DEFAULT NULL,
PRIMARY KEY (cid
)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
insert into course
(cid
,cname
,tid
) values
(102,'yuwen',2),
(101,'shuxue',1);
CREATE TABLE teacher
(tid
int(11) NOT NULL,tname
varchar(30) DEFAULT NULL,
PRIMARY KEY (tid
)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
insert into teacher
(tid
,tname
) values
(2,'liulaoshi'),
(1,'wanglaoshi');
执行成功后,单击【刷新】查看创建的数据表。
- 查询所有同学的学号和成绩。 将以下SQL语句复制到SQLConsole页签中,然后单击【执行】。
使用WHERE s. sid = sc.sid 来消除笛卡尔积。
SELECT s.sid ,s.sname ,c.score FROM student AS s ,sc AS c WHERE s.sid = c.sid ;
执行结果如下:
- 查询语文成绩在80以上同学。 将以下SQL语句复制到SQLConsole页签中,然后单击【执行】。
SELECT a.score,
b.cname,
s.sname
FROM sc as a,
course AS b,
student AS s
WHERE a.cid= b.cid
AND s.sid= a.sid
AND a.cid= 102
AND a.score> 80
执行结果如下:
- 查询语文成绩比数学成绩高的同学。 将以下SQL语句复制到SQLConsole页签中,然后单击【执行】。
SELECT a.sid,
a.score,
s.sname
FROM(
SELECT sid, score
FROM sc
WHERE cid= "102") a,
(
SELECT sid, score
FROM sc
WHERE cid= "101") b,
student as s
WHERE a.score > b.score
AND a.sid= b.sid
AND s.sid= a.sid
执行结果如下: