1、创建和使用数据库(DDL: 数据定义语言. 主要指的是操作数据库, 操作数据表, 增加列.)
1) 查看当前数据库
show databases;
2)创建数据库
create database 数据库名称;
3)使用和切换数据库
use 数据库名称
4)删除数据库
drop database 数据库名称;
2、对表的操作
1)增
创建数据表
create table 数据表名(
列名 数据类型 [约束],
列名 数据类型 [约束],
。。。
);
约束
作用: 用来保证数据的完整性和安全性.
分类:
单表约束:
主键约束: primary key //auto_increment(自动增长)
唯一约束: unique
非空约束: not null
多表约束:
外键约束: foreign key
2)删
drop table 数据表名;
3)改
给表增加一列字段
alter table 表名 add 列名 数据类型 约束;
修改某列字段的约束和类型
alter table 表名 modify 列名 数据类型 约束;
修改某列字段的名字,约束,类型
alter table 表名 change 旧列名 新列名 数据类型 约束;
删除指定的列
alter table 表名 drop 列名;
修改表名
rename table 旧表名 to 新表名;
修改表的码表
alter table 表名 character set 指定的码表;
alter table 表名 charset 指定的码表;
4)查
查询所有的数据表
show tables;
查询指定数据表(表结构)
desc 数据表名;
3、SQL语句操作表数据(DML: 数据操作语言. 主要指的是操作数据, 增删改. //update, insert, delete)
1)添加
通过insert语句实现.
A: 创建表.
create table users(
uid int primary key auto_increment,
uname varchar(20),
age int
);
B: 通过SQL语句插入数据.
insert into users values(null,'王丽坤', 23), (null,'刘亦菲',31);
2)删
delete from 数据表名 where 条件; //删除表数据, 不会重置主键ID.
truncate table 数据表名; //删除表数据, 会重置主键ID.
3)改
update 数据表名 set 列名1=值,列名2=值,列名3=值 where 条件;
4)查(DQL: 数据查询语言. 主要指的是操作数据: 查询.)
select [distinct] 列名1, 列名2 as '别名',列名3... from 表名 where 分组前的条件筛选
group by 要分组的列 having 分组后的条件筛选 order by 要排序的列 [asc/desc] limit 起始索引, 结束索引;
A. 最基本的查询:
select * from 数据表名; //全列名
select 列名1,列名2,列名3 from 数据表名; //指定列名
B. 带别名的查询:
关键字 as
C. 带条件的查询:
a. 条件运算符
>,<, >=, <=, =, !=(<>)
b. 区间(范围)运算符
between 值1 and 值2;
c. 逻辑运算符
and or not
d. 固定值的查询
in (值1,值2,值3)
e. 模糊查询
like 条件.
//一般会结合占位符使用.
//_占一个位置 %占多个位置
D. 如果表中有重复数据, 可以将其去重: distinct
select distinct 字段名称1,字段名称2... from 表名;
E. 排序操作: order by
格式:
SELECT * 字段列表 FROM 表名 ORDER BY 排序字段1 [排序方式],排序字段2 [排序方式];
排序方式:
desc(降序) 和 asc(升序), 默认为升序排序
如果是多个字段排序, 会先按照第一个字段进行排序,如果第一个字段有相同的, 然后在按照第二个字段排序
F. 日期计算
select year('1988-01-01'); //获取年份, 即: 打印结果是为 1988
G. is null和 is not null值
格式:
字段 is null //筛选这个字段为null的数据
字段 is not null //筛选这个字段不为null的数据
4、聚合函数
count(); //一般用于获取数据表的行数.
max(); //获取某一列的最大值.
min(); //获取每一列的最小值.
avg(); //获取某一列的平均值.
sum(): //获取某一列的和.
5、SQL语言分类
DDL: 数据定义语言. 主要指的是操作数据库, 操作数据表, 增加列.
//create, drop, alter
DML: 数据操作语言. 主要指的是操作数据, 增删改. //update, insert, delete
DCL: 数据控制语言. 主要指的是 创建用户, 设置权限, 设置安全级别. //create, grant
DQL: 数据查询语言. 主要指的是操作数据: 查询.
//select, from, where
6、数据库的备份和还原
1) 备份命令
格式:
mysqldump -u 用户名 -p 数据库名 > 磁盘SQL文件路径
//由于mysqldump命令不是sql命令,需要在dos窗口下使用。
示例:
mysqldump -uroot -p123456 test01 >/root/test01.sql
//其中: test01是数据库的名字
2) 恢复命令
//注意: 恢复数据库,需要手动的先创建数据库:
格式:
create database test01; //创建数据库
mysql -u 用户名 -p 数据库名 < 磁盘SQL文件路径
示例:
mysql -uroot -p123456 test01 < /root/test01.sql
3) 注意:
在备份数据的时候,数据库不会被删除。可以手动删除数据库。同时在恢复数据的时候,
不会自动的给我们创建数据库,仅仅只会恢复数据库中的表和表中的数据。
4) 备份数据表. //备份数据表的时候, 只会备份结构(字段)和数据, 不会备份主键(约束).
备份表不存在:
create table 数据表名 select * from 要备份的数据表名;
备份表存在:
insert into 数据表名 select * from 要备份的数据表名;
7、多表查询
交叉查询: //理解, 没有什么特殊意义.
格式:
select * from 表A,表B; //查询结果是两张表的: 笛卡尔积.
//笛卡尔积指的是两张表(总条数)的乘积: 表A的总条数 * 表B的总条数
连接查询:
内连接查询: inner join
显示内连接:
select * from 表A inner join 表B on 条件;
//select * from 表A join 表B on 条件;
隐式内连接:
select * from 表A,表B where 条件;
外连接查询: outer join
左外连接查询:
select * from 表A left outer join 表B on 条件;
//select * from 表A left join 表B on 条件;
右外连接查询:
select * from 表A right outer join 表B on 条件;
//select * from 表A right join 表B on 条件;
子查询:
概述:
一个SQL语句的条件需要依赖另一个SQL语句的查询结果.
常用关键词的用法:
in: 只要满足其中一个就行.
//回忆:age=23 or age=24? 等价于 age in (23,24)
//in 表示条件应该是在多个列值中。
//in:使用在where后面,经常表示是一个列表中的数据,只要被查询的数据在这个列表中存在即可。
exists: //表示存在,当子查询的结果存在,就会显示主查询中的所有数据。
select * from A where exists(select A_ID from B);
union和union all的使用法 //要求拼接双方的表结构一致.
UNION语句:
用于将不同表中相同列中查询的数据展示出来;(不包括重复数据)
//select * from A union select * from B;
UNION ALL 语句:
用于将不同表中相同列中查询的数据展示出来;(包括重复数据)
case when语句:
格式:
CASE sex
WHEN '1' THEN '男'
WHEN '2' THEN '女'
ELSE '其他' END
来源:https://blog.csdn.net/sinat_26594945/article/details/102749651