DDL:数据定义语言
对数据库和数据表的管理
数据库
1、创建
create database [if not exists] databasename;
2、列举
show databases;
3、查看当前所在数据库
select database();
4、切换
use databasename;
5、删除
drop database [if exists] databasename;
数据表
注意:需要先指定数据库,如果没指定数据需要使用[databasename.]注明
1、创建
create table [if not exists] [databasename.]tablename(字段1 数据类型1,字段2 数据类型2,···字段N 数据类型N);
数据类型
数值–整数用int,非整数用double/float;
字符–varchar
日期–date
日期时间–datetime
2、列举
show table;
3、描述
desc [databasename.]tablename;
4、删除
drop table [if exists] [databasename.]tablename;
5、清空
truncate [databasename.]tablename;
DML:数据操作语言
管理数据表的数据
插入:insert
insert into tablename(colname1,colname2···) values(value1,value2,···)
更新:update
update tablename set colname1=newvalue [and colname2=newvalue2 and ···] [where 更新条件]
不加条件为全列更新
删除:delete
delete from tablename [where 删除条件]
不加条件为全表清空
DQL:数据查询语言
对表中数据查询和统计分析
基本查询
select 1 from 2 where 3 group by 4 having 5 order by 6 limit 7
执行顺序:from、[join on ]、where、group by、having、select、order by 、limit
- 决定查询的结果有哪些列,给定哪些列、结果就会显示这些列
- 表示查询哪张表,给定表名字
- 条件查询,只有满足条件的数据才会返回
- 实现分组
- 分组后的条件过滤
- 排序。默认ASC升序,DESC降序
- 分页输出。limit M,N 表示从M+1开始显示,显示N条
显示8到10条 limit 7,3
条件查询:where
- and/or
- like
- between··· and···;>、<、>=、<=、!=、=
- in\exist
- is null\is not null
聚合查询
count、sum、avg、max、min
分组查询:group by
having 条件过滤,搭配group by使用
排序查询:order by
desc 降序
分页查询:limit
结果保存
insert into tablename select ···
tablename需要事先创建,select里的列名称可以与tablename列名称不一样,但是数据类型跟列数必须一致
select ··· into tablename
from a表
多表查询
连接方式
内连接
笛卡尔连接:cross join
SELECT * FROM r, s;
SELECT * FROM r CROSS JOIN s;
条件连接:又叫θ-连接,笛卡尔积得到的记录中选择满足某个条件的,θ 表示条件中的 = / != / >= / <= / > / <等
SELECT r.a, r.b, s.c, s.d FROM r, s WHERE r.b <= s.c;
SELECT r.a, r.b, s.c, s.d FROM r INNER JOIN s ON r.b <= s.c;
等值连接:又叫内连接,笛卡尔积得到的记录中选择满足某个相等条件的,将条件连接中的 θ 换为 = 即可,等值连接是一种特殊的条件连接
SELECT r.a, r.b, s.c, s.d FROM r, s WHERE r.b = s.c;
SELECT r.a, r.b, s.c, s.d FROM r INNER JOIN s ON r.b = s.c;
自然连接:笛卡尔积得到的记录中选择同名的某个列相等的,将等值连接中的列限定为同名列即可,同名列只显示一次,是一种特殊的等值连接
SELECT r.a, r,b, s.c FROM r, s WHERE r.b = s.b;
--or
SELECT r.a, r.b, s.c FROM r INNER JOIN s ON r.b = s.b;
外连接
左外连接:连接(自然 / 等值 / θ-连接)结果加上左侧表失配行连右侧表全空值行
SELECT * FROM r RIGHT JOIN s ON r.b = s.b;
右外连接:连接(自然 / 等值 / θ-连接)结果加上右侧表失配行连左侧表全空值行
SELECT * FROM r RIGHT JOIN s ON r.b = s.b;
全外连接:连接(自然 / 等值 / θ-连接)结果加上左侧表失配行连右侧表全空值行和右侧表失配行连左侧表全空值行
(SELECT * FROM r LEFT JOIN s ON r.b = s.b)
UNION
(SELECT * FROM r RIGHT JOIN s ON r.b = s.b);
--or
select s.*,r.* from s full join r.b = s.b
子查询
查询结果的列来自同一张表,条件来自别的表