连接查询、视图、备份恢复和过程与函数

回顾

增删改

-- 增
insert into(1,2 ...) values (1,2 ...),(1,2 ...);

-- 改
updateset1=新值1,2=新值2 ... where 条件

-- 删
delete fromwhere 条件
truncate table

-- 假设一张员工 emp 表,员工编号 empno, 员工姓名 ename,员工工资 sal,部门编号 deptno

-- 查询全部
select * from emp;

-- 查询某些列
select empno, sal from emp;

-- 查询工资 >=2000 并 <=3000 的员工
select * from emp where sal>=2000 and sal<=3000;
select * from emp where sal between 2000 and 3000;

-- 查询编号等于 1 或 2 或 3 的员工
select * from emp where empno in (1,2,3);
select * from emp where empno=1 or empno=2 or empno=3;

-- 查询姓名以 sm 开头的员工(默认的表不区分值的大小写)
select * from emp where ename like 'sm%';

-- 查询工资为 null 的员工
select * from emp where sal is null;

-- 计算所有员工的工资总和
select sum(sal) from emp;

-- 计算所有员工的人数
select count(*) from emp;

-- 查询人数 >= 6 人 的部门编号
select count(*),deptno from emp group by deptno having count(*)>=6;

-- 查询工资排名前 3 的员工
select * from emp order by sal desc limit 3;

约束有哪几种,作用及语法分别是什么

  • primary key
  • not null
  • unique
  • constraint 约束名 foreign key(外键列名) references 表名(主键列名)

表关系有哪几种?如何用主外键描述这几种表关系

  • 一对一, 外键建在任意一方,外键+唯一约束
  • 多对一,外键建在多的一方
  • 多对多,引入中间表,中间表的两个外键分别引用剩余两表的主键

今日内容

1. 连接查询(*)

内联

select ... from1,2 where 12的连接条件;

select ... from1,2,3 where 12的连接条件 and 23的连接条件;

select ... from1 inner join2 on 12的连接条件;

select ... from1 inner join2 on 12的连接条件 inner join3 on3的连接条件;

外联

select ... from1 left join2 on 12的连接条件;

select ... from1 left join2 on 12的连接条件 left join3 on3的连接条件;

子查询

  • 情况1: 就是一个值

  • select * fromwhere= (子查询)
    
  • 情况2: 就是多个值

  • select * fromwherein (子查询)
    
  • 情况3:子查询如果是多行多列,可以视为一张临时表,可以与其它表做表连接

  • select * from 真实表 e1,(子查询) e2 where 连接条件; // 表别名必须取
    
  • 第二种情况的另外解法:SELECT o.* FROM orderlist o, USER u WHERE o.uid=u.id AND u.name IN(‘张三’,‘李四’);

  • 第三种情况的另外解法:SELECT u., o. FROM orderlist o, USER u WHERE o.uid=u.id AND o.id > 4;

自联

  • 把一张表拆为两张表来看
  1. 查询商品类别的名称,以及此类别下商品的个数
11. /* category 
       product 

*/
SELECT * FROM category c, 
  (SELECT cid,COUNT(*) FROM product GROUP BY cid) b
WHERE
   c.id=b.cid;
  1. 查询用户张三能够看到的商品信息,
    以及该商品的类别名称,
    以及这个用户所有的订单编号

    SELECT u.*,p.name,c.name,o.number FROM
    USER u,
    us_pro up,
    product p,
    

category c,
orderlist o
WHERE u.id=up.uid AND up.pid=p.id AND p.cid=c.id AND o.uid=u.id AND u.name=‘张三’;
```

2. 视图(了解)

虚拟表 - 并不真正存储数据,查询视图其实是执行了视图对应的查询语句而已

3. 备份恢复(了解)

D:\mysql-5.7.30-winx64\bin>mysqldump -uroot -p db2 > d:\db2.sql
Enter password: ****

D:\mysql-5.7.30-winx64\bin>mysql -uroot -p db5 < d:\db2.sql
Enter password: ****

4. 过程与函数(了解)

  • procedure 没有返回值,通过输出参数返回结果
    • 重用 sql 代码
    • 减少网络传输,提高效率
    • 不通用
delimiter $
create procedure 名字(参数列表) 
begin
      sql 语句
end$
delimiter ;

定义变量并赋值

declare 变量名 类型 [default 默认值];

set 变量名 =;

selectinto 变量名 from;

条件判断

if 条件1 then sql1
elseif 条件2 then sql2
...
else sqln
end if;

参数传递

create procedure(输入参数名 类型, out 输出参数名 类型) 
begin
	set 输出参数名 =; -- 返回方法1
    selectinto 输出参数名 from-- 返回方法2
end;
  • function 必须有返回值,利用返回值返回结果
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值