本篇文章主要是给已经有了mysql基础(一丢丢基础也行)的同学用来查漏补缺的,主要记录了一些常用方法以及它们的一些注意点(都是踩坑的教训),同时也记录了自己对一些概念的理解,比如分组啊,内连接、外链接等等,希望各位道友不吝赐教,大家一起交流进步!
安装这里转载一篇别人写的博客吧,写的非常详细大家可以参照她的
安装MySQL教程
select 字段1 【别名1】,字段2 【别名2】from 表【where 筛选条件】
注意:数据库的执行顺序并不是从select开始一直执行到末尾,它的顺序是这样的。
排序一般是加在sql语句的末尾,它是特别靠后执行的语句,它的执行顺序在select后面
排序语法:order by 属性名 排序方式
排序方式:DESC(降序) ASC(升序)
聚合函数是什么?聚合函数就是对某个属性的多条记录做运算的函数
比如,我们对一张员工表求平均工资,此时一个偌大的员工表查出来却只有一条记录,那就是平均工资 12345(瞎编的数),就是把多条记录的某个属性的值经过运算变成一条记录,就叫聚合函数。
语法:group by 属性名
作用:将选中属性名中值相同的记录划分为一组,比如现在有一个部门表,我们使用了group by 部门后,部门为销售部的是一组,行政部的为一组,这样的逻辑。
注意:使用了group by 语句后,select就只能选择聚合函数和分组用的属性作为我们的列名了,举个例子:
例:当我们用部门作为我们分组的属性时,这时候我们把所有的员工按照部门已经分好了,我们用select来选取需要的属性的时候只能选取部门和一些聚合函数( 像max(工资) count(*)这样的函数)作为我们最后结果的列名。
原因:我个人理解因为当按照部门分好组后,我们应该对这个部门做出操作,比如查询这个部门的平均工资,员工人数等等,如果这时候我们要查某一个员工的姓名,这在逻辑上是不合适的,虽然这样执行不会报错,但它的结果是没有意义的。
+ substr(属性名,起始位置) 和 substr(属性名,起始位置,截取个数) + replace(str, from str, to str) + length() + concat(str1, str2) 连接字符串 + upper(str), lower(str) + trim(str) + lpad(str,len,padStr) rpad(str,len,padStr) + instr(str,substr):获取substr在str第一次出现的索引
+ round(x,d):四舍五入,d代表保留到小数点后第几位 + mod(n,m) + floor:向下取整 + ceil:向上取整 + truncate(n):截断到第n位小数 + round():0-1之间的随机数,取不到1
日期在数据库的使用中是非常重要的,也是非常容易出问题的,下面我们来揭开它神秘的面纱
基本的日期函数:
注意:像"2017-02-21"或"17-02-21"这种字符串可以隐式转化成date格式的数据
version 当前数据库服务器的版本
database 当前打开的数据库
user当前用户
password(‘字符’):返回该字符的密码形式
md5(‘字符’):返回该字符的md5加密形式
语法:
select 查询列表
from 表1 别名
【inner】 join 表2 别名 on 连接条件
where 筛选条件
group by 分组列表
having 分组后的筛选
order by 排序列表
limit 子句;
注意:内连接是取两个表中符合条件j记录的交集(针对记录而不是属性,许多同学错以为是两个表中列的交集,这是不对的,而是行的交集)
首先需要注意的是外连接是存在主从关系的,主表的记录会被完整的保留等待后序的筛选
主表与从表之间的关系如上图所示,若在连接时主表中的部分记录与从表无法匹配,则该记录关于从表的属性的值都为null。
select d.department_id,d.department_name,e.* from departments d LEFT join employees e ON d.department_id = e.department_id
结果:
可以看到后面几行关于employee的信息都是null,这就是基于上面所说的理论。
外连接分为左外连接left join 和右外连接 right join 它们只是用来声明谁是主表谁是从表而已,原理跟上面说的一样。