一、引言
到此为止学习的数据存储方式:
A.将数据存储在内存 特点:临时存储 周期比较短
B.将数据存储在文件中 特点:永久存储 操作数据比较麻烦
缺点:
A.要么存储的数据没有规定的格式 存的数据是临时存储
B.存储数据量比较小 存储周期比较短 操作数据比较麻烦
C.存储数据的安全性比较低
二、数据库
简介:
特点:
有组织 有规律存储 可实现数据共享
数据库分类:
关系型数据库:
数据库中表与表之间存在关系,如:mysql、oracle、SqlServer、sqlite.....
非关系型数据库:
数据库中表与表之间不存在关系,如:hbase、Redis、mondb、tidb.....
三、数据库管理系统
简介:
A.mysql是一个关系型数据库 B.mysql数据库是oracle旗下的产品
特点:
A.开源 免费
B.体积小 大部分中小型企业都是使用mysql数据
C.mysql 学习成本比较低 数据安全性比较高
四、SQL语句分类
简介:
SQL语句,是结构化查询语句,就是用于操作数据库的语句
分类:
DDL:主要是针对数据库和数据库表的操作,关键字:create aletr drop show....
DML:主要是针对数据库表的操作,关键字:insert delete update
DQL:主要是针对于数据库中的数据查询操作,关键字:select
DCL:主要是针对数据库表中的数据以及权限管理操作,关键字:alter use
五、DDL-操作数据库
#创建数据库
create database 数据库名
#判断数据库是否存在再创建
create database if not exists 数据库名
#创建数据库并设置编码格式
create database 数据库名 character set 编码格式
#查看创建数据库的格式
show create database 数据库名
#修改数据库编码格式
alter database 数据库名 character set 编码格式
#查看所有数据库
show databases
#使用具体数据库
use 数据库名
#删除数据库 谨慎使用
drop database 数据库名
六、mysql中的数据类型
数值类型:
字符串类型:
时间类型:
七、DDL-操作数据库表
#创建表
create table 表名 (
列名 数据类型(长度),
列名 数据类型(长度),
列名 数据类型(长度),
...
最后一行不用加逗号
);
#查看所有数据表
show tables
#查看表结构
desc 表名
#修改表名
alter table 表名 rename to 新表名
#删除表
drop table 表名
八、DDL-对数据库表中列操作
#增加列 在末尾增加
alter table 表名 add 列名 数据类型(长度)
#增加列 在指定列后面增加
alter table 表名 add 列名 数据类型(长度) after 指定列
#修改列 修改列的数据类型及长度
alter table 表名 modify 列名 新数据类型(长度)
#修改列 修改列名及数据类型和长度
alter table 表名 change 原列名 新列名 数据类型(长度)
#删除列
alter table 表名 drop 列名
九、DML-对数据库表操作
增加:
#第一种插入方式
insert into 表名 value (属性值1,属性值2,属性值3,...) #使用此方法 必须填写所有属性值
#第二种插入方式
insert into 表名 (属性1,属性2,属性3,...) value (值1,值2,值3,...) #使用此方法 可以只插入选定属性
#第三种插入方式
insert into 表名 (属性1,属性2,属性3,...) value (值1,值2,值3,...),(值1,值2,值3,...),(值1,值2,值3,...)...; #使用此方法 可以一次插入多条数据
修改:
#修改数据的时候一定要加上条件
update 表名 set 属性1=值1,属性2=值2,... where 条件
删除:
#删除单条数据
delete from 表名 where 条件 #条件就是要删除的数据行的某一属性
#删除整个表数据
delete from 表名 #该方法会删除整个表的数据
truncate table 表名 #该方法会删除整个表的数据并删除表结构
十、单表查询
数据表:
#创建商品表:
CREATE TABLE product(
pid INT PRIMARY KEY,#主键ID
pname VARCHAR(20),#商品名称
price DOUBLE,#商品价格
category_name VARCHAR(32)#商品分类名称
);
INSERT INTO product(pid,pname,price,category_name) VALUES(1,'联想电脑',5000,'电脑
办公');
INSERT INTO product(pid,pname,price,category_name) VALUES(2,'海尔电脑',3000,'电脑
办公');
INSERT INTO product(pid,pname,price,category_name) VALUES(3,'雷神电脑',5000,'电脑
办公');
INSERT INTO product(pid,pname,price,category_name) VALUES(4,'JACK JONES',800,'服
装');
INSERT INTO product(pid,pname,price,category_name) VALUES(5,'真维斯',200,'服装');
INSERT INTO product(pid,pname,price,category_name) VALUES(6,'花花公子',440,'服
装');
INSERT INTO product(pid,pname,price,category_name) VALUES(7,'劲霸',2000,'服装');
INSERT INTO product(pid,pname,price,category_name) VALUES(8,'香奈儿',800,'女士用
品');
INSERT INTO product(pid,pname,price,category_name) VALUES(9,'相宜本草',200,'女士用
品');
INSERT INTO product(pid,pname,price,category_name) VALUES(10,'面霸',5,'女士用品');
INSERT INTO product(pid,pname,price,category_name) VALUES(11,'雪碧',56,'饮料饮
品');
INSERT INTO product(pid,pname,price,category_name) VALUES(12,'香飘飘奶茶',1,'饮料饮
品');
INSERT INTO product(pid,pname,price,category_name)
VALUES(13,'iPhone9',8000,NULL);
查询所有数据:
#查询所有数据
select * from 表名 # *表示所有列 select是查询关键字
select * from product
查询指定列:
#查询指定列的记录
select 列名,列名,... from 表名
select pid,pname form product
根据条件查询:
#根据条件查询
select * from 表名 where 条件
select * from product where category_name="电脑办公"
运算查询:
#运算查询
select 需要运算的列 from 表名
select price+10 from product
设置别名:
#设置别名
select 列名 as 别名,... from 表名 as 别名 #通常给表名设置别名可以省略as 给列名设置别名不省略
select price+10 as price from product p
根据条件查询:
#查询商品名称为“花花公子”的商品所有信息:
SELECT * FROM product WHERE pname="花花公子"
#查询价格为800商品
SELECT * FROM product WHERE price=800
#查询价格不是800的所有商品
SELECT * FROM product WHERE price!=800
SELECT * FROM product WHERE NOT price=800
#查询商品价格大于60元的所有商品信息
SELECT * FROM product WHERE price>60
#查询商品价格在200到1000之间所有商品
SELECT * FROM product WHERE price>=200 AND price<=1000
SELECT * FROM product WHERE price>=200 && price<=1000
SELECT * FROM product WHERE price BETWEEN 200 AND 1000
#查询商品价格是200或800或者2000的所有商品
SELECT * FROM product WHERE price=200 OR price=800 OR price=2000
SELECT * FROM product WHERE price=200 || price=800 || price=2000
SELECT * FROM product WHERE price IN (200,800,2000)
模糊查询:
# _ 表示一个字符 %表示0-n个字符
select * from 表名 where 模糊查询条件的列 like 匹配条件
#查询含有'霸'字的所有商品
SELECT * FROM product WHERE pname LIKE "%霸%"
#查询以'香'开头的所有商品
SELECT * FROM product WHERE pname LIKE "香%"
#查询第二个字为'想'的所有商品
SELECT * FROM product WHERE pname LIKE "_想%"
分页查询:
# 关键字 limit 第一个?表示当前数据库的索引从0开始 第二个?表示每一页显示的数据条数
select * from 表名 limit ?,?
#分页查询 前三条数据
SELECT * FROM product LIMIT 0,3
#分页查询 4,5,6条数据
SELECT * FROM product LIMIT 3,3
#分页查询 7 8 9条数据
SELECT * FROM product LIMIT 6,3
#分页查询中浏览器中的转换规则为 (页码索引-1)*页量数
非空查询:
# is null 和 is not null
# is null 表示没有插入数据的默认状态 is null 不等于 ""
#商品没有分类的商品
SELECT * FROM product WHERE category_name IS NULL
#查询有分类的商品
SELECT * FROM product WHERE category_name IS NOT NULL
查询后排序:
#关键字 order by asc(升序)|| desc(降序)
select * from 表名 order by 需要排序的列名 asc | desc
#1.使用价格排序(降序)
SELECT * FROM product ORDER BY price DESC
#2.在价格排序(降序)的基础上
#若价格相同,相同价格的数据以pid降序排序
SELECT * FROM product ORDER BY price DESC,pid DESC
分组查询:
#关键字 group by
select * from 表名 group by 分组的列名
# 统计各个分类下商品的个数
SELECT category_name, COUNT(1) FROM product GROUP BY category_name
过滤查询:
#关键字 having
select * from 表名 gruop by 分组的列名 having 过滤的条件
#having和where的比较
#相同点: 都可以对数据进行过滤
#不同点: having是分组之后再进行过滤 where 是在分组之前进行过滤的
#统计各个分类商品的个数,有且 只显示分类名称不为空值的数据
SELECT category_name,COUNT(1) FROM product GROUP BY category_name
HAVING category_name IS NOT NULL
十一、mysql中常见的函数
聚合函数:
#1 查询商品的总条数
SELECT COUNT(1) FROM product
#查看商品总价格、最大价格、最小价格、价格的平均值
SELECT SUM(price) "总价",MAX(price) "最大值",MIN(price) "最小值" ,ROUND(AVG(price),2) "平
均值" FROM product
#2 查询价格大于200商品的总条数
SELECT COUNT(1) FROM product WHERE price >200
#3 查询分类为'电脑办公'的所有商品的总记录
SELECT COUNT(1) FROM product WHERE category_name="电脑办公"
#4 查询分类为'服装'所有商品的平均价格
SELECT AVG(price) FROM product WHERE category_name="服装"
时间函数:
#时间函数
#获取年月日时分秒
SELECT SYSDATE()
#获取年月日
SELECT CURDATE()
#获取时分秒
SELECT CURTIME()
#获取现在时间 年月日时分秒
SELECT NOW()
字符串函数:
#字符串函数
#拼接
SELECT CONCAT("123","abc","789")
#插入 索引从1开始
SELECT INSERT("班长喜欢去洗脚",3,2,"666")
#将字母转换为小写
SELECT LOWER("abcDEF")
#将字母转换为大写
SELECT UPPER("abcDEF")
#截取字符串 索引从1开始
SELECT SUBSTRING("班长喜欢去洗脚",3,3)
十二、查询语句中的顺序
select * from 表名 where like 模糊条件 group by 分组条件 having 过滤条件 order by 排序 limit ?,?