SQL学习笔记(一)
数据库管理软件分类
关系型:如sqllite,db2,oracle,access,sql server,MySQL(sql语句通用)
非关系型:mongodb,redis,memcache
可以简单的理解为:关系型数据库需要有表结构,非关系型数据库是key-value存储的,没有表结构
SQL语句结构:SELECT …FROM…WHERE…GROUP BY…HAVING…ORDER BY
机器执行顺序:FROM…WHERE…GROUP BY…HAVING…SELECT…ORDER BY…
Join的用法
如图,SQL的join主要分为内连接、外连接和交叉连接三部分:
- 内连接:inner join ,产生的结果是A和B的交集(相同列里面的相同值),内连接查询能将左表和右表中能关联起来的数据连接后返回,返回的结果就是两个表中所有相匹配的数据;
select * from A inner join B on A.n = B.n; - 外连接:outer join ,外连接可以依据连接表保留左表,右表或全部表的行为而分为左外连接右外连接和全连接;
3.1. 左连接:Left Join,产生表A的完全集,而B表中匹配的则有值(没有匹配的则以null值取代)
3.2. 右连接:Right Join,产生表B的完全集,而A表中匹配的则有值,不符合的置空
3.3. 全连接:Full Join,产生的结果是A和B的并集
select * from A left(right/full) join B on A.n= B.n; - 交叉连接:cross join ,又可以称为笛卡尔连接,返回两个集合的笛卡尔积;
注意:交叉连接后只能跟where,不能跟on。 - 另外,还有一种连接,叫做自然连接(natural join):自然连接将表中具有相同名称的列自动进行匹配,自然连接不必指定任何同等连接条件也不能认为指定哪些列需要被匹配,自然连接得到的结果表中,两表中名称相同的列只出现一次。
select * from A natural join B;
常见SQL Join
下图可以直观看出SQL语句最常见的join联合方式:
Join的注意问题
- LEFT JOIN 或 RIGHT JOIN 可以嵌套到 INNER JOIN 语句中,INNER JOIN 语句不能嵌套到 LEFT JOIN 或 RIGHT JOIN 语句中。