前言
随着互联网的普及,大多数人加入IT行业并开始了其程序员的职业生涯。在这个行业中有相当多的技术/工具/概念等等,本文就其中一个很重要的点——数据库浅谈一下个人的理解。
一、数据库是什么?
讲数据库之前我们先要知道存储数据是方式有哪些。不完全统计有三种方式,首先可以用变量存储数据,变量可以很方便用户操作数据,但其弊端是变量存在内存中属于临时存储数据,程序执行结束数据随即消失。然后我们还可以使用文件存储数据,文件可以永久保存数据(排除人为删除和不可抗力导致数据丢失),其弊端也很“致命”——非常不便用户对某个数据进行精细化管理。所以“鱼和熊掌”真的不可兼得吗?答案是否定的,因为“它”来了——数据库,作为一个特殊的存在解决了我们的问题。
数据库顾名思义是数据的仓库,具体表述是一个文件管理系统可以有规律的对数据进行存储和方便用户精细化管理。那到底什么是精细化管理,可以概括为“增、删、改、查”。那又要通过什么方式实现精细化管理呢?答案是SQL语句。我们接着往下聊......
二、SQL语句使用
1.概述
SQL语句是一种管理关系型数据的标准编程语言。大概分为4类:第1类数据定义语句(DDL), 主要作用是操作数据库, 数据表, 表字段;第2类数据更新语句(DML), 主要作用是操作表数据;第3类数据查询语句(DQL), 主要作用是操作表数据;第4类数据定义语言(DCL), 主要作用是对数据库用户、权限等设置。我们通过编写SQL语句然后对数据库进行增删改查操作。
SQL语句到底长什么样呢?可以参考数据查询完整的写法:
select
p_id, # 某id
sum(pr) tot_pr # 求和
from
表名
where
pr >= 某值 # 组前筛选条件
group by # 根据id分组
c_id
having # 组后筛选条件
tot_pr > 某值
order by # 按升序排序
tot_pr
limit # 分页,筛选出指定条数的数据
n, n;
乍一看是不是很复杂,(小编起初看到也是“手足无措”呢)所以我决定分解来给各位看官阐述。
2.DDL语句使用
2.1 数据库相关操作
2.1.1创建数据库
create databse [if not exists] 数据库名 [charset '码表名'];
2.1.2删除数据库
drop database 数据库名;
2.1.3修改数据库名称
alter database 数据库名 charset '码表名';
2.1.4查询数据库
# 查看所有数据库:
show databases;
# 查看数据库的基本信息:
show create database 数据库名;
# 查看当前正在使用的数据库:
select database();
# 切库操作 注意:我们在使用查询或者增加数据时首先要切换到目标库。
use 数据库名;
2.2 数据表相关操作
2.2.1创建数据表
create table [if not exists] 数据表名(
列名 数据类型 [约束],
列名 数据类型 [约束],
...
列名 数据类型 [约束]
);
2.2.2删除数据表
drop table 数据表名;
2.2.3修改数据表
# 方法1
alter table 旧表名 rename 新表名;
# 方法2
rename table 旧表名 to 新表名;
2.2.4查看数据表
desc 数据表名;
2.3 表字段相关操作
2.3.1 新增表字段
alter table 数据表名 add 新列名 数据类型 [约束];
2.3.2 删除表字段
alter table 数据表名 drop 旧列名;
2.3.3 修改表字段
alter table 数据表名 change 旧列名 新列名 数据类型 [约束名];
注意:change 既可以修改数据类型又可以修改列名和列属性.
2.3.4 查询表字段
desc 数据表名;
3.DML语句使用
3.1新增表数据
# 增加单条数据
insert into 数据表名 values(值1, 值2...);
注意:不写列名, 默认是: 全列名.即后面的值要全写且保持和列的个数 顺序一致.
# 增加多条数据
insert into 数据表名 values(null., 值1, 值2...), (null, 值1, 值2...);
3.2删除表数据
delete from 数据表名 where 条件;
3.3修改表数据
update 数据表名 set 列名=列值, 列名=列值... where 条件;
例如:update student set name='张三', age=18, phone='13122114567' where id = 2;
4.DQL语句使用(单表查询)
4.1简单查询
# 查询表全部信息
select * from 表名;
# 查询指定列的信息
select 列名1, 列名2, 列名3 from 表名;
别名查询
select pid as '商品id', pname as '商品名', price as '商品价格' from product as p;
注意: 只是在显示的时候, 有别名, 表中的字段名, 并没有发生任何的变化.
as 可以省略不写,如下:
select pid '商品id', pname '商品名', price '商品价格' from product p;
4.2条件查询
场景1 比较运算符, >, <, >=, <=, !=, <>
例子:获取pid值为1的全部信息
select * from product where pid = 1;
场景2 模糊查询
格式: like '内容' 注意:_代表任意的1个字符, %代表任意的多个字符
例子1:查询所有商品中,商品名以'乐'结尾的商品信息:
select * from product where pname like '%乐';
例子2:查找以香开头, 一共2个字符的数据.
select * from product where pname like '香_';
场景3 范围查询
格式1:in (....);
例子1:查询所有商品中价格是6 8 20的商品信息.
select * from product where price in (6, 8, 20);
例子2:查询商品名称是 劲霸 或者 香奈儿的商品信息(可以对于字符型数据使用in)
select * from product where pname in ('劲霸', '香奈儿');
改写成:select * from product where pname = '劲霸' or pname = '香奈儿';
格式2:not in (....);
例子1:查找商品名称不是 劲霸 或者 香奈儿的商品信息
select * from product where pname not in ('劲霸', '香奈儿');
改写成:select * from product where pname != '劲霸' and pname <> '香奈儿';
格式3: between ... and ...
例子1:查询价格在80-200范围内的所有商品.
select * from product where price between 80 and 200;
改写成:select * from product where price >= 80 and price <= 200;
4.3排序查询
格式: select * from 数据表名 order by 要排序的列1 [asc | desc], 列2 [asc | desc];
asc 升序 默认 可省略如下:
例子1:select * from pro order by pri;
desc 降序 不可省略
例子2:先按照价格降序排列, 如果价格一致, 则按照 分类id 降序排列.
select * from pro order by pri desc, cat_id desc;
4.4聚合查询(聚合函数)
# 此处略,后面单独出一期SQL函数使用。
4.5分页查询
格式:limit 起始索引, 数据条数;
例子:select * from pro limit 0, 3;
注意:0可以省略
4.6分组查询
格式:
select 分组字段, 聚合函数 from 数据表名 where 组前筛选 group by 分组的列 having 组后筛选;
例子:统计各个分类商品的个数, 且只显示个数大于1的信息.
select
cat_id, count(pid) to_cnt
from
pro
group by
cat_id
having
tot_cnt > 1; # 组后筛选
5.DCL语句使用(后期有机会再分享吧)
总结
以上就是今天要分享的内容,本文仅仅简单介绍了数据库概念和SQL语句的使用,只能算数据库技术的冰山一角。要不下次先和大家聊聊多表查询如何操作,bye-bye!!!