MySQL基本操作
2017-08-31 本文已影响25人
Albert_Sun
SQL语句:结构化查询语言
- DDL: 数据定义语言, 定义数据库对象:库、表、列、表结构
- DML: 数据操作语言, 定义数据库记录,增、删、改 表记录
- DQL: 数据查询语言, 查询记录
- DCL: 数据控制语言, 定义访问权限和控制安全级别
1. DDL
1.1 数据库
SHOW DATABASES: 查看所有数据库
USE 数据库名:切换到某数据库
CREATE DATABASE [IF NOT EXISTS] 数据库名 [CHARSET=UTF8]
DROP DATABASE [IF EXISTS] 数据库名
1.2 表
SHOW TABLES: 查看数据库下所有表
DESC 表名:查看表结构
CREATE TABLE [IF NOT EXISTS] 表名 (列名 列类型, 列名 列类型, ......);
DROP TABLE 表名
* 修改表:前缀 ALTER TABLE 表名, alter table 表名 add|change|drop 列名 类型;
1. 添加列: ADD (列名 列类型, 列名 列类型, ......)
2. 删除列: DROP 列名
3. 修改列类型: MODIFY 列名 列类型
4. 修改列名: CHANGE 原列名 新列名 列类型
5. 修改表名: RENAME TO 新表名
2. DML
2.1 插入数据
INSERT INTO 表名
2.2 修改数据
UPDATE 表名 SET ... [where ...]
2.3 删除数据
DELETE FROM 表名 [where ...]
3. DQL
- 基本查询
- 条件控制
- 聚合
- 分组
- 排序
- 分页
3.1 基本查询
select * from 表名 [where ...]
select 列名1[, 列名2, ...] from 表名 [where ...]
select distinct * from 表名 [where ...] : 去重
select 列名 * 1.5 from 表名 [where ...]: 字符串被当做0
select 列名1 + 列名2 from 表名 [where ...]: NULL与任何运算都为NULL
3.2 条件控制
3.2.1 比较运算符
- 等于: =
- 大于: >
- 大于等于: >=
- 小于: <
- 小于等于: <=
- 不等于: !=或<>
select * from students where id > 3;
select * from subjects where id <= 4;
select * from students where sname != '黄蓉';
select * from students where isdelete = 0;
3.2.2 逻辑运算符
- and
- or
- not
select * from students where id>3 and gender=0;
select * from students where id<4 or isdelete=0;
3.2.3 模糊查询
- like: 关键字
- % 表示可以匹配任意多个任意字符,0,1或多个
- _ 表示可以匹配一个任意字符,1个
select * from students where sname like '黄%'; 查询姓黄的学生
select * from students where sname like '黄_'; 查询姓黄并且名字是一个字的学生
select * from students where sname like '黄%' or sname like '%靖%'; 查询姓黄或叫靖的学生
3.2.4 范围查询
- in 表示在一个非连续的范围内
- between ... and ...表示在一个连续的范围内
select * from students where id in(1,3,8); 查询编号是1或3或8的学生
select * from students where id between 3 and 8; 查询学生是3至8的学生
select * from students where id between 3 and 8 and gender=1; 查询学生是3至8的男生
3.2.5 空判断
- null与' '是不同的
- 判空 is null
- 判非空 is not null
select * from students where hometown is null;查询没有填写地址的学生
select * from students where hometown is not null; 查询填写了地址的学生
select * from students where hometown is not null and gender=0; 查询填写了地址的女生
3.2.6 优先级
- 小括号,not,比较运算符,逻辑运算符
- and比or先运算,如果同时出现并希望先算or,需要结合()使用
3.3 聚合
- count(*) 计算总行数
- max(列)
- min(列)
- sum(列)
- avg(列)
select count(*) from students;查询学生总数
select max(id) from students where gender=0;查询女生的编号最大值
select min(id) from students where isdelete=0;查询未删除的学生最小编号
select sum(id) from students where gender=1;查询男生的编号之和
select avg(id) from students where isdelete=0 and gender=0;查询未删除女生的编号平均值
3.4 分组
- group by 列1,列2,列3...
- having 分组后的数据筛选
- having后面的条件运算符与where的相同
按照字段分组,表示此字段相同的数据会被放到一个组中
分组后,只能查询出相同的数据列,对于有差异的数据列无法出现在结果集中
可以对分组后的数据进行统计,做聚合运算
select 列1,列2,聚合... from 表名 group by 列1,列2,列3...
select gender as 性别, count(*) from students group by gender; 查询男女生总数
select hometown as 家乡,count(*) from students group by hometown;查询各城市人数
select 列1,列2,聚合... from 表名 group by 列1,列2,列3... having 列1,...聚合...
1. select count(*) from students where gender=1; 查询男生总人数
2. select gender as 性别,count(*) from students group by gender having gender=1;
对比where与having:
where是对from后面指定的表进行数据筛选,属于对原始数据的筛选
having是对group by的结果进行筛选
3.6 排序
- order by
- desc | asc
将行数据按照列1进行排序,如果某些行列1的值相同时,则按照列2排序,以此类推
默认按照列值从小到大排列
asc从小到大排列,即升序
desc从大到小排序,即降序
select * from 表名 order by 列1 asc|desc, 列2 asc|desc,...
select * from students where gender=1 and isdelete=0 order by id desc;查询未删除男生学生信息,按学号降序
select * from subject where isdelete=0 order by stitle;查询未删除科目信息,按名称升序
3.7 分页
- limit start,count
- 从start开始,获取count条数据
- start索引从0开始
当数据量过大时,在一页中查看数据是一件非常麻烦的事情
已知:每页显示m条数据,当前显示第n页, 求总页数:
查询总条数p1
使用p1除以m得到p2
如果整除则p2为总数页
如果不整除则p2+1为总页数
求第n页的数据
select * from 表名 limit start,count
select * from students where isdelete=0 limit (n-1)*m,m