1.引言
在开始sql学习之前,其实我之前有系统性的学习过数据库的知识,大概是在2年前。去年整整一年的时间从事的工作与数据库没有什么关联,现在重新开始一份开发工作,数据库学习是必要的技能,于是又来重头学习一下,就算"温故而知新"吧。
注:本次学习的资料来自于《SQL基础教程》第二版,正文主要是对本书学习的记录,常见的或自己非常熟悉的知识就不在本文列出了。
2.基础篇
第0章
主要讨论的是讨论的是如何搭建SQL学习环境,这个可以在网上搜索一大片的教程,搜索关键字“MySQL安装”、“MySQL常见客户端”,我这里是使用的Navicat,也是现在常用的工具之一。
第1章
SQL语句极其种类
DDL数据定义语言,主要用来创建和删除数据库或者表,常用关键字:CREATE,DORP,ALTER,其特点为一旦执行就不能撤销,事务中对于DDL语句也无法撤回。DML数据操作语言,主要用来查询和变更表中内容,常见的增删改查。DCL数据控制语言,用来确认用户对数据的变更,如提交事务,回滚事务,对用户进行赋权操作等。
表中数据类型的指定
数字integer,字符char和varchar,日期date。char与varchar的区别,char(4),如存储'ab',则表中实际存储的为'ab',不足4的则用空格进行占位,varchar(4),如存储'ab',则表中实际存储为'ab'。
第一章需要掌握的sql语句
数据库创建:
DROP DATABASE IF EXISTS 数据库名;
CREATE DATABASE 数据库名 DEFAULT CHARACTER SET utf8;
表创建:
CREATE TABLE user (
id int(11) NOT NULL AUTO_INCREMENT,
name varchar(255) DEFAULT NULL,
password varchar(255) DEFAULT NULL,
PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
第二章
第三章
key | value |
1 | 1 |
2 | null |
第四章
增删改查,其中新增时可以从别的表中直接拷贝选取的列,需要注意的是新表列的属性需要与旧表一致,在拷贝旧表时也可以使用select where 对数据进行筛选。
事务:这里这是简单的提了事务的特性,即ACID,开始事务start transaction,提交事务commit,回滚事务rallback,注意DDL语句无法进行回滚。
第五章
视图,把一组需要经常使用的select语句可以保存为视图,这样每次访问时使用视图名即可,不需要重新书写sql语句。
子查询,将用来定义视图的select语句直接用于from子句中。sql此时的执行顺序为优先执行子查询中的语句。
标量子查询:必须只能返回一条结果,能够用于的地方有select,group by,having,order by。
关联子查询,用A表关联A表进行查询,还需要学习
第六章
算术函数:+-*/,ABS()绝对值,MOD(被除数,除数)取余,ROUND(对象数值,保留的小数点)
字符串函数:concat(str1,str2,..)拼接,LENGTH(str)字符串长度,LOWER(str)小写,REPLACE(原字符,被替换字符,替换内容),SUBSTRING(str FROM 起始位置 FOR 截取的个数),UPPER大写转换
日期函数:CURRENT_DATE当前日期,CURRENT_TIME当前时间,CURRENT_TIMESTAMP当前日期和时间,EXTRACT(元素日期 FROM 日期)截取日期
转换函数:CAST(转换当前的值 AS 转换后的值类型)
谓词:LIKE,模糊查询 '%a' '%a%' 'a%',列 between a and b,IS NULL 为空,IS NOT NULL不为空,IN 为OR的简单用法。EXISTS?还需要学习
CASE:CASE WHEN 当满足条件 THEN 以什么结果进行显示 ELSE 其他情况时进行显示 END,需要进一步学习。
第七章
两表并集, A UNION B,将两表进行合并且去重复。需要注意的事项:两表的列数与类型必须一致,ORDER BY 需要放在最后使用一次。 UNION ALL 两表合并不去重,效率比UNION要高,因为少了一步去重。
联结:
内联结:select * from a inner join b on a.id=b.id,其中on为两表之间关联的键,也就是将两表联结条件。
外联结:
左外联结:select * from a left join b on a.id=b.id
右外联结:select * from a right join b on a.id=b.id
on的含义和内联结一致,不同之处在于会以join前的表为主表,查询除了两表共有的结果外还会把主表中剩余的部分也进行显示。
其余章节
第8章的主窗口函数与GROUPING运算符MySql不支持,本次主要是学习MySQL所以并没有进行深入学习。第九章主要讲述的是如何使用JAVA程序连接数据库,这个部分已经熟悉,所以不再学习。