mysql 查询语句的使用

-- 教室表数据
INSERT INTO `test1`.`teacher` (`Tid`, `Tname`) VALUES ('01', '张三');
INSERT INTO `test1`.`teacher` (`Tid`, `Tname`) VALUES ('02', '李四');
INSERT INTO `test1`.`teacher` (`Tid`, `Tname`) VALUES ('03', '王五');

-- 学生表数据
INSERT INTO `test1`.`student` (`Sid`, `Sname`, `Sage`, `Ssex`) VALUES ('01', '赵雷', '1990-01-01 00:00:00', '男');
INSERT INTO `test1`.`student` (`Sid`, `Sname`, `Sage`, `Ssex`) VALUES ('02', '钱电', '1990-12-21 00:00:00', '男');
INSERT INTO `test1`.`student` (`Sid`, `Sname`, `Sage`, `Ssex`) VALUES ('03', '孙风', '1990-05-20 00:00:00', '男');
INSERT INTO `test1`.`student` (`Sid`, `Sname`, `Sage`, `Ssex`) VALUES ('04', '李云', '1990-08-06 00:00:00', '男');
INSERT INTO `test1`.`student` (`Sid`, `Sname`, `Sage`, `Ssex`) VALUES ('05', '周梅', '1991-12-01 00:00:00', '女');
INSERT INTO `test1`.`student` (`Sid`, `Sname`, `Sage`, `Ssex`) VALUES ('06', '吴兰', '1992-03-01 00:00:00', '女');
INSERT INTO `test1`.`student` (`Sid`, `Sname`, `Sage`, `Ssex`) VALUES ('07', '郑竹', '1989-07-01 00:00:00', '女');
INSERT INTO `test1`.`student` (`Sid`, `Sname`, `Sage`, `Ssex`) VALUES ('08', '王菊', '1990-01-20 00:00:00', '女');

-- 科目表数据
INSERT INTO `test1`.`course` (`Cid`, `Cname`, `Tid`) VALUES ('01', '语文', '02');
INSERT INTO `test1`.`course` (`Cid`, `Cname`, `Tid`) VALUES ('02', '数学', '01');
INSERT INTO `test1`.`course` (`Cid`, `Cname`, `Tid`) VALUES ('03', '英语', '03');
INSERT INTO `test1`.`course` (`Cid`, `Cname`, `Tid`) VALUES ('04', '科学', '04');

--  成绩表 
INSERT INTO `test1`.`sc` (`Sid`, `Cid`, `score`) VALUES ('01', '01', '80.0');
INSERT INTO `test1`.`sc` (`Sid`, `Cid`, `score`) VALUES ('01', '02', '90.0');
INSERT INTO `test1`.`sc` (`Sid`, `Cid`, `score`) VALUES ('01', '03', '99.0');
INSERT INTO `test1`.`sc` (`Sid`, `Cid`, `score`) VALUES ('02', '01', '70.0');
INSERT INTO `test1`.`sc` (`Sid`, `Cid`, `score`) VALUES ('02', '02', '60.0');
INSERT INTO `test1`.`sc` (`Sid`, `Cid`, `score`) VALUES ('02', '03', '80.0');
INSERT INTO `test1`.`sc` (`Sid`, `Cid`, `score`) VALUES ('03', '01', '80.0');
INSERT INTO `test1`.`sc` (`Sid`, `Cid`, `score`) VALUES ('03', '02', '80.0');
INSERT INTO `test1`.`sc` (`Sid`, `Cid`, `score`) VALUES ('03', '03', '80.0');
INSERT INTO `test1`.`sc` (`Sid`, `Cid`, `score`) VALUES ('04', '01', '50.0');
INSERT INTO `test1`.`sc` (`Sid`, `Cid`, `score`) VALUES ('04', '02', '30.0');
INSERT INTO `test1`.`sc` (`Sid`, `Cid`, `score`) VALUES ('04', '03', '20.0');
INSERT INTO `test1`.`sc` (`Sid`, `Cid`, `score`) VALUES ('05', '01', '76.0');
INSERT INTO `test1`.`sc` (`Sid`, `Cid`, `score`) VALUES ('05', '02', '87.0');
INSERT INTO `test1`.`sc` (`Sid`, `Cid`, `score`) VALUES ('06', '01', '31.0');
INSERT INTO `test1`.`sc` (`Sid`, `Cid`, `score`) VALUES ('06', '03', '34.0');
INSERT INTO `test1`.`sc` (`Sid`, `Cid`, `score`) VALUES ('07', '02', '89.0');
INSERT INTO `test1`.`sc` (`Sid`, `Cid`, `score`) VALUES ('07', '03', '98.0');

