MySQL入门

目录 :

一 . SQL预备

二 . DQL查询语言

1 . 基础查询

2 . 条件查询

3 . 模糊查询

4 . 排序查询

5 . 常见函数

5.1 单行函数
5.2 分组函数(聚合函数)

6 . 分组查询

7 . 连接查询

7.1 内连接
7.2 外连接

8 . 子查询

8.1 where或having后的子查询
8.2 select后的子查询
8.3 from后的子查询
8.4 exists后的子查询(相关子查询)

9 . 分页查询

10 . 联合查询

三 . DML操作语言

1 . 插入语句

2 . 修改语句

3 . 删除语句

四 . DDL定义语言

1 . 库的创建

2 . 库的修改

3 . 库的删除

4 . 表的创建

4.1 字段类型
4.2 约束

5 . 表的修改

6 . 表的删除

7 . 表的复制

[1]

  • DB : 数据库保存一组有组织的数据容器
  • SQL : 结构化查询语言
启动服务 net start mysql
停止服务 net stop mysql
登录 mysql -h 主机名 -P 端口号 -u 用户名 -p密码
退出 exit
show databases;
use 库名;
show tables;
show tables from 库名;不换库
select database();
create table 表名(字段1 字段类型,字段2 字段类型);
desc 表名;
select * from 表名;
select version();查看版本
  • SQL 语法不区分大小写,关键字大写,表名字段名小写
  • 命令以分号结尾
  • -- 注释
  • /* 多行注释*/
    [2]

1 . 基础查询

select distinct 字段1 as 别名1,字段2 as 别名2 ... from 表名; -- as可省略
select concat(字段1,字段2,字段3) as 别名 from 库名;
select ifnull(字段名, 返回值) as 别名;

2 . 条件查询

  • 条件运算符 > < = >= <= <>
  • 逻辑运算符 and or not

3 . 模糊查询

  • like -- 配合通配符
  • % -- 任意个字符
  • _ -- 单个字符
  • \ -- 转义
  • escape -- 指定转义
  • [not] between 区间头 and 区间尾 -- (含首尾,不可交换区间首尾)
  • in (值1,值2...)
  • is [not] null
  • <=> -- 安全等于

4 . 排序查询

order by  排序字段1(可以是表达式,别名) asc | desc (默认asc),排序字段2 [desc]

5 . 常见函数

5.1 单行函数

5.11 字符类
  • concate() -- 拼接
  • length() -- 字节长度
  • upper() -- 转大写
  • lower() -- 转小写
  • substr(原字符串,初始索引,截取长度) -- 截子串
  • instr(原字符串,子串) -- 子串第一次出现索引,无则0
  • trim() -- 去前后空格
  • trim(指定字符 from 原字符串) -- 去前后指定字符
  • lpad(原字符串,总长度,指定填充符) -- 左填充
  • rpad() -- 右填充
  • replace(原字符串,要换字符串,替换字符串) -- 替换
5.12 数学类
  • round(值,精度) -- 四舍五入
  • ceil() -- 向上取整
  • floor() -- 向下取整
  • truncate() -- 截断
  • mod() -- 模
  • rand() (0,1] -- 随机数
5.13 日期类
  • now() -- 当前系统日期+时间
  • curdate() -- 当前系统日期
  • curtime() -- 当前系统时间
  • year() month() monthname() day() hour() minute() second()
    -- 年 月 英文月 日 时 分 秒
  • str_to_date() -- 日期转换
  • date_format() -- 日期格式化
  • datediff(被减数日期,减数日期) -- 日期差天数
5.14 系统类
  • version() -- 当前版本
  • database() -- 当前库
  • user() -- 当前用户
  • password('字符') -- 加密
  • md5('字符') -- md5加密
5.15 条件分支
if(真值表达式,真执行,假执行) 条件执行
case 条件表达式 
when 常量1 then 返回值1
when 常量2 then 返回值2
...
else 返回值n+1
end
case 
when 条件1 then 返回值1 
when 条件2 then 返回值2 
...
else 返回值n+1 
end

5.2 分组函数(聚合函数)

sum([distinct] 数值) -- 非空和
avg(数值) -- 非空均值
max(字段) -- 非空最大值
min(字段) -- 非空最小值
count([distinct] 字段) -- 非空计数
count(*|1) -- 快速统计总行数

6 . 分组查询

select 分组函数,分组字段... 
where 分组前筛选条件,数据源和字段为原始表 
group by 分组字段... 
having 分组后筛选条件,数据源为分组后的结果集,字段为select后的字段
order by 排序字段 [desc];

7 . 连接查询(多表查询)

  • 笛卡尔积 : 多表直接查询结果行数为 行1 * 行2 * ...

7.1 内连接

7.11 等值连接
select 别名1.字段1,别名2字段2 
from 表1 别名1,表2 别名2(表改了别名,select若带表名则必须用别名)...
where 别名1.字段1=别名2.字段2
and ...
and 筛选条件
group by 分组字段
having 筛选条件
order by 排序字段;
7.12 非等值连接
select 字段1,字段2
from 表1 别名1,表2 别名2
where 别名1.字段11 between 别名2.字段21 and 别名2.字段22
and ...;
7.13 自连接
select 别名1.字段1,别名1.字段2...,别名2.字段1,别名2.字段2...
from 表名 别名1,表名 别名2;
7.15 内连接 inner join (表交集)
select 字段1,字段2...
from 表1 别名1
[inner] join 表2 别名2
on 连接条件1(等值条件|不等值条件)
[inner] join 表3 别名3
on 连接条件2
...
where 筛选条件
group by 分组字段
having 筛选条件
order by 排序字段
...;

