子查询:
在一个 select 语句中,嵌入了另外一个 select 语句, 那么被嵌入的 select 语句称之为子查询语句
主查询:
主要查询的对象,第一条select语句
主查询和子查询的关系:
子查询是嵌入到主查询中,子查询是辅助主查询的,要么充当条件,要么充当数据源,子查询是可以独立存在的语句,是一条完整的 select 语句
子查询分类:
标量子查询: 子查询返回的结果是一个数据(一行一列) 一般使用的是比较运算符
select * from student where age > (select avg(age) from student);
列子查询: 返回的结果是一列(一列多行) 一般使用in
select * from student where tid in (select id from teacher);
行子查询: 返回的结果是一行(一行多列) 需求: 查找班级年龄最大,身高最高的学生
行元素: 将多个字段合成一个行元素,在行级子查询中会使用到行元素
select * from student where (height,age) = (select max(height),max(age) from student);
完整的select语句:
select distinct *
from 表名
where ...
group by ... having ...
order by ...
limit start,count
执行顺序为:
from 表名
where ....
group by ...
select distinct *
having ...
order by ...
limit start,count
实际使用中,只是语句中某些部分的组合,而不是全部。
外键:
外键用于与另一张表的关联。是能确定另一张表记录的字段,用于保持数据的一致性。比如,A表中的一个字段,是B表的主键,那他就可以是A表的外键。
由数据库自身保证数据一致性,完整性,更可靠,因为程序很难100%保证数据的完整性,而用外键即使在数据库服务器当机或者出现其他问题的时候,也能够最大限度的保证数据的一致性和完整性;设置外键约束的两个表之间会具有父子关系,即子表中外键的字段的取值范围由父表所决定;设置外键一定程度上降低数据库的速度;子表的外键字段的数据类型和父表中要一致。
视图:
通俗的讲,视图就是一条SELECT语句执行后返回的结果集。所以我们在创建视图的时候,主要的工作就落在创建这条SQL查询语句上。视图是对若干张基本表的引用,一张虚表,查询语句执行的结果,不存储具体的数据(基本表数据发生了改变,视图也会跟着改变);方便操作,特别是查询操作,减少复杂的SQL语句,增强可读性;
创建视图:
create view 视图名称 as select 语句; 定义视图建议以v_开头
查看视图:
show tables;
查询视图:
select * from v_s;
删除视图:
drop view 视图名称;
修改视图:
create or replace view v_s as select id,name from student;
视图的作用:
提高了重用性,就像一个函数, 对数据库重构,却不影响程序的运行, 提高了安全性能,可以对不同的用户, 让数据更加清晰