DISTINCT 去重关键字

-- 查询哪些学生参加了考试
-- 思路:在成绩表中查询学生id 再看学生表 中的id 是否存在于成绩表。
--  查询成绩表中存在的学生
SELECT sid FROM SC
-- 发现重复数据  使用 distinct 关键字去重。
SELECT DISTINCT sid FROM SC
-- 使用in关键字 建立两表关系 显示学生 姓名和id
SELECT sname,sid FROM student where sid in(SELECT DISTINCT sid FROM SC)

查询成绩表时 ,因为同一个学生选择多门的科目的原因 会出现重复的id 这个时候就需要 distinct 去重。

where 模糊查询

--查询成绩70或者90的学生  in(value1,value2,value3,...) 取值范围:括号内的值;
SELECT sid from sc where  cid=1 and score in(70,90);
--查询名字叫王菊的同学
SELECT sname from student where sname in('王菊')
--查询名字里有王的同学  like  %代表任意数量字符,_代表一个字符
select sname from student where  sname like '王%';

-- 一个字
select sname from student where  sname like '王_';

-- 两个字
select sname from student where  sname like '王__';

-- 成绩表中的成绩在88~90之间的学生姓名  
-- 法1 利用右连接查询
 SELECT sname,cid FROM student s right join sc  ON s.sid=sc.sid WHERE score BETWEEN 88 and 90
-- 法2  利用关键字  ==in ,BETWEEN a and b==  取值范围:a~b之间 
SELECT s.sname
FROM student s
WHERE  s.sid in (SELECT sid FROM sc  WHERE score BETWEEN 88 and 90) 
-- 查询课表信息以及对应的任课老师 tablea a LEFT JOIN tableb b ON a.key and b.key 
select c.* ,t.tname from  course c LEFT JOIN  teacher t ON c.tid =t.tid

-- 查询任课老师以及其所教授的科目  因为课程表中科学没有与教师表建立联系 所以没有返回数据--right JOIN 
select t.*,c.cname  from  course c right JOIN  teacher t ON c.tid =t.tid
--查询没任课教师的课程 
SELECT cname  from course c LEFT JOIN teacher t ON   c.tid =t.tid WHERE tname is NULL;

--查询没有教授课程的教师
SELECT tname from teacher t LEFT JOIN course c ON   c.tid =t.tid WHERE Cname is NULL;

-- 查询语文课成绩在七十分~八十分之间的学生姓名
-- 思路:  建立右连接查询,以sc为右表 显示右表所有数据以及左表中与右表匹配的数据  条件 语文成绩的编号(cid)为1且  80>score>70 
SELECT Sname,score,cid FROM student s right JOIN sc sc ON s.Sid=sc.Sid WHERE cid=1 and sc.score between 70 and 80;


-- 查询 语文的科目 学生姓名,任课老师 以及 学生分数  无穷连接用了三个连接查询一个判断
SELECT s.sid,sname '学生姓名',c.cname '课程名称',t.tname '教师',sc.score '分数'
FROM student s 
LEFT join sc sc
on s.sid =sc.Sid
INNER JOIN course c
ON c.cid =sc.cid
INNER JOIN teacher t
ON t.tid =c.tid
WHERE cname ='语文'

左连接:返回左表所有数据,右表中返回与左表建立联系的行 .
右连接:返回右表所有数据,左表中返回与右表建立联系的行 .

多表连接查询怎么办?

从前面的表中找到与后面的表相同的key 写在on后面即可


posted @ 2020-12-17 17:28  margusd  阅读(125)  评论(0)    收藏  举报