首页 > 试题广场 >

Mysql中表student_table(id,name,b

[单选题]
Mysql中表student_table(id,name,birth,sex),插入如下记录:
('1004' , '张三' ,'2000-08-06' , '男');
('1009' , '李四', '2000-01-01', '男');
('1010' , '李四', '2001-01-01', '男');
('1006' , '王五', '2000-08-06' , '女');
('1008' , '张三', '2002-12-01', '女');
('1012' , '张三', '2001-12-01', '女');
('1011' , '李四', '2002-08-06' , '女');
执行
select t1.*,t2.*
from (
select * from student_table where sex = '男' ) t1 
right join 
(select * from student_table where sex = '女')t2 
on  t1.name = t2.name ; 
的结果行数是()?
  • 2
  • 3
  • 5
  • 4
主表右连接,关联出一条空值
发表于 2021-12-29 16:39:17 回复(1)
SELECT t1.*,t2.* / SELECT *
FROM (
SELECT * FROM student_table WHERE sex = '男' ) t1 
JOIN 
(SELECT * FROM student_table WHERE sex = '女')t2 
ON  t1.name = t2.name ;

最后结果:
情况一:若为内连接join,则查得四行结果
id    name    birth    sex    id    name    birth    sex
1004    张三    2000-08-06        1008    张三    2002-12-01    
1004    张三    2000-08-06        1012    张三    2001-12-01    
1009    李四    2000-01-01        1011    李四    2002-08-06    
1010    李四    2001-01-01        1011    李四    2002-08-06    
情况二:若为左连接left join,则查得四行结果,同上
情况三:若为右连接RIGHT JOIN,则查得五行结果
id    name    birth    sex    id    name    birth    sex
\N    \N    \N    \N    1006    王五    2000-08-06    
1004    张三    2000-08-06        1008    张三    2002-12-01    
1004    张三    2000-08-06        1012    张三    2001-12-01    
1009    李四    2000-01-01        1011    李四    2002-08-06    
1010    李四    2001-01-01        1011    李四    2002-08-06    

总结:
1)不论左右连接,两表排序都是先写的放在左边,后写的放在右边
2)左右连接中,以谁为主表,则其信息全部保存。从表中有多于一项符合条件的,则额外重复一次主表从而列出全部从表情况

发表于 2022-02-20 16:32:46 回复(0)
右连接,所有主表有四条数据,然后李四有两条(一对二)所以五条数据
发表于 2021-12-29 15:37:53 回复(1)
右连接以右表为主 左连接以左表为主
发表于 2022-04-19 23:01:38 回复(0)
发表于 2021-12-15 16:25:12 回复(0)
我宣布我是数据库之王
发表于 2023-05-29 16:22:01 回复(0)
不应该是4个吗
发表于 2021-12-28 21:48:35 回复(3)
?
发表于 2021-12-19 10:06:11 回复(0)
右连接,所以包括王五
发表于 2021-12-18 01:12:01 回复(2)