MySQL常用SQL语句:插入更新删除查询(2)

右外连接
以JOIN关键字右边的表为基准,没有匹配的记录则置NULL。从笛卡尔积的角度描述,右连接就是从笛卡尔积中挑出ON子句条件成立的记录,然后加上右表中剩余的记录

select * from student right join sc on student.sno = sc.sno

MySQL常用SQL语句:插入更新删除查询

全外连接
以JOIN关键字左右两边的表为基准,没有匹配的记录则置NULL。从笛卡尔积的角度讲就是从笛卡尔积中挑出ON子句条件成立的记录,然后加上左表中剩余的记录,最后加上右表中剩余的记录。
mysql不支持full join,但可以通过左外连接 + union + 右外连接来实现(left join + union(可去除重复数据)+ right join)

#select * from student full join sc on student.sno = sc.sno
#报错:[Err] 1054 - Unknown column 'student.sno' in 'on clause'
select * from student left join sc on student.sno = sc.sno union select * from student right join sc on student.sno = sc.sno

语法格式:

select * from A left join B on A.id = B.id (where 条件)
union
select * from A right join B on A.id = B.id (where 条件);

c. 自然连接(使用nature join)
自然连接就是USING子句的简化版,它找出两个表中相同的列作为连接条件进行连接。有左自然连接,右自然连接和普通自然连接之分。

select * from student nature join sc

d. 自身连接
顾名思义,自身连接就是一张表,自己和自己连接。(需要使用别名加以区分)

select * from student as student1, student as student2 where student1.sno = student2.sno and student1.sno = 218001

(2) 嵌套查询
首先引入一个查询块的概念,一个 SELECT...FROM...WHERE... 形式的SQL语句称为查询块。当一个查询块的SELECT子句或者WHERE子句中嵌套了另一个查询块的查询语句就称为嵌套查询。最外层的查询称为外层查询或父查询,最内层的查询称为内层查询或子查询。子查询用到了父查询的数据(表、字段)的情况称为相关子查询,相反,如果没用到就称为不相关子查询。 通常嵌套查询与IN、ALL、ANY、EXISTS配合使用。

select sc.sno, sc.cno, sc.grade from sc where sc.sno in (select student.sno from student where student.sno = 218003)

(3) 集合查询
涉及UNION、UNION ALL、INTERSECT、EXCEPT的查询操作就称为集合查询。其中,UNION和UNION ALL都会做并集,但UNION会去除重复的记录。最后,MySQL不支持INTERSECT和EXCEPT。

#student表中性别为女 与 student表中年龄大于19 这两个查询结果作并集
select * from student where sex= '女' union select * from student where age >19

MySQL常用SQL语句:插入更新删除查询

 

6. SQL函数
(1) COUNT() 函数返回匹配指定条件的行数。

select count(*) from student
select count(sno) from student

7. 关于limit

#根据姓名排序,取第一条记录
select * from student order by sname limit 1
#根据id倒序排序,取前2条记录
select * from student order by sno desc limit 2
#从第2条记录往后,返回1条记录
select * from student limit 2, 1

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/6e1c7c3e276509a0893e351853a0e813.html