什么是数据库
数据库(
DataBase
)为了方便数据的存储和管理,它将数据按照特定的
规则存储在磁盘上
,
就是一个存储数据的仓库。
DB:数据库(DateBase),存储数据的容器。
DBMS:数据库管理系统(DataBase Management System),
又称为数据库软件或数据库产品,用于创建或管理
DB
。
![](https://img-blog.csdnimg.cn/direct/3f3ee922a95848b5924765de8027125e.png)
为什么使用数据库
1.实现数据持久化到本地。
2.使用完整的管理系统统一管理,可以实现结构化查询,方便管理。
MySQL 数据库
1.MySQL 是一种关系型数据库管理系统。
2.MySql软件是一种开放源码软件,你可以修改源码来开发自己的 Mysql 系统。
3.MySql数据库服务器具有快速、可靠和易于使用的特点。
4.MySql使用标准的sql语言,并且支持多种操作系统,支持多种语言。
5.mysql商业版与社区版,MySQL商业版是由MySQL AB公司负责开发与维护,需要付费才能使用,
6.MySQL社区版是由分散在世界各地的MySQL开发者、爱好者一起开发与维
护,可以免费使用。
MySQL 的安装
http://t.csdnimg.cn/APQcJ,这个链接的教程很详细。
结构化查询语言(sql)
结构化查询语言
(Structured Query Language)
简称
SQL
,是一种特殊目的的编程语言,是一种数据
库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统.
sql优点
不是某个特定数据库供应商专有的语是言,几乎所有
DBMS
都支持
SQL简单易学,灵活使用可以进
行非常复杂和高级的数据库操作
DDL
1.数据
(
结构
)
定义语言
DDL(Data Definition Language)
,是用于创建和修改数据库表结构的语言
2.
常用的语句:
create :创建数据库,表等
-- 创建一个数据库,名称为 csdndb 关键词 database
-- CREATE DATABASE [if not exists] 数据库名 [ CHARSET utf8] []表示可以写也可以不写
CREATE DATABASE csdndb
-- 删除数据库DROP DATABASE 数据库名 / [IF EXISTS数据库名] []表示可以写也可以不写
DROP DATABASE csdn IF EXISTS
-- 创建一个表,名称为 cs 关键词 table
CREATE TABLE cs(
id INT
)
alter : 修改关键词
-- 修改字符集 ALTER DATABASE 数据库名 CHARSET gbk;修改编码方式,修改前是utf8
ALTER DATABASE csdndb CHARSET gbk
drop : 执行删除数据库,表等操作
-- 删除数据库DROP DATABASE 数据库名 / [IF EXISTS数据库名] []表示可以写也可以不写
DROP DATABASE csdn IF EXISTS
-- 删除表 cs
DROP TABLE cs
rename :重新修改名称
-- 重新命名cs表为csd
RENAME TABLE cs TO csd
DML
数据操纵语言DML(Data Manipulation Language)执行数据库的 增、删、改
常用语句: insert:插入数据语句
插入数据
方式1: INSERT INTO 表名(列1,列2……,列n) VALUES(值1,值2…..,值n);
方式2: INSERT INTO 表名 set 列名1=值1,..列名n=值n;
方式3: INSERT INTO 表名(列1,列2……,列n) VALUES(值1,值2…..,值n),(值1,值2…..,值n);
方式4:INSERT INTO 表名(列1,列2……,列n) 查询语句(查询的列数与插入列数匹配)
*/
INSERT INTO student(NAME,gender,birthday,phone) VALUES('张三','男','2003-2-5','127333666')
INSERT INTO student(NAME,gender,birthday,phone,address,height,reg_time)
VALUES('张三封','男','2003-6-5','127333677','汉中',1.76,NOW())
INSERT INTO student(NAME,gender,birthday,phone,address,height,reg_time)
VALUES('张三封','男','2003-6-5','127333688','汉中',1.76,NOW()),
('李丽','女','2002-8-5','127333699','汉中',1.56,NOW()),
('张百合','男','2002-6-5','127333610','汉中',1.86,NOW())
INSERT INTO student SET NAME='李四',gender='男',birthday='2022-8-9',phone='19192345'
delete :删除语句
-- 删除语句
DELETE FROM stu -- 删除表里的所有数据
-- 删除 num=3 的数据
DELETE
FROM student
WHERE num=3
update 修改语句
-- 修改语句
UPDATE stu SET address='西安',height=1.55 -- 没有限制条件就会全都改变
UPDATE student SET address='西安',height=1.55 WHERE num=1
DQL
DQL
(
Data Query Language
)数据查询语言查询是使用频率最高的一个操作, 可以从一个表中查询数据,也可以从多个表中查询数据。
语法:
select
查询列表
from
表名
;
特点:
查询列表可以是:表中的字段、常量、表达式、函数
查询的结果是一个虚拟的表格,不会修改查询表的内容
-- 查询
SELECT * FROM student;
-- sql 中 + - * /只是算数运算
SELECT num+100,NAME FROM student
MySQL中常用的函数
单行函数:如concat、length、ifnull等
单行函数
● 字符函数
length()
:获取参数值的字节个数
char_length()
获取参数值的字符个数
concat(str1,str2,.....)
:拼接字符串
upper()/lower()
:将字符串变成大写
/
小写
substring(str,pos,length)
:截取字符串 位置从
1
开始
instr(str,
指定字符
)
:返回子串第一次出现的索引,如果找不到返回
0
trim(str)
:去掉字符串前后的空格或子串
,trim(
指定子串
from
字符串
)
lpad(str,length,
填充字符
)
:用指定的字符实现左填充将
str
填充为指定长度
rpad(str,length,
填充字符
)
:用指定的字符实现右填充将
str
填充为指定长度
replace(str,old,new)
:替换,替换所有的子串
-- 分组函数 sum() 也称为聚合函数 统计函数 ,把多行数据处理为一行
SELECT SUM(height) FROM student
-- 单行函数
-- 字符函数
-- length():获取参数值的字节个数
SELECT LENGTH(NAME) FROM student
-- char_length()获取参数值的字符个数
SELECT CHAR_LENGTH(NAME) FROM student
-- concat(str1,str2,.....):拼接字符串
SELECT num,CONCAT(NAME,':',gender) FROM student
-- upper()/lower():将字符串变成大写/小写
SELECT UPPER(NAME),LOWER(NAME) FROM student
-- substring(str,pos,length):截取字符串 位置从1开始
SELECT SUBSTRING(NAME,1,2) FROM student
-- instr(str,指定字符):返回子串第一次出现的索引,如果找不到返回0
SELECT INSTR(NAME,'张') FROM student
-- trim(str):去掉字符串前后的空格或子串,trim(指定子串 from 字符串)
SELECT CHAR_LENGTH(TRIM(NAME)) FROM student
SELECT TRIM('张' FROM NAME) FROM student
-- lpad(str,length,填充字符):用指定的字符实现左填充将str填充为指定长度
SELECT LPAD(NAME,5,'a'),RPAD(NAME,5,'a') FROM student
-- rpad(str,length,填充字符):用指定的字符实现右填充将str填充为指定长度
-- replace(str,old,new):替换,替换所有的子串
SELECT REPLACE(NAME,'张','王')FROM student
单行函数
逻辑处理
case when 条件 then 结果1 else 结果2 end; 可以有多个when
ifnull(被检测值,默认值)函数检测是否为null,如果为null,则返回指定的值,否则返回
原本的值
if函数:if else的 效果 if(条件,结果1,结果2)
-- 逻辑处理
/*case when 条件 then 结果1 else 结果2 end; 可以有多个when
ifnull(被检测值,默认值)函数检测是否为null,如果为null,则返回指定的值,否则返回
原本的值
if函数:if else的 效果 if(条件,结果1,结果2)
*/
SELECT NAME ,
(CASE WHEN height>1.8 THEN '高个子'
WHEN height>1.7 THEN '正常个子'
ELSE '矮个子' END) AS height,
gender
FROM student
SELECT NAME ,IFNULL(address,'未录入') AS address FROM student
SELECT NAME ,IF(height>1.8 ,'高个子','正常个子') AS height FROM student
单行函数
数学函数
round(
数值
)
:四舍五入
ceil(
数值
)
:向上取整,返回
>=
该参数的最小整数
floor(
数值
)
:向下取整,返回
<=
该参数的最大整数
truncate(
数值
,
保留小数的位数
)
:截断,小数点后截断到几位
mod(
被除数
,
除数
)
:取余,被除数为正,则为正;被除数为负,则为负
rand()
:获取随机数,返回
0-1
之间的小数
-- 数学函数
-- round(数值):四舍五入
SELECT NAME ,ROUND(height) FROM student
SELECT NAME ,ROUND(height,1) FROM student
-- ceil(数值):向上取整,返回>=该参数的最小整数 FLOOR(数值):向下取整,返回<=该参数的最大整数
SELECT NAME ,CEIL(height) , FLOOR(height) FROM student
-- truncate(数值,保留小数的位数):截断,小数点后截断到几位
SELECT NAME,TRUNCATE(height,1) FROM student
-- mod(被除数,除数):取余,被除数为正,则为正;被除数为负,则为负
SELECT NAME, MOD(-num,3),MOD(num,2) FROM student
RAND():获取随机数,返回0-1之间的小数
SELECT NAME ,RAND() FROM student
单行函数
日期函数
now()
:返回当前系统日期
+
时间
curdate()
:返回当前系统日期,不包含时间
curtime()
:返回当前时间,不包含日期
可以获取指定的部分,年、月、日、小时、分钟、秒
YEAR(
日期列
),MONTH(
日期
列
),DAY(
日期
列
) ,HOUR(
日期
列
) ,MINUTE(
日期
列
)
SECOND(
日期
列
)
str_to_date(
字符串格式日期
,
格式
)
:将日期格式的字符转换成指定格式的日期
date_format(
日期列
,
格式
)
:将日期转换成字符串
datediff(big,small)
:返回两个日期相差的天数
-- now():返回当前系统日期+时间
SELECT NOW(), CURDATE(),CURTIME() FROM student
-- curdate():返回当前系统日期,不包含时间
-- curtime():返回当前时间,不包含日期
-- str_to_date(字符串格式日期,格式):将日期格式的 字符 转换成 指定格式的日期
SELECT STR_TO_DATE('2022-09-10','%Y-%m-%d') FROM student
-- date_format(日期列,格式):将日期转换成字符串
SELECT DATE_FORMAT(birthday,'%Y-%m') FROM student
-- datediff(big,small):返回两个日期相差的天数
SELECT DATEDIFF(CURDATE(),birthday) FROM student
分组函数:做统计使用,又称为统计函数、聚合函数、组函数
分组函数
功能:用作统计使用,又称为聚合函数或统计函数或组函数
分类:
sum
求和、
avg
平均值、
max
最大值、
min
最小值、
count
计数 (非空)
1.sum
,
avg
一般用于处理数值型
max
,
min
,
count
可以处理任何类型
2.
以上分组函数都忽略
null
值
3.count
函数的一般使用
count
(
*
)用作统计行数
4.
和分组函数一同查询的字段要求是
group by
后的字段
SELECT SUM(height) FROM student;-- 身高总和
SELECT AVG(height) FROM student;-- 平均身高
SELECT MAX(height) FROM student;-- 最高身高
SELECT MIN(height) FROM student;-- 最低身高
-- COUNT(*) COUNT(1) COUNT(address) 统计的值出现null则不会统计
SELECT COUNT(*) FROM student;
SELECT COUNT(1) FROM student;
SELECT COUNT(address) FROM student;
条件查询
使用WHERE 子句,将不满足条件的行过滤掉,WHERE 子句紧随 FROM 子句。
语法
:select <
结果
> from <
表名
> where <
条件
>
比较
=, !=
或
<>, >, <, >=, <=
逻辑运算
and
与
or
或
not
非
条件查询
模糊查询
LIKE
:是否匹配于一个模式 一般和通配符搭配使用,可以判断字符型数值
或数值型.
通配符: % 任意多个字符
between and 两者之间,包含临界值;
in 判断某字段的值是否属于in列表中的某一项
IS NULL(为空的)或 IS NOT NULL(不为空的)
UNION 的语法如下:
[SQL
语句
1]
UNION
[SQL
语句
2]
2
、
UNION ALL
的语法如下:
[SQL
语句
1]
UNION ALL
[SQL
语句
2]
当使用union 时,mysql 会把结果集中重复的记录删掉,而使用union all ,
mysql 会把所有的记录返回,且效率高于union 。
/*
当使用union 时,mysql 会把结果集中重复的记录删掉,而使用union all ,
mysql 会把所有的记录返回,且效率高于union
*/
-- union 会删除重复的记录
SELECT address FROM student WHERE address='汉中'
UNION
SELECT address FROM student WHERE address='西安'
-- UNION ALL只是合并
SELECT address FROM student WHERE address='汉中'
UNION ALL
SELECT address FROM student WHERE address='西安'
排序
查询结果排序,使用 ORDER BY 子句排序 order by 排序列 ASC/DESC ,asc代表的是升序,desc代表的是降序,如果不写,默认是升序 order by子句中可以支持单个字段、多个字段
数量限制
limit子句:对查询的显示结果限制数目 (sql语句最末尾位置)
SELECT * FROM table LIMIT offset rows;
SELECT * from table LIMIT 0,5;
/*
数量限制
limit子句:对查询的显示结果限制数目 (sql语句最末尾位置)
SELECT * FROM table LIMIT offset rows;
SELECT * from table LIMIT 0,5;
*/
-- 只查询一部分,提高效率 如场景 数据分页显示
SELECT * FROM student LIMIT 0,2
SELECT * FROM student LIMIT 2,2
-- limit(n-1)*2 2 n 当前页码