2021-03-19

3.19 SQL语句

  1. where后面只能跟列

    语法:

    select 列名称 from 表名称 where 列 运算符 值;

    SQL 使用单引号来环绕文本值(大部分数据库系统也接受双引号)。如果是数值,请不要使用引号

    这是正确的:
    SELECT * FROM Persons WHERE Year>1965
    
    这是错误的:
    SELECT * FROM Persons WHERE Year>'1965'
    

​ 2.and 和 or 只能在where 的子句中出现,可以把多个条件结合起来

​ 3.in 的作用是允许我们在 where 子句中规定多个值(当条件值不知一个是就需要用到 in )

​ 4.group by的几个疑点

​ 举例 A表:

idnum
a1
b2
c3
a4
b3

​ 疑点1: group by 和 distinct 的区别

​ 答案: distinct会导致全盘扫描,读取所有记录 而group by只需要读取分组的数量的记录,一般来说 group by 的效率 要比 distinct高 。

​ 疑点2:select id ,num from A group by id, num和不加group by为什么结果是一样的

​ 答案:因为 group by 将 id 和 num 分到了一组,除非 id 和 num 的组合完全是一样的才算是一组,从数据显而易见, 没有一组是一样的。

​ 疑点3:select id , num from A group by id;为什么会报错

​ 答案:因为原本和 一个 id 匹配的 num 有多个(比如 a 就有 1 和 4 两个 num),因为 num 没有使用聚合函数,所以 现在 group by 后的 id 没有重复的 无法匹配多个 num 。

今天主要学的是 99 语法 和 92 语法的区别,笔记主要写99语法的

  1. 笛卡尔积 cross join

    99:select 数据 from 数据源1 cross join 数据源2;

    92:select 数据 from 数据源1,数据源2;

  2. 自然连接 natural join 会自动做同名字段/主外键关系字段的等值连接

    99:select * from emp e natural join dept d;

    92: select * from emp e , dept d where e.deptno = d.deptno;

    注意:1.在99语法中的自然连接中相同的字段在结果中会自动只显示一次,92语法中需要加上字段的表来源

    ​ 2.在自然连接中 同名字段不能写限定词

  3. 指定同名字段的等值连接 join … using(同名字段)

    select * from emp e join dept d using(deptno);

    和 自然连接 一样 join…using 帮你自动做等值连接,省略了连接条件的编写

  4. 指定连接条件的等值连接或非等值连接 join … on

    select * from emp e join salgrade s on e.sal between s.losal and s.hisal;

    这种方法 功能 最强大

  5. 多表连接举例

    select *

    ​ from emp e

    ​ join dept d

    ​ on e.deptno = d.depno

    ​ join salgrade s

    ​ on s.sal between s.losal and s.hisal

    ​ where e.deptno = 30;

  6. 以上 natural join ,join using , join on 都是属于内连接 inner join 其中inner被省略了

  7. 若有一些数据不满足连接条件,但是也想显示,可以使用外连接

    外连接将表分为主表和副表,主表中的数据就算不满足连接条件也会全部显示

    92语法:在主表对面的表后加上(+)

    99语法:左连接为left join 右连接为 right join ,在from 的后面,主表在左边就叫左连接,在右边就叫右连接

    举例:select * from epm e1 left join emp e2 on e1.mgr = e2.empno;

    ​ 其中e1为主表

  8. 全连接 full join

    full join 只存在于99语法中,full join 中 两边都是主表

    ​ select * from emp e1 full join emp e2 on e1.mgr = e2.empno;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值