目录
5.5.4 DATEDIFF、DATE_ADD、DATE_FORMAT
5.5.6 IF、IFNULL、CASE WHEN THEN ELSE END
5.5.7 count()、sum()、avg()、max()、min()
1.存储数据的方式
文件存储、集合、变量
以上存储数据的弊端存在弊端:
1.集合和变量是基于内存的存储方式,不能做到持久化(关闭之后无法查看);
2.文件存储能够持久化,但是文件的数据不是结构化的数据,对数据存储效率非常低。
2.数据库
数据库:用来组织、存储和管理数据的仓库。
数据库管理系统DMSD(DataBase Management System,DBMS):指一种操作和管理数据库的大型软件,用于建立、使用和维护数据库,对数据库进行统一管理和控制,以保证数据库的安全性和完整性。用户通过数据库管理系统访问数据库中的数据。
数据库管理系统分类:
-Oracle:被认定是业界目前比较成功的关系型数据库管理系统。Oracle数据库可以运行在UNIX、Windows等主流操作系统平台,完全支持所有的工业标准,并获得最高级别的ISO标准安全性认证。
-DB2:IBM公司的产品,DB2数据库系统采用多进程多线索体系结构,其功能足以满足大中公司的需要,并可灵活地服务于中小型电子商务解决方案。
-SQL Server:Micresoft公司推出的关系型数据库管理系统。具有使用方柏霓可伸缩性好与相关软件集成程度高等优点。
-PostgreSql:The World‘s Most Advanced Open Source Relational Database
-Tidb 真正意义的分布式数据库
3.MySQL
MySQL是一个关系型数据库管理系统 DBMS(DataBase Management System),由瑞典MySQL AB 公司开发,属于Oracle旗下产品。MySQL是最流行的关系型数据库管理系统之一,在WEB应用方面,MySQL是最好的RDBMS(Relational Database Management System)应用软件之一。
3.1MySQL Insttaller
1.MySQL绿色安装 语雀(yuque.com)
2.下载MySQL安装包
官网下载5.7版本
3.2 mysql常用命令
mysql -h -uroot -p
-h指定mysql服务的ip地址,默认是localhost
-u指定用户名 root为超级用户
-p指定密码
数据库操作(database)
show databases --列出当前数据库的可用数据库
create database 数据库名称 --创建数据库
drop database 数据库名称 --删除数据库
drop database if exists --删除数据库(如果存在)
use database --选择数据库
数据表操作(table)
show tables --列出当前表
create table stu(id int ,name varchar(20)); --创建表
drop table stu; --删除stu表
drop table if exists stu --删除stu表(如果存在)
desc table --描述表的结构
3.3 mysql的可视化客户端
3.3.1 Navicat
Navicat是一套快速、可靠并价格相宜的数据库管理工具,专为简化数据库的管理及降低系统管理成本而设。它的设计符合数据库管理员、开发人员及中小企业的需要。Navicat 是以直觉化的图形用户界面而建的,让你可以以安全并且简单的方式创建、组织、访问并共用信息。
3.3.2 SQLYog
MySQL可能是世界上最流行的开源数据库引擎,但是使用基于文本的工具和配置文件可能很难进行管理。SQLyog提供了完整的图形界面,即使初学者也可以轻松使用MySQL的强大功能。其拥有广泛的预定义工具和查询、友好的视觉界面、类似 Excel 的查询结果编辑界面等优点。
4.SQL
数据库概念:SQL(Structured Query Language)结构化查询语言,用于存取数据、更新、查询和管理关系数据库系统的程序设计标准化语言(SQL92\SQL93)
SQL语言的分类
1、数据查询语言(DQL: Data Query Language):其语句,也称为“数据检索语句”,用以从表中获得数据,确定数据怎样在应用程序给出。保留字SELECT是DQL(也是所有SQL)用得最多的动词,其他DQL常用的保留字有WHERE,ORDER BY,GROUP BY和HAVING。这些DQL保留字常与其它类型的SQL语句一起使用。
2、数据定义语言(DDL:Data Definition Language):其语句包括动词CREATE,ALTER和DROP。在数据库中创建新表或修改、删除表(CREATE TABLE 或 DROP TABLE);为表加入索引等。
3、数据操作语言(DML:Data Manipulation Language):其语句包括动词INSERT、UPDATE和DELETE。它们分别用于添加、修改和删除。
4、数据控制语言(DCL:Data Control Language):它的语句通过GRANT或REVOKE实现权限控制,确定单个用户和用户组对数据库对象的访问。某些RDBMS可用GRANT或REVOKE控制对表单个列的访问。
5.DQL
5.1 别名查询
--用as关键字给列取别名,as可以省略不写
SELECT *,'US' AS '国籍' FROM employees
SELECT salary AS '工资' FROM employees
5.2 去重查询
SELECT DISTINCT salary AS '工资' FROM employees
5.3 条件过滤查询
使用where子句实现条件过滤查询#查询所有工资在10000以上的员工的信息
select salary from employees where salary > 10000
#查询所有工资在以上的员工的信息
#比较运算符 < <= >= = != <>
#查询所有电话以650开头的员工信息
-- %表示个数和内容都不确定
-- 右模糊
SELECT *
FROM employees
WHERE phone_number LIKE '650%'
5.4 排序查询
order by 字段名 asc (按字段名升序排序)
order by 字段名 desc(按字段名降序排序)
order by 字段名 (不写就是按照升序排列)
5.5 分页查询
5.5.1 limit
limit可实现分页查询
limit m 第一页前m行信息
limit m,n 跳过m行取n行
分页公式 :limit (page - 1)*size,size
5.5.2 RAND()、FLOOR、CEIL
与数字有关的函数
SELECT RAND() FROM DUAL -- 产生[0,1]随机小数
SELECT FLOOR(4.5) --向下取整
SELECT CEIL(4.5) --向上取整
5.5.3 CURDATE(),CURTIME()
与日期有关的函数
SELECT NOW(),CURDATE(),CURTIME(),YEAR(NOW()),MONTH(),DAY(),HOUR(),DAYOFMONTH(),DAYOFYEAR(),DAYOFWEEK()
5.5.4 DATEDIFF、DATE_ADD、DATE_FORMAT
select DATEDIFF('','') as days --计算两个时间相隔多少天
select DATE_ADD(NOW(),INTERVAL m DAY) --计算某个时间的推算(向前、向后)m天
select DATE_FORMAT(DATE_ADD(NOW(),INTERVAL m DAY) ,'%Y-%m-%d') --格式化输出
5.5.5 CONCAT
与字符串有关的函数
SELECT RIGHT(last_name,m) --从右边取名字的后m个字母
SELECT LEFT(last_name,m) --从左边取名字的后m个字母
SELECT SUBSTR('helloworld',m,n) --字符串截取索引开始为1,从索引位置为m取n位
SELECT CONCAT('m','n') --字符串拼接
5.5.6 IF、IFNULL、CASE WHEN THEN ELSE END
与流程控制有关的函数
SLELECT IF(1=1,'正确','错误') --1=1为true,就输出正确,否则输出错误,类似于三元表达式
SELECT IFNULL('123','空') --如果123为null,就输出空,否则输出123
SELECT *
CASE
WHEN salary >= 15000 THEN 'A'
WHEN salary >= 10000 THEN 'B'
WHEN salary >= 5000 THEN 'C'
ELSE 'D'
END FROM employees
5.5.7 count()、sum()、avg()、max()、min()
聚合函数
COUNT(*) 求总数 、SUM() 求和 、AVG() 求平均值 、
MAN(salary) 求最高工资 、MIN(salary)求最低工资
5.5.8 GROUP BY
分组聚合
-- 统计平均工资在10000以上的每个部门分别的平均工资
求每个部门的平均工资
SELECT
department_id,
-- 聚合
AVG(salary) AS '平均工资'
FROM employees
-- 过滤
WHERE department_id IS NOT NULL
-- 分组
GROUP BY department_id
5.6 连表查询(多表,单表自连)
join on
inner join 内连接
left join 左连接
right join 右连接
5.7 非相关子查询
查询比Abel工资高的员工编号、姓名和工资
SELECT * FROM employees
WHERE salary > (SELECT salary FROM employees
WHERE last_name = 'Abel')
5.8 相关子查询
查询每个部门的信息以及对应的员工人数
SELECT
departments.*,
(SELECT COUNT(*) FROM employees
WHERE employees.department_id = departments.department_id ) AS '员工数'
FROM departments
5.9 小结
-- 如果以下子句全部出现,那么执行的顺序如下
1:from
2:where
3:group by
4:having
5:select
6:order by
7:limit