MySQL day2

目录

MySQL

把查询结果去除重复记录

  • 关键字:distinct
  • distinct只能出现在所有字段的最前方。
    这样就是表示两个字段联合去重。

连接查询

什么是连接查询?

  • 多张表联合起来查询数据

连接查询的分类

年代分类:

  • SQL92
  • SQL99

连接方式分类:

  • 内连接
    1. 等值连接
    2. 非等值连接
    3. 自连接
  • 外连接
    1. 左外连接(左连接)
    2. 右外连接(右连接)
  • 全连接(用的少)

当两张表进行连接查询时没有条件限制?

  • 查询结果条数为两张表的条数乘积。(笛卡尔积现象)

怎么避免笛卡尔积现象

  • 连接时加条件。
  • 匹配的过程中,匹配的次数没有减少。

内连接之等值连接

  • 条件是等量关系,所以称为等值连接。
  • 例:
    select
    e.ename,d.dname
    from
    emp e
    join
    dept d
    on
    e.deptno=d.deptno;

内连接之非等值连接

  • 条件不是一个等量关系,称为非等值连接。

内连接之自连接

  • 一张表连接自身。(一张表看成两张表)

外连接

  • 例:
    select
    e . ename,d. dname
    from
    emp e right join dept d
    on
    e. deptno = d. deptno ;
    right代表什么:表示将join关键字右边的这张表看成主表,主要是为了将这张表的数据全部查询出来,捎带着关联查询左边的表。
    在外连接当中,两张表产生了主次关系。
  • 带有right的是右外连接,又叫做右连接。
    带有left的是左外连接,又叫做左连接。
    任何一个右连接都有左连接的写法。任何一个左连接都有右连接的写法。

多表连接

子查询

什么是子查询?

  • select语句中嵌套select语句,被嵌套的语句称为子查询。

子查询都可以出现在哪里?

  • select
    …(select)…
    from
    …(select)…
    where
    …(select)…

where子句中的子查询

  • 找出比最低工资高的员工姓名和工资?
    select ename,sal from emp where sal >(select min(sal)from emp);

from子句中的子查询

  • 注意:From后面的子查询,可以将子查询的查询结果当做一张临时表。
  • 找出每个岗位的平均工资的薪资等级
  • select
    t.*, s. grade
    from
    (select job, avg(sal) as avgsal from emp group by job) t
    join
    salgrade s
    on
    t.avgsal between s .losal and s.hisal ;

在select后面出现的子查询

union合并查询结果集

  • 查询工作岗位是MANAGER和SALESMAN的员工
    select ename,job from emp where job = ‘MANAGER’
    union
    select ename,job from emp where job = ’ SALESMAN’ ;
  • union的效率要高一些。对于表连接来说,每连接一次新表,则匹配的次数满足笛卡尔积,成倍的翻。。。
    但是union可以减少匹配的次数。在减少匹配次数的情况下,还可以完成两个结果集的拼接。
  • **注意事项:**union在进行结果集合并的时候,要求两个结果集的列数相同。

limit

limit作用

  • limit是将查询结果集的一部分取出来,通常使用在分页查询当中。

limit怎么使用

  • 完整用法:limit startIndex,length
    startIndex是起始下标,length是长度 。
    起始下标从0开始。
    缺省用法:limit 5;这是取前5。
  • **注意:**mysql 当中limit在order by之后执行!

分页

  • 每页显示pagesize条记录
    第pageNo页:limit(pageNo - 1)* pagesize,pageSize

表的创建(建表)

建表的语法格式

  • create table 表名(字段名1 数据类型,字段名2 数据类型,字段名3 数据类型);
    表名:建议以t _ 或者tbl _ 开始,可读性强。

关于MySQL中常见的数据类型?

  • varchar
    会根据实际的数据长度动态分配空间。
  • char
    分配固定长度的空间去存储数据。
    使用不恰当的时候,可能会导致空间的浪费。
  • int
    数字中的整数型。
  • bigint
    数字中的长整型。
  • float
    单精度浮点型数据。
  • double
    双精度浮点型数据。
  • data
    短日期类型。
  • datatime
    长日期类型。
  • clob
  • 字符大对象。
    最多可以存储4G的字符串。
    比如:存储一篇文章,存储一个简介。
  • blob
    二进制大对象。
    专门用来存储图片、声音、视频等流媒体数据。
    往blob类型字段上插入数据时,需要使用IO流。

删除表

  • drop table;
    drop table if exists 表名;

插入数据(insert)

  • 语法格式:
    insert into 表名(字段名1,字段名2,字段名3…) values(值1,值2,值3…);
  • **注意:**字段名和值要一一对应。什么是一一对应? 数量要对应。数据类型要对应。
    前面的字段名省略,等同于都写上了

insert插入日期

  • str_to_date:将字符串varchar类型转换成date类型。
  • data_format:将date类型转换成具有一定格式的varchar字符串类型。

date和datetime两个类型的区别?

  • date是短日期:只包括年月日信息。
  • datetime是长日期:包括年月日时分秒信息。
  • 在mysql当中怎么获取系统当前时间?
    now()函数。(datetime类型)

修改update

  • 语法格式:
    update 表名 set 字段名1=值1,字段名2=值2,字段名3=值3…where 条件;
  • 更新所有:
    不加条件。

删除数据delete

  • 语法格式?
    delete from 表名 where 条件;
  • **注意:**没有条件会删除整张表的数据。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值