SQL语句是一个程序员的基本技术要求,很多笔试中SQL的分值甚至达到了50%。所以作为各种和面试官聊骚的小白,为了在人生第一家公司站稳脚跟,我决定撸了这本书--《SQL Cookbook》
这本书所有的数据库都是RDBMS数据库,即关系数据库管理系统。
与之对应的还有NOSQL非关系数据库。
第一章:检索记录
- 从表中检所所有行和列
- 使用“*”查找所有
- 列出所有标签(推荐,虽然性能相同,但是方便读代码的人理解)
- 从表种检索部分行
- 使用where添加条件语句
- 查找满足多个条件的行
- and并列条件
- or或者条件
- 从表中检所部分列
- 在select后面加上所需要检索的标签,而不使用“*”
- 为列取有意义的名称
- 使用 “原名 as 别名” 添加别名
- 在where子句中引用区别名的列
- 将select作为内联接,嵌套起来,就可以引用其中的别名了
- 内连接多用于:
- 聚集函数
- 标量子查询
- 视图函数
- 别名
- 关键词优先级:from>where>select
- 连接列值
- DB2.Oracle,PostgreSQL:
- 使用双竖线作为连接运算符 ||
- MySQL:
- 使用concat函数 select concat(A,'连接词',B)
- SQL Server:
- 使用加号作为连接运算符 +
- DB2.Oracle,PostgreSQL:
- 在select语句中使用条件逻辑
- case的语法:
- case when 条件A Then 结果A When 条件B 结果B ........ else 结果N end
- 如果省略else,对于不满足判断条件的会返回null
- case的语法:
- 限制返回的行数(不关心顺序)
- DB2:
- 使用fetch first 行数 rows only
- MySQL和PostgreSQL:
- litmit 行数
- Oracle:
- where rownum <=行数
- SQL server:
- 使用top来限制返回行数
- 列: select top 行数 * from 表
- DB2:
- 从表中随即返回n条记录
- DB2:
- 使用内置RAND函数,Order By和Fetch
- order by rahnd() fetch first 条数 rows only
- MySQL:
- 使用内置RAND函数,Order By和Limit
- order by rand() limit 条数
- PostgreSQL:
- 使用内置random函数,limit和order by
- order by random() limt 条数
- Oracle:
- 使用DBMS_RANDOM包中的内置函数value,order by和内置函数ROWNUM
- SQL Server:
- 使用内置函数NEWID,TOP,ORDER BY
- DB2:
- 查找空值
- is null
- is not null
- 将空值转换为实际值
- 使用coalesce函数用实际的值来替换空值
- select coalesce(标签,非空值)
- 按模式搜索
- 使用like运算符和sql通配符 “%”
- %分为 “%字符” “%字符%” “字符%” 三中位置,可以匹配不同的位置
补充:
在使用left jion时,on和where条件的区别如下:
1、 on条件是在生成临时表时使用的条件,它不管on中的条件是否为真,都会返回左边表中的记录。
2、where条件是在临时表生成好后,再对临时表进行过滤的条件。这时已经没有left join的含义(必须返回左边表的记录)了,条件不为真的就全部过滤掉。