第1课 了解SQL
简单介绍了sql,和dbms,无重点。
第2课 检索数据
重点:select语句,distinct,limit,注释
1. select 语句如果没有明确排序查询结果,那么返回的数据没有特定的顺序。返回数据的顺序可能是数据被添加到表中的顺序,也可能不是。只要返回相同数目的行,就是正常的。
2. 多条 SQL 语句必须用 ; (分号)分隔。
3. SQL不区分大小写
4. SQL语句分行可读性更好
5. 最好不要使用 * 这种通配符 select 表中所有的列
6. distinct 的使用。 distinct 关键字作用于所有的列,不仅仅是跟在其后的那一列。
7. limit n offset m 的使用。从 第 n 行开始的 m 行数据。(n is 0 based)
(mysql, mariaDB, SQLite 可以简化 LIMIT 4 OFFSET 3 --> LIMIT 4, 3)
8. 注释一般用 '--' 或者 '#' (单行注释) 或者 '/* */' (多行注释)
第3课 排序检索数据
重点:order by
1. order by 应该是 select 语句中最后一条子句; 它也可以通过没有被 select 的列进行排序
2. 如何按照多个列排序。 需要理解的是下面列子中只有在多个行具有相同的 prod_price 值时才对产品按照 prod_name 进行排序。如果 prod_price 列中所有值都是唯一的,则不会按照 prod_name 排序。
select prod_id, prod_price, prod_name from Products order by prod_price, prod_name
3. 按照列位置排序,(坦白讲我觉得这个一般不会用到)
select prod_id, prod_price, prod_name from Products order by 2, 3;
select 清单中指定的选择列的相对位置排序。 order by 2 表示按照 select 清单中的第二个列 prod_price 进行排序。order by 2, 3 同理 order by prod_price, prod_name。
好处就是不用重新输入列名。缺点(1)列名错用 (2)如果对select清单做了更改,这里容易出错。还有就是如果需要排序的列不在 select 清单中,就肯定不能用。
4. 指定升序降序 asc 和 desc。如果在多个列上进行排序,一定要对每一列指定 desc 或者 asc。
5. 对文本数据进行排序的时候,A 和 a 相同吗?a 是排在 B 之前还是 Z 之后? 这个取决于数据库的设置方式。在 dictionary 排序顺序中, A 和 a 被视为是相同的,这是大多数默认的排序方式。如果需要改需要 DBA 改设置。