上节回顾
查询语句
select distinct * | 字段 from tabe
where逻辑运算符 成员运算符 比较运算符 like between exists
group by分组 为了统计 个数count max min avg sum
having分组后进行过滤
order by 用于排序,默认升序asc desc
limit第一个指定起始位置 第二个每一页的个数
子查询
子查询作为外层查询的条件
同一个需求 可以用子查询也可以用内连接
连表查询
笛卡尔积,
重复数据 显示指定字段
混乱 限制条件 (where 从表的外键 = 主表的主键)
内连接
本质上就是笛卡尔积查询.
仅显示匹配成功的记录
外连接
没有匹配也会显示
左外连接 左边要全部显示
右外连接 右边要全部显示
全外连接查询 无论是否匹配两边的记录都要全部显示 可以通过union 将左右合并 去除重复
union all 合并 但是不去除重复
必须保证字段个数相同才能合并
高级部分
1.视图
什么是视图,
本质上是一个虚拟的表,即看得见但是不实际存在
为什么需要虚拟表????
使用场景
场景1:
我们希望某些查询语句只能查看到某个表中的一部分记录 ,就可以使用视图
场景2:
简化sql语句的编写
使用方法:
语法:
create [or replace] view view_name as 查询语句;
or replace 如果视图已经存在了 就替换里面的查询语句;
# 修改视图
alter view view_name as 新的语句;
# 删除视图
drop view view_name;
# 查看
desc view_name;
show create view view_name;
# 限制可以查看的记录
create table salarys(id int,name char(10),money float);
insert into salarys values(1,"张三丰",50000),(2,"张无忌",40000);
# 创建视图 限制只能查看张无忌的工资
create view zwj_view as select *from salarys where name = "张无忌";
# 简化sql编写
create table student(
s_id int(3),
name varchar(20),
math float,
chinese float
);
insert into student values(1,'tom',80,70),(2,'jack',80,80),(3,'rose',60,75);
create table stu_info(
s_id int(3),
class varchar(50),
addr varchar(100)
);
insert into stu_info values(1,'二班','安徽'),(2,'二班','湖南'),(3,'三班','黑龙江');
# 查询班级和学员的对应关系做成