一、前言入门
基本概念的介绍
关系型数据库,是指采用了关系模型来组织数据的数据库,其以行和列的形式存储数据,以便于用户理解,关系型数据库这一系列的行和列被称为表,一组表组成了数据库。用户通过查询来检索数据库中的数据,而查询是一个用于限定数据库中某些区域的执行代码。关系模型可以简单理解为二维表格模型,而一个关系型数据库就是由二维表及其之间的关系组成的一个数据组织。(百度百科)
Structured Query Language:结构化查询语言
其实就是定义了操作所有关系型数据库的规则。每一种数据库操作的方式存在不一样的地方,称为“方言”。
(本文不涉及数据库完整性的学习,只是SQL语句的快速入门单表操作)
- DDL(Data Definition Language)数据定义语言
用来定义数据库对象:数据库,表,列等。关键字:create, drop,alter 等
- DML(Data Manipulation Language)数据操作语言
用来对数据库中表的数据进行增删改。关键字:insert, delete, update 等
- DQL(Data Query Language)数据查询语言
用来查询数据库中表的记录(数据)。关键字:select, where 等
- DCL(Data Control Language)数据控制语言
用来定义数据库的访问权限和安全级别,及创建用户。关键字:GRANT, REVOKE 等
mysql的基本数据类型
atetime:日期,包含年月日时分秒 yyyy-MM-dd HH:mm:ss timestamp:时间错类型 包含年月日时分秒
yyyy-MM-dd HH:mm:ss 如果将来不给这个字段赋值,或赋值为null,则默认使用当前的系统时间,来自动赋值
启动数据库
成功后是这样的
二、具体内容
DDL:操作数据库、表
操作数据库
1 创建数据库
create database if not exists 数据库名称;
create database if not exists db4 character set gbk
2 删除数据库
3 查询数据库的定义:show create database 数据库名称;
4 Update:修改数据库的字符集
alter database 数据库名称 character set 字符集名称;
使用数据库:use 数据库名称;
表的基本操作
1 创建
create table 表名(
列名1 数据类型1,
列名2 数据类型2,
....
列名n 数据类型n
);
2 查询test数据库中所有的表名称:show tables;
查询表结构:desc 表名;
查询表定义的SQL语句:
show create table student;
3 修改表
修改表名:alter table 表名 rename to 新的表名;
修改表的字符集:alter table 表名 character set 字符集名称;
添加一列:alter table 表名 add 列名 数据类型;
修改列名称 类型
alter table 表名 change 列名 新列别 新数据类型;
alter table 表名 modify 列名 新数据类型;
4 删除列:alter table 表名 drop 列名;
drop table if exists 表名 ; 自己可以自行体验。
DML:增删改表中数据
1 添加数据:语法:
insert into 表名(列名1,列名2,...列名n) values(值1,值2,...值n);
- 注意
- 如果表名后,不定义列名,则默认给所有列添加值
insert into 表名 values(值1,值2,…值n);
我们可以看到成功的插入了 6条数据,男女搭配了一下,都是不老男神和70年的中国美女。
2 删除数据:
delete from 表名 [where 条件]
TRUNCATE语句和DELETE语句的区别
3 修改数据:带条件修改数据:update 表名 set 列名1 = 值1, 列名2 = 值2,... [where 条件];
要求:将 id 号为 6 的张曼玉 名字 改为 温碧霞,再看看表中的数据
DQL:查询表中的记录
select 字段列表 from 表名;
1 语法: 语法语句的基本排列,根据查询的具体要求 会稍有改动
- select 字段列表
- from 表名列表
- where 条件列表
- group by 分组字段
- having分组之后的条件
- order by 排序
- limit 分页限定
2 基础查询
我们重新创建一个表(表的完整性我们不做过多定义)
CREATE TABLE `student` (
`id` int(11) ,
`NAME` varchar(20) DEFAULT NULL,
`chinese` float DEFAULT NULL,
`english` float DEFAULT NULL,
`math` float DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf
表中的数据如下
多个字段的查询
select 字段名1,字段名2... from 表名;
去除重复: distinct (用了之前的stu表)
计算列:一般可以使用四则运算计算一些列的值。(一般只会进行数值型的计算)
这里使用了起别名 – as 别名
ifnull(表达式1,表达式2):null参与的运算,计算结果都为null 表达式1:哪个字段需要判断是否为null
如果该字段为null后的替换值。
修改各科成绩的别名:
3 条件查询
查询数学成绩大于 70 的人的所有信息
查询数学和英语成绩大于 70 的人的所有信息
查询数学成绩等于90,92,,77的信息
查询 语文成绩在 80 - 90 之间的人的信息
LIKE:模糊查询
占位符:
_:单个任意字符
%:多个任意字符
查询姓张的有哪些? like
查询姓名是3个字的人 , 这样布拉德皮特就除外了
DQL:查询语句
表中的数据
1 排序查询
order by 排序字段1 排序方式1 , 排序字段2 排序方式2...
排序方式:
- ASC:升序,默认的。
- DESC:降序。
注意:如果有多个排序条件,则当前边的条件值一样时,才会判断第二条件。
SQL语句
select *,(chinese + english + math) 总分 from student order by 总分;
SQL语句
select *,(chinese + english + math) 总分 from student where name like '张%'order by 总分 asc;
2 聚合函数:将一列数据作为一个整体,进行纵向的计算
聚合函数 | 含义 |
count(*) | 计算个数(非空) |
max | 计算最大值 |
min | 计算最小值 |
sum | 计算和 |
avg | 计算平均值 |
SQL语句
SELECT COUNT(id) FROM student WHERE (chinese + english + math) > 250;
SQL语句
SELECT SUM( chinese + english + math ) 各科成绩总和, FORMAT(AVG(chinese + english + math), 2) 总分平均分 FROM student;
3 分组查询
我们添加了一个年龄,性别的字段,方便我们分组查询。
where 和 having 的区别?
- where 在分组之前进行限定,如果不满足条件,则不参与分组。having在分组之后进行限定,如果不满足结果,则不会被查询出来
- where 后不可以跟聚合函数,having可以进行聚合函数的判断。
- 要求:查询男女各多少人(查询步骤如下)
- 查询所有数据,按性别分组
- 统计每组的人数
sql语句
select gender,count(id) from student where age > 55 group by gender having count(id) > 2;
4 limit分页
limit(offset,length) 跟数组下标 差不多
offset :起始行数,从 0 开始计数,如果省略,默认就是 0
length :返回的行数
分页使用场景
:比如我们登录京东,淘宝,返回的商品信息可能有几万条,不是一次全部显示出来。是一页显示固定的条数。
总结