一 数据库基本概念
1. 什么是数据库:
简而言之可视为电子化的文件柜——存储电子文件的处所,用户可以对文件中的数据
运行新增、截取、更新、删除等操作.所谓“数据库”系以一定方式储存在一起、能予多
个用户共享、具有尽可能小的冗余度、与应用程序彼此独立的数据集合 (简单理解为用于存储和管理数据的仓库。)
2. 数据库的特点
- 持久化存储数据
- 方便存储和管理数据
- 使用了统一的方式操作数据库
二 SQL基本概念与通用语法
-
什么是SQL?
结构化查询语言(Structured Query Language) 简称SQL,SQL 语句就是 对数据库进行操作的一种语言。 -
SQL作用
通过SQL语句我们可以方便的操作数据库中的数据、表、数据库。SQL 是数据库管理系统都需要遵循的规范。不同的数据库生产商都支持SQL语句,但都有特有内容。 -
SQL通用语法
(1)SQL 语句可以单行或多行书写,以分号结尾。
(2)可以使用空格和缩进来增强语句的可读性
(3)MySQL 数据库的SQL语句不区分大小写,关键字建议使用大写 -
SQL语句分类
(1) DDL(Data Definition Language) 数据定义语言
用来定义数据库对象:数据库,表,列等。关键字:create,drop,alter等;
(2) DML(Data Manipulation Language) 数据操作语言
用来对数据库中表的数据进行增删改。关键字:insert,delete,update等。
(3) DQL(Data Query Language)数据查询语言
用来查询数据库中表的记录(数据)。关键字:select,where等
(4) DCL(Data Control Language) 数据控制语言(了解)
(1)DDL:操作数据库、表
1.操作数据库
- 创建:
- 创建数据库:
create database 数据库名;
- 创建数据库:
- 查询:
- 查询所有数据库名称:
show databases;
- 查询所有数据库名称:
- 修改:
- 修改数据库的字符集,注意不是utf-8;
alter database 数据库名 character set utf8;
- 修改数据库的字符集,注意不是utf-8;
- 删除:
- 删除数据库
drop database 数据库名称;
- 删除数据库
2.操作表
- 数据类型
- int:整数类型
- varchar: 字符串
- date:日期,只包含年月日,yyyy-MM-dd
- datetime:日期,包含年月日时分秒 yyyy-MM-dd HH:mm:ss
- timestamp:时间戳类型 包含年月日时分秒 yyyy-MM-dd HH:mm:ss
- 创建:
- 创建表
create table student(
列名1 数据类型1,
列名2 数据类型2,
...
列名n 数据类型n
);
最后一列,不需要加逗号
-
查询
-
查询某个数据库所有名称:
show tables;
-
查询表结构:
desc 表名;
-
-
修改
-
修改表名
alter table 修改前表名 rename to 修改后的表名;
-
修改表的字符集
- 查看表的字符集
show create table 表名;
- 查看表的字符集
-
添加一列
alter table 表名 add 列名 数据类型;
-
删除一列
alter table 表名 drop 列名;
-
-
删除
drop 表名 ;
(2)DML:增删改表中数据
1.添加数据
- 语法:
insert into 表名[(列名1,列名2,...列名n)] values(值1,值2,...,值n);
- 注意:
- 列名和值要一一对应(数据类型、个数、先后顺序)。
- 如果表名后,不定义列名,则默认给所有列添加值。
- 除了数字类型,其他类型需要使用引号(单双都可以)引起来
2.删除数据
- 语法:
delete from 表名 [where 条件]
- 注意:
- 如果不加条件,则删除表中所有记录。
- 如果要删除所有记录
- delete from 表名;–不推荐使用。有多少记录就会执行多少次删除操作
- Truncate table 表名;-- 推荐使用,效率更高,先删除表,然后在创建一张一模一样的表。
修改数据:
- 语法:
update 表名 set列名 1 = 值1,列名2 = 值2,... [where条件]
- 注意
- 如果不加任何条件,则会将表中所有记录全部修改
(3)DQL:查询表中记录
一.查询语句
- select * from 表名;
select
字段列表
from
表名列表
where
条件列表
group by
分组字段
having
分组之后的条件
order by
排序
limit
分页限定
1.基础查询
-
多个字段的查询
- 查询姓名 和年龄
select name ,age from stu ;
- 查询姓名 和年龄
-
去除重复
select distinct address from stu;
-
计算列
– 计算math 和 English 分数之和
select name,math,english,math+english from stu;
-
起别名
– as: as 也可以省略
select name,math,math+ifnull(english,0) as 总分 from stu;
2.条件查询
- *>,<,=,<=,>=,=,<>
- select * from stu where age >=20 && age<=30;–不推荐使用
select * from stu where age >=20 and age<=30;–比较麻烦
- select * from stu where age >=20 && age<=30;–不推荐使用
- between… and
- select * from stu where age between 20 and 30;–推荐
- in(集合)
- select * from stu where age =22 or age = 19 or age = 25;非常繁琐
- select * from stu where age in (22,18,25);推荐使用
- Like:模糊查询
- 占位符:
- _:单个任意字符
- %:多个任意字符
- 查询姓马的有哪些
select * from stu where name like '马%';
- 查询姓名中包含马的人
select * from stu where name like '%马%';
- 查询姓马的有哪些
- 占位符:
3.排序查询
- 语法:order by 子句
order by 排序字段1 排序方式1,排序字段2 排序方式2...
- 排序方式:
- asc:升序,默认
- desc:降序
4.分组查询
- 语法: group by 分组字段;
-按照性别分组,分别查询男、女同学的平均分,人数,要求:分数低于70分的人,不参与分组
select sex,avg(score) from stu where score>70 group by sex;
-按照性别分组,分别查询男、女同学的平均分,人数,要求:分数低于70分的人,不参与分组,分组之后,人数要大于2个人。
select avg(score),count(id) 人数 from stu where score>70 group by sex having 人数>2;
- 注意:
- where 和 having 的区别?
where 在分组之前进行限定,如果不满足条件,则不参与分组。
having在分组之后进行限定,如果不满足结果,则不被查询出来。
- where 和 having 的区别?
5.分页查询
- 语法:
select * from 表名 limit [offset],size- offset = 开始的索引 = (当前页码 - 1)*每页显示的条数
6.聚合函数
- 将一列数据作为一个整体,进行纵向运算。
- count:计算个数
- select count(列名) from 表名;
- select count(*) from 表名
- max:计算最大值
- min:计算最小值
- sum:计算和
- avg:计算平均值
- 注意:聚合函数的计算,会排除非空值(null)