SQL复习day1

SQL

条件查询

关键字
BETWEEN…AND…在某个范围
NOT BETWEEN…AND…不在某个范围
IN(…)在一个列表
NOT IN(…)不在一个列表

注意列表和范围得区别

注意 我们的SQL关键字如 SELECT、WHERE、AND、OR都是大写的,但SQL其实是兼容写成select、where小写的。***大写这些关键字***有助于我们把关键字和你的表名,列名区分开,让SQL更容易理解。

条件查询(pt.2)

如果属性是字符串,我们会用到一些字符串相关的操作符号,其中LIKE(模糊查询)和%(通配符)

操作符解释example
=完全相等col_name=“abc”
!=不等于col_name!=“abcd”
LIKE没有通配符等价于 =col_name LIKE ‘‘abc’’
NOT LIKE没有通配符等价于 !=col_name NOT LIKE “abcd”
%代表0个以上的字符“%AT%” 代表AT前后可以有任意字符
_和%相似,代表1个字符“AT_” 代表AT后可以有一个字符

注意

在字符串表达式中的字符串需要用引号 " 包含,如果不用引号,SQL会认为是一个属性列的名字,如:col_name = color 表示 col_name和color两个属性一样的行 col_name = “color” 表示 col_name 属性为字符串 "color"的行.

查询结果Filtering过滤和sorting排序
  • DISTINCT: 你可以用 DISTINCT 关键字来指定某个或某些属性列唯一返回,因为 DISTINCT 语法会直接删除重复的行。

  • GROUP BY:返回唯一得到行,不过可以对具有相同的属性值的行做一些统计计算。

  • ASC/DESC: ORDER BY column ASC/DESC 这句话的意思就是让结果按照 col_name 列的具体值做 ASC升序 或 DESC 降序。

通过limit选取部分结果

LIMITOFFSET 子句通常和ORDER BY 语句一起使用,当我们对整个结果集排序之后,我们可以 LIMIT来指定只返回多少行结果 ,用 OFFSET来指定从哪一行开始返回。你可以想象一下从一条长绳子剪下一小段的过程,我们通过 OFFSET 指定从哪里开始剪,用 LIMIT 指定剪下多少长度。(从哪里开始剪不包括那里)

列出按上映年份最新上线的4部电影 ;
SELECT * FROM movies ORDER BY year DESC LIMIT 4;

使用JOINS进行多表联合查询

数据库范式

数据库范式是数据表设计的规范,在范式规范下,数据库里每个表存储的重复数据降到最少(这有助于数据的一致性维护),同时在数据库范式下,表和表之间不再有很强的数据耦合,可以独立的增长 (ie. 比如汽车引擎的增长和汽车的增长是完全独立的). 范式带来了很多好处,但随着数据表的分离,意味着我们要查询多个数据属性时,需要更复杂的SQL语句,也就是本节开始介绍的多表连接技术。这样SQL的性能也会面临更多的挑战,特别是当大数据量的表很多的情况下.

如果一个实体(比如Dog)的属性数据被分散到多个数据表中,我们就需要学习如何通过 JOIN连表技术来整合这些数据并找到我们想要查询的数据项.

使用JOINS进行多表联合查询
  • 主键 一般关系数据表中,都会有一个属性列设置为 主键(primary key)。主键是唯一标识一条数据的,不会重复复(想象你的身份证号码)。一个最常见的主键就是auto-incrementing integer(自增ID,每写入一行数据ID+1, 当然字符串,hash值等只要是每条数据是唯一的也可以设为主键. 借助主键(primary key)(当然其他唯一性的属性也可以),我们可以把两个表中具有相同 主键ID的数据连接起来(因为一个ID可以简要的识别一条数据,所以连接之后还是表达的同一条数据)(你可以想象一个左右连线游戏)。具体我们用到 JOIN 关键字。我们先来学习 INNER JOIN.

  • INNER JOIN

    SELECT column, another_table_column, …
    FROM mytable (主表)
    **  INNER JOIN another_table (要连接的表)
        ON mytable.id = another_table.id (想象一下刚才讲的主键连接,两个相同的连成1条) **
    WHERE condition(s)
    ORDER BY column, … ASC/DESC
    LIMIT num_limit OFFSET num_offset;
    

    通过ON条件描述的关联关系;INNER JOIN 先将两个表数据连接到一起. 两个表中如果通过ID互相找不到的数据将会舍弃。此时,你可以将连表后的数据看作两个表的合并,SQL中的其他语句会在这个合并基础上 继续执行(想一下和之前的单表操作就一样了).
    还有一个理解INNER JOIN的方式,就是把 INNER JOIN 想成两个集合的交集。(丢弃的数据如,A表中存在ID为98的数据,而B表中不存在ID为98的数据,则INNER JOIN会将ID为98的数据丢弃)
    在这里插入图片描述

  • 外连接(OUTER JOINS):

INNER JOIN 只会保留两个表都存在的数据(还记得之前的交集吗),这看起来意味着一些数据的丢失,在某些场景下会有问题.真实世界中两个表存在差异很正常,所以我们需要更多的连表方式,也就是本节要介绍的左连接LEFT JOIN,右连接RIGHT JOIN 和 全连接FULL JOIN. 这几个 连接方式都会保留不能匹配的行。

原理:在表A 连接 B, LEFT JOIN保留A的所有行,不管有没有能匹配上B 反过来 RIGHT JOIN则保留所有B里的行。最后FULL JOIN 不管有没有匹配上,同时保留A和B里的所有行。LEFT JOIN 和 RIGHT JOIN以及FULL JOIN都可以从字面上去理解,保留左表所有数据,保留右表所有数据,保留所有表的所有数据。

最后,给大家推荐一个sql的自学网站:http://xuesql.cn/
上面有关于sql的学习文章以及相关练习题,是学习和复习sql一个很好的网站!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

鹤林村菠萝皮

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值