MySQL基础(三)


子查询总结(还需添加p98)

要观察子查询的内容属于(列子查询还是标量子查询)

从而选择(IN,NOT IN….) 还是(=)

其实IN是无敌的

查询平均工资最低的部门信息和该部门的平均工资

select d.*,ag
from (
    select avg(salary) ag,department_id
    from employees
    group by department_id
    order by avg(salary)
    limit 1
) ag_dep
on d.department_id=ag_dep.department_id

联合查询

将多条查询语句的结果合并成一个结果

应用场景:要查询的结果来自于多个表,且多个表没有直接的连接关系,但查询的信息一致时。

语法

查询语句1
union
查询语句2
union
...;

案例:查询中国用户中男性的信息以及外国用户中年男性的用户信息

select id,name,csex from t_ca where csex='男'
union
select t_id,tNmae,tGender from t_ua where tGender='male';

注:结尾分号

  1. 联合查询的列数必须一致

  2. 要求多条查询语句的查询的每一列的类型和顺序最好一致

  3. union关键字是自动去重,union all 可以显示所有

DML语言

插入、修改、删除操作

插入语法

insert into 表名(列1...values(1...)

注:

  1. 插入的值的类型要与列的类型一致或兼容

  2. 不可以为null的列必须插入值,可以为null的列如何插入值?

  3. 列的顺序可以颠倒,只要值一一对应

  4. 列和值的个数必须一致

  5. 可以省略列名,默认所有列,而且列的顺序和表中的列的顺序一致

    insert into beauty
    values(18,'张飞','男','119',NULL,NULL)

    问题2:

    1. 方式一:插入一个null值
    2. 方式二:直接在插入时把不写列名

方式二语法

insert into 表名
set 列名=值,列名=,...

方式一支持多行插入,也支持子查询

image-20200917114520022

修改语法

update 表名
set 列名=新值,列名=新值,...
where 筛选条件;

案例1:修改beauty表中姓唐的女神的电话为138921837912

update beauty set phone='138921837912'
where name like '唐%'

修改多表语法(sql99)

update1 别名
inner|left|right join2 别名
on 连接条件
set=,...
where 筛选条件

案例:修改没有男朋友的女神的男朋友编号都为2号

update boys bo
right join beauty on bo.id=b.boyfriend_id
set b.boyfriend_id=2
where bo.id is NULL;

删除语句

单表的删除语法

delete from 表名 where 筛选条件

多表的删除语法

truncate table 表名(清空数据)

delete 表1的别名,表2的别名(看要删哪个表自己选)
from 表1 别名
inner|left|right join 表2 别名 on 连接条件
where 筛选条件;

案例:删除手机号以9结尾的女神信息

delete from beauty where phone like '%9';

image-20200917214712355

DDL语言

数据定义语言

库与表的管理

库的管理

库的创建

语法(可以加一个判断)

create database [if not exists] 库名

库的修改

没有直接的sql语句,可以改文件夹的名字

更改库的字符集

alter database books character set gbk

库的删除

drop database [if exists] books

表的管理

表的创建

create table 表名(
    列名 列的类型[(长度) 约束],
    列名 列的类型[(长度) 约束],
    列名 列的类型[(长度) 约束],
    ...
    列名 列的类型[(长度) 约束]
)

image-20200919135425260

表的修改

alter table 表名 add(加类型)|drop|modify(类型或约束) column 列名 类型 约束
alter table 原表名 rename to 新表名
alter table 表名 change column 原列名 新列名 类型

表的删除

drop table if exists book_author

image-20200919143141744

表的复制

仅仅复制表的结构

create table copy like author

复制表的结构+数据

create table copy2
select * from author;

只复制部分数据

create table copy3
select id,au_name
from author
where nation='中国';

仅仅复制某些字段

create table copy4
select id,au_name
from author
where 0;\表示恒不成立

案例(可以跨库复制表结构)

image-20200919144556353

myemmployees.departments,点之前的指的是库名

整形

分类:

tinyint ,smallint,mediumint,(int,integer),bigint

特点:

  1. 如果不设置无符号还是有符号,默认是有符号,如果想设置无符号,需要添加unsigned关键字
  2. 如果插入的数值超出了整形的范围,会报out of range异常,插入的值就是临界值
  3. 如果不设置长度,会有默认的长度(显示结果的宽度)zerofill关键字可以用于填充0,填充到设置的宽度为止

浮点型

分类

浮点型
float(M,D)
double(M,D)
定点型
dec(M,D)
decimal(M,D)

特点:

  1. M:整数部分+小数部分
  2. D:小数部分

如果超过输出临界值

M,D都可以省略

  1. 如果是decimal,则M默认是10,D默认是0

  2. 如果是float和double,则会根据插入的数值的精度来决定精度

定点数精度较高

字符型

较短的文本(最大的字符数)
char(M)
varchar(M)
较长的文本:
text
blob
枚举插入(不在括号内的不行
     大小写都可以,但输出都是小写)
enum('a','b','c')
set('a','b','c','d')

image-20200920124955523

set使用

image-20200920125334368 结果:

image-20200920125411087

日期型

image-20200920125907207

image-20200920125946408

datetime 和timestamp 的区别

image-20200920125614727


文章作者: 林秉逸
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 林秉逸 !
  目录