目录
文章目录
MySQL
什么是数据库?什么是数据库管理系统?什么是SQL?他们之间的关系是什么?
数据库:
- 英文单词DataBase,简称DB。按照一定格式存储数据的一些文件的组合。
- 顾名思义:存储数据的仓库,实际上就是一堆文件。这些文件中存储了具有特定格式的数据。
数据库管理系统:
- DataBaseManagement,简称DBMS。
- 数据库管理系统是专门用来管理数据库中数据的,数据库管理系统可以对数据库当中的数据进行增删改查。
- 常见的数据库管理系统:
MySQL、Oracle、 MS SqlServer、 DB2、 sybase等…
SQL:结构化查询语言
- 程序员需要学习SQL语句,程序员通过编写SQL语句,然后DBMS负责执行SQL语句,最终来完成数据库中数据的增删改查操作。
三者之间的关系?
DBMS——执行——>SQL——操作——>DB
MySQL常用命令
退出
- exit
查看MySQL中有哪些数据库?
- show databases;
- mysql默认自带4个数据库。
创建数据库
- create database 数据库名;
使用数据库
- use 数据库名;
查看有哪些表
- show tables;
查看MySQL数据库版本号
- select version();
查看当前使用的数据库
- select database();
数据库最基本单元:表,table
任何一张表都有行和列:
- 行(row):被称为数据/记录。
- 列(column):被称为字段。
- 每个字段都有字段名,数据类型,约束等属性。
SQL语句的分类
- DQL:数据查询语言(凡是带有select关键字的都是查询语句)
select… - DML:数据操作语言(凡是对表当中的数据进行增删改的都是DML)这个主要是操作表中的数据data。
insert(增) delete(删) update(改) - DDL:数据定义语言(凡是带有create、drop、 alter 的都是DDL)
DDL主要操作的是表的结构。不是表中的数据。 - TCL:是事务控制语言
包括:事务提交:commit;事务回滚:rollback; - DCL:是数据控制语言。
例如:授权grant、 撤销权限revoke…
怎么查看表中数据?
- select * from 表名;
不看数据,只看表结构?
- desc 表名;
简单查询
查询一个字段?
- select 字段名 from 表名;
- 其中要注意:
select和from都是关键字。
字段名和表名都是标识符。 - 强调:
对于SQL语句来说,是通用的,
所有的SQL语句以";"结尾。
另外SQL语句不区分大小写,都行。
查询两个或多个字段?
- 使用“,”号隔开。
查询所有字段?
- 使用“ * ”号代替字段名。
给查询的列起别名?
- 使用as关键字起别名。
- 例:select dname as deptname from dept;
注意:只是将显示的查询结果列名显示为deptname,原表列名还是叫:dname。 - as关键字可以省略,用空格代替。
- 别名里面有空格,需要用单引号括起来。
字段可以使用数学表达式
条件查询
什么是条件查询?
不是将表中所有数据都查出来。是查询出来符合条件的。
语法格式:
select
字段1,字段2,字段3…
f rom
表名
where
条件;
都有哪些条件?
- = 等于
- <> 或 != 不等于
- < 小于
- <= 小于等于
- 大于 >
- 大于等于 >=
- between … and …两个值之间,等同于>= and <=
注意:- 使用between and的时候,必须遵循左小右大。
- between and 是闭区间,包括两端的值。
- is null为null (is not null不为空)
注意:
在数据库中NULL不能使用等号进行衡量,需要使用 is null /is not null - and 并且
- or 或者
- in 包含,相当于多个or(not in不在这个范围中)
- not not可以取非,主要用在 is 或 in 中
- like
称为模糊查询,支持%或下划线匹配
% 匹配任意多个字符
下划线:任意一个字符
排序
查询所有员工薪资,排序?
- 使用order by。
select
ename , sal
from
emp
order by
sal ;
默认升序。
怎么降序?
- 使用desc
select
ename , sal
from
emp
order by
sal desc;
指定升序?
- 使用asc
- select
ename , sal
from
emp
order by
sal asc;
按两个或多个字段排序?
- 查询员工名字和薪资,要求按照薪资升序,如果薪资一样的话,再按照名字升序排列。
select
ename , sal
from
emp
order by
sal asc,ename asc;
说明:sal在前,起主导,只有sal相等时,才会考虑ename排序。
根据字段位置也可以排序(不建议)
- 按照查询结果的第二列sal排序:
select ename,sal from emp order by 2;
数据处理函数
又称为单行处理函数
- 特点:一个输入对应一个输出。
相对的多行处理函数,特点:多个输入对应一个输出。
常见单行处理函数
- Iower 转换小写
- upper 转换大写
- substr 取子串 (substr(被截取的字符串,起始下标,截取的长度))
- concat 拼接
- length 取长度
- trim 去空格
- str_to_date 将字符串转换成日期
- date_ format 格式化日期
- format 设置千分位
- round 四舍五入
- rand ( ) 生成随机数
- ifnull 可以将null转换成一个具体值
ifnull是空处理函数,专门处理空的。
在数据库中,只要有NULL参与的数学运算,最终结果就是NULL。
函数用法:ifnull(数据,被当做的值)
分组函数(多行处理函数)
有哪些函数?
- count 计数
- sum 求和
- avg 平均值
- max 最大值
- min 最小值
注意:
- 分组函数在使用的时候必须先进行分组,然后才能用。
- 如果你没有对数据进行分组,整张表默认为一组。
使用的注意事项
-
分组函数自动忽略NULL,不需要对NULL提前处理。
-
分组函数中count(*)和count(具体字段)有什么区别?
count(具体字段):表示统计该字段下所有不为NULL的元素的总数。
count(*):统计表当中的总行数。(只要有一行 数据count则++)。 -
分组函数不能直接使用在where语句中。
-
所有分组函数可以组合一起使用。
分组查询
什么是分组查询?
在实际的应用中,可能有这样的需求,需要先进行分组,然后对每一组的数据进行操作。这个时候我们需要使用分组查询,怎么进行分组查询呢?
select …
from …
group by …
执行顺序
- from --> where --> group by --> select --> order by
分组函数不能在where语句后面,因为按执行顺序,这时候还没有分组。
重要结论
- 在一条select语句当中,如果有group by语句的话,select后面只能跟:参加分组的字段,以及分组函数。其它的一律不能跟。
having
- 使用having可以对分完组之后的数据进一步过滤。having不能单独使用,having不 能代替where,having必须和group by联合使用。