7.2外连接(主表并集)

7.21 左连接 left [outer] join
select 字段1,字段2...
from 主表 别名1
left join 从表 别名2
on 连接条件
where 别名2.id is null
...;
7.22 右连接 right [outer] join (交换连接表顺序等同于左连接)
select 字段1,字段2...
from 从表 别名1
right join 主表 别名2
on 连接条件
where 别名1.id is null
...;
7.23 全外连接 full [outer] join (全表并集)
select 字段1,字段2
from 表1 别名1
full join 表2 别名2
on 连接条件
where 别名1.字段1 is null or 别名2.字段2 is null
...;
7.24 交叉连接 cross join (笛卡尔积)
select 字段1,字段2
from 表1 别名1
cross join 表2 别名2;

8 . 子查询

  • select 仅标量子查询(单行单列)
  • from 仅表子查询(多行多列)
  • where | having 标量子查询
  • 列子查询(单列)
  • 行子查询(单行)
  • exists 表子查询

8.1 where或having后的子查询

8.11 标量子查询(搭配> < = >= <= <>)
select 字段
from 表名
where 字段 >  <  =  >=  <=  <>(
    select 字段 from 表 where 字段=值
)
group by 字段
having 字段 > < = >=  <=  <> (标量子查询);
8.12 列子查询(搭配in,not in,any,some,all)
select 字段
from 表名
where 字段 [not] in(
    select [distinct] 字段
    from 表名
    where 条件
)
...;
in() 等价于 =any()
not in() 等价于 <>all()
>any() 等价于 >min()
>all() 等价于 >max()
8.13 行子查询
select 字段
from 表名
where (字段1,字段2...) = > < >= <= <> (
    select min(字段1),max(字段2)...
    from 表名
    ...
)
...;

8.2 select后的子查询

select 字段2,(
    select 字段1 from 表1 where 筛选条件
)
from 表2;

8.3 from后的子查询

select 别名1.*,别名2.字段
from (
    select 字段1,字段2
    from 表1
    group by 分组字段
) 别名1
inner join 表2 别名2
on 表1.字段1 between 字段3 and 字段4
...;

8.4 exists后的子查询(相关子查询)

select exists(select...);
-- 子查询结果存在,查询结果为1
-- 子查询结果不存在,查询结果为0

select 字段
from 表
where exists(select...);

9 . 分页查询

select ...
...
limit offset(起始索引从0开始,0可省略),size(条目个数);

limit (page-1)*size  size  -- 分页公式

10 . 联合查询

select ...
...
union [all]  -- 带all不去重
select ...   -- 每个查询列数必须相同,以第一个select字段命名
...
union
...;

[3]

1 . 插入语句

insert into 表名(字段1,字段2...) 
values(值1,值2...),(...),(...)...;
非空字段必须插值,顺序不限,字段名可省略
insert into 表名 select...;
insert into 表名 set 字段1=值1,字段2=值2...;

2 . 修改语句

update 表名 set 字段1=新值1,字段2=新值2... where 筛选条件;
update 表1 别名1 
inner | left | right join 表2 别名2 
on 连接条件 
set 字段1=值1,字段2=值2... 
where 筛选条件;

3 . 删除语句

delete from 表名 where 筛选条件;
delete [别名1] , [别名2]
from 表1 别名1
inner | left | right join表2 别名2
on 连接条件
where 筛选条件;
  • delete无法删除自增长断点,有返回值,可以回滚,truncate相反
truncate table 表名;

[4]

1 . 库的创建

create database if not exists 库名;

2 . 库的修改

rename database 库名 to 新库名;
alter database 库名 character set 字符集;

3 . 库的删除

drop database if exists 库名;

4 . 表的创建

create table 表名(字段名1 字段类型 [长度] [约束],...);

4.1 字段类型

4.11 整型
  • unsigned -- 设置无符号类型 , 默认有符号长度11
  • zerofill -- 不够长度填充0
4.12 浮点型
  • float(M,D) , double(M,D)
  • dec(M,D) , decimal(M,D)默认(10,0)
  • -- M有效数字长度 , 小数部位长度 , 均可省略
4.13 字符型
  • char(字符数) , varchar(字符数) , text , blob
4.14 枚举型
  • enum(枚举列表) -- 任选一个插入
  • set(集合列表) -- 任选任意个插入
4.15 日期和时间类型
  • date -- 只保存日期
  • datetime -- 范围大
  • timestamp -- 时间戳,受时区影响
  • time -- 只保存时间
  • year -- 只保存年

4.2 约束

  • 待补充

5 . 表的修改

5.1 修改表字段名

alter table 表名 change [column] 旧字段 新字段 新字段类型;

5.2修改表类型或约束

alter table 表名 modify column 字段 字段类型或约束;

5.3添加新字段

alter table 表名 add column 新字段 字段类型;

5.4删除字段

alter table 表名 drop column 字段名;

5.5修改表名

alter table 表名 rename to 新表名;

6 . 表的删除

drop table if exists 表名;

7 . 表的复制

7.1 仅复制表结构

create table 新表名 like 原表名;

7.2 表的结构和数据都复制

create 新表名 select 字段 from 原表名where...;

7.3 复制表的部分字段

create table 新表名 select 字段 from 原表名 where 0;

  1. 一 . SQL预备 ↩

  2. 二 . DQL查询语言 ↩

  3. 三 . DML操作语言 ↩

  4. 四 . DDL定义语言 ↩

你可能感兴趣的:(MySQL入门)