《SQL必知必会》第11课到第15课笔记

11、使用子查询

  1. 子查询subquery:嵌套在其他查询中的查询
  2. 使用简单的子查询嵌套:
    SELECT [COL1] FROM [TABLE] WHERE [COL2] IN (SELECT [COL2] FROM [TABLE] WHERE [COL3] = [VAL])
    – 作为子查询的语句只能查询单个列,否则出错
  3. 在子查询使用计算字段:
    SELECT [COL1], (SELECT COUNT(*) FROM [TABLE1] WHERE [TABLE1].id= [TABLE2].id) AS [COL2] FROM [TABLE2]
    – 完全限定列名:指定表名和列名,避免混淆

12、联结表

  1. 笛卡尔积:没有联结条件的表返回的结果,又称作叉联结cross join
  2. 等值联结内联结:由INNER JOIN+ON子句或WHERE子句给出
    SELECT [COL1], [COL2] FROM [TABLE1] INNER JOIN [TABLE2] ON [TABLE1].id=[TABLE2].id
    SELECT [COL1], [COL2] FROM [TABLE1], [TABLE2] WHERE [TABLE1].id=[TABLE2].id
    – 以上查询等价
  3. 多个表的联结:
    – 等价与嵌套的子查询
    – 应该避免过多的表联结,性能会下降

13、创建高级联结

  1. 使用表别名:缩短语句;可用于SELECT语句的各部分
  2. 自联结self-join:用来替代处理相同表的子查询
  3. 自然联结natural join:使得每列只出现一次
  4. 外联结outer join:包含没有关联行的行
    – left outer join:选中左边表的所有的行
    – right outer join: 选中右边表的所有的的行
  5. 使用带聚集函数的联结
    SELECT [COL1], COUNT([COL2]) FROM [TABLE1] INNER JOIN [TABLE2] ON [TABLE1].id=[TABLE2].id
    –个人认为与平常的使用方法无异

14、组合查询

  1. UNION操作符:组合多个SQL查询
    – 每个查询必须包含相同的列、表达式或聚集函数,但次序无须一致
  2. 包含或删除重复的行:
    – UNION操作符默认删除重复的行,这与WHERE一致
    – UNION ALL 操作符可以输出重复的行,WHERE无法做到
  3. 对组合查询的结果排序:
    – 只能使用一条ORDER BY子句
    – 只能位于最后一条SELECT语句之后

15、插入查询

  1. INSERT:进行行插入
  2. 插入完整的行:
    INSERT INTO [TABLE] VALUES ([VAL1]....)
    INSERT INTO [TABLE]([COL1]....) VALUES ([VAL1]....)
    – 第二种方式更保险,可以适应表结构的变化
  3. 插入部分行:
    – 可以不提供某列和某列的值
    – 前提是该列允许NULL值或者有默认值
  4. 插入检索出的数据:INSERT SELECT
    INSERT INTO [TABLE1] ([COL1]....) SELECT [COL1]... FROM [TABLE2]
    – DBMS关注的是两个语句中列名的位置,而不是列名是否相同
    – 其中SELECT可以使用WHERE语句
  5. 将数据复制到全新的表:SELECT INTO
    SELECT * INTO [TABLE1] FROM [TABLE2]
    CREATE TABLE [TABLE1] AS SELECT * FROM [TABLE2]
    – 后者是MySQL、SQLite等的语法
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值