数据库特训系列1——基础拾遗
每天学习一段时间发现,琐琐碎碎的学习,对日常的工作帮助很大,避免了之前踩过的各种坑;
但,对于这些坑是如何形成的,深挖一会儿就不行了。
思考之下,发现,平时的所学如同学习如何填坑;
系统性的学习,才是,从断面看这个坑,时间跨度上看这个坑的形成和填上,也可以说,是升级我们的铲子;
那句话怎么说来着,手里有了锤子,看什么都是钉子;
所以,我们从基础开始;
之前也写过“必知必会”的读后感,长久不用,现在又需要再拾点东西了
最基础部分几个问题想一下:
什么是数据库? 什么是sql? 什么是MySQL?这个其实就是整个数据库最基础的地方,却总是让大神都能卡下壳的时候;
其实简单理解就好:
数据库就是数据的仓库,也就是存储数据的地方(软件?); sql,结构化查询语言,用于和数据库通信; MySQL是一种DBMS是不是什么都看得懂,又什么都不懂,那就对了;
继续
数据库用于存储数据,存储那种可以具有逻辑关系的数据,在数据库中,所有数据被结构化描述; sql,是一种语言,语句简单但功能强大,用于和数据库通信,实现对数据库的各种操作,是给数据库下命令的方式; MySQL是一种DBMS,DBMS是数据库管理系统,通常就是我们说的数据库;差不多了吧,那再具体一点,一些其他概念:
列:某一个字段,数据的一个特性; 行:特定某一条数据; 表:=列+行;数据的结构化清单; MySQL是属于基于客户机+服务器的,数据库操作实际发生在服务器,对客户透明;客户机可以是MySQL提供的工具(命令行工具),可以是各种语言:PHP,JAVA等(注意这里概念的理解) SHOW命令的使用:SHOW DATABASES; SHOW TABLES; SHOW STATUS; ## 显示服务器状态 SHOW COLUMNS FORM table_name; SHOW CREATE database; SHOW CREATE table; ## 显示创建语句 SHOW WARNINGS; SHOW ERRORS; SHOW GRANTS; ## 显示授权用户SELECT
SELECT是数据库中,最常用的操作了,我们重点说下这个,其他涉及到了的话具体补上;
DISTINCTDISTINCT是不查到重复的行;
需要注意的是,其对多个列的,是要求每个都不一样的才行,对单一没问题,多个有问题,参考:
2.作用于多列
示例2.1
select distinct name, id from A
执行后结果如下:
实际上是根据name和id两个字段来去重的,这种方式Access和SQL Server同时支持。
示例2.2
select distinct xing, ming from B
返回如下结果:
返回的结果为两行,这说明distinct并非是对xing和ming两列“字符串拼接”后再去重的,而是分别作用于了xing和ming列。
指定多个列排序排序按照所规定的顺序;
比如,按照age,gender两列排序,会按照age先排,然后年龄相同的,再按照gender去排;
IN操作符IN操作符的功能几乎和OR是一样的,但我们还是推荐使用IN
更直观; 易管理; IN一般比OR清单执行更快(注意条件) 更加适用于子查询情况下 通配符一般情况下,一定不要放在起始位置,特别慢!!!
GROUP BY等用到聚集类型的,请一定加上GROUP BY;
使用HAVING来过滤GROUP BY;
由此带来SELECT的顺序问题:
SELECT id,COUNT(count),name FROM test_table WHERE id > 100 GROUP BY name HAVING COUNT(count) > 2 ORDER BY id DESC LIMIT 100联结
自联结 = 多个条件查询
自然联结,外部联结什么的好晕,打算留坑
每个都能扯一大堆..我们这一个月好好战一下好吧...