SQL:INNER JOIN,LEFT JOIN,RIGHT JOIN,哪一个连接查询更合你意

SQL语句
340
0
0
2022-04-27
标签   SQL语句

SQL语言中连接查询有内连接,左连接,右连接和全连接(INNER JOIN,LEFT JOIN,RIGHT JOIN,FULL JOIN)。

软件测试人员经常会去查询数据库的数据,然后进行比对,经常做一个执行操作后,数据库多个表的数据都会发生改变,而测试人员只需要关注每个表中某个或某几个字段的数据是否如预期结果,如果每一个表分别查看,特别耗时,那这时测试人员可以根据表中关联字段将二个表或二个以上的表进行连接查询,将需要关注的字段查询到一个结果集中显示,这样会给测试人员省时,方便不少。

但是你还记得连接查询是怎么使用的么?他们之间的区别又是什么?

SQL:INNER JOIN,LEFT JOIN,RIGHT JOIN,哪一个连接查询更合你意

连接查询/多表查询

假设有二张表t1和t2,

t1的字段(id,name,age)

t1表的数据:

SQL:INNER JOIN,LEFT JOIN,RIGHT JOIN,哪一个连接查询更合你意

t1表的数据

t2的字段(id,class,score)

t2表的数据:

SQL:INNER JOIN,LEFT JOIN,RIGHT JOIN,哪一个连接查询更合你意

t2表的数据

(1).查询出学生的姓名,年龄和分数

mysql> SELECT name,age,score

FROM t1 INNER JOIN t2 ON t1.id = t2.id;

SQL:INNER JOIN,LEFT JOIN,RIGHT JOIN,哪一个连接查询更合你意

INNER JOIN 可以省略写成JOIN

注意:这就是内连接,返回的行都是二个表相匹配的数据

mysql> SELECT t1.id,name,age,score

FROM t1 LEFT JOIN t2 ON t1.id = t2.id;

SQL:INNER JOIN,LEFT JOIN,RIGHT JOIN,哪一个连接查询更合你意

注意:这是左连接,除了返回二个表相匹配的数据,还会返回左表多余的数据,与右表不匹配以null显示

mysql> SELECT t1.id,name,age,score

FROM t1 RIGHT JOIN t2 ON t1.id = t2.id;

SQL:INNER JOIN,LEFT JOIN,RIGHT JOIN,哪一个连接查询更合你意

注意:这是右连接,除了返回二个表相匹配的数据,还会返回右表多余的数据,与左表不匹配以null显示

mysql中只有内连接、左连接和右连接,没有全连接

内连接:返回二个表关联字段共同都有的数据

左连接:除了返回内连接的数据,还返回左表多余的数据,左连接只要记住左表为大

右连接:除了返回内连接的数据,还返回右表多余的数据,右连接只要记住右表为大

SQL:INNER JOIN,LEFT JOIN,RIGHT JOIN,哪一个连接查询更合你意

(4)假设是三表连接,内连接如下写法,其它连接相似

SELECT * FROM t1 JOIN t2 ON t1.id= t2.id JOIN t3 ON t2.id = t3.id;

上面的写法等于下面这种写法:

==SELECT * FROM t1,t2,t3

WHERE t1.id = t2.id AND t2.id =t3.id;

王豆豆更喜欢下面这种写法,更简单,更快。

接下的多表查询都将使用这种方法。

现在有三张表,表结构如下:

班级(class)表(学号(id),姓名(name),班级(class),年龄(age))

课程(course)表(课程名(cname),课程号(cno))

分数(score)表(学号(xuehao),课程号(scno),分数(score))

(5)查询出学员的姓名,班级,课程名以及相应课程的分数,并以分数进行降序排列

SELECT c.name,c.class,co.cname,s.score

FROM class c,course co,score s

WHERE c.id = s.xuehao AND co.cno = s.scno

ORDER BY score desc;

SQL:INNER JOIN,LEFT JOIN,RIGHT JOIN,哪一个连接查询更合你意

(6)查询出学员姓名以张开头的学员姓名,课程,分数

SELECT c.name,c.class,co.cname,s.score

FROM class c,course co,score s

WHERE c.id = s.xuehao AND co.cno = s.scno AND c.name like '张%';

SQL:INNER JOIN,LEFT JOIN,RIGHT JOIN,哪一个连接查询更合你意

(7)查询学员分数大于70的学员姓名,班级,课程

SELECT c.name,class,cname

FROM class c,course co, score s

WHERE c.id = s.xuehao AND co.cno=s.scno AND s.score > '70';

SQL:INNER JOIN,LEFT JOIN,RIGHT JOIN,哪一个连接查询更合你意

(8)查询学员班级为T1001的学员课程号

SELECT s.scno

FROM class c,score s

WHERE c.id = s.xuehao AND c.class = 'T1001';

SQL:INNER JOIN,LEFT JOIN,RIGHT JOIN,哪一个连接查询更合你意

(9)查询学员姓名包含王的学员分数,并以降序的方式排列

SELECT s.score

FROM class c,score s

WHERE c.id = s.xuehao AND c.name LIKE '%王%'

ORDER BY score DESC;

SQL:INNER JOIN,LEFT JOIN,RIGHT JOIN,哪一个连接查询更合你意

(10)查询年龄不在25到27之间的学员姓名,课程编号,分数

解题步骤:

1.查询出年龄不在25到27之间学员信息

SELECT * FROM class WHERE age NOT BETWEEN 25 AND 27;

2.查询出学员的姓名,课程编号,分数

SELECT name,scno,score FROM class c,score s

WHERE c.id = s.xuehao;

3.合并

SELECT name,scno,score FROM class c,score s

WHERE c.id = s.xuehao AND (age NOT BETWEEN 25 AND 27);

SQL:INNER JOIN,LEFT JOIN,RIGHT JOIN,哪一个连接查询更合你意

未经王豆豆同意,不予转载,如要转载,请注明出处。