码迷,mamicode.com
首页 > 数据库 > 详细

MySQL-DAY02

时间:2020-03-14 13:04:33      阅读:78      评论:0      收藏:0      [点我收藏+]

标签:tor   写法   适合   into   row   并且   ack   字段名   数字   

MySQL-DAY02

1. 查询结果去重

mysql> select distinct job from emp; // distinct关键字去除重复记录。

技术图片

注意:distinct只能出现在所有字段的最前面。

技术图片

2. 连接查询

2.1 连接查询的分类

根据语法出现的年代来划分的话,包括:

  • SQL92(一些老的DBA可能还在使用这种语法。DBA:DataBase Administrator,数据库管理员)

SQL99(比较新的语法)

根据表的连接方式来划分,包括:

  • 内连接:

    • 等值连接

    • 非等值连接

    • 自连接

  • 外连接:

    • 左外连接(左连接)

    • 右外连接(右连接)

  • 全连接(这个不讲,很少用!)

2.2 笛卡尔积现象

笛卡尔积现象:当两张表进行连接查询的时候,没有任何条件进行限制,最终的查询结果条数是两张表记录条数的乘积。

关于表的别名:

select e.ename,d.dname from emp e,dept d;

表的别名有什么好处?

  • 第一:执行效率高。

  • 第二:可读性好。

怎么避免笛卡尔积现象?加条件进行过滤。

注意:避免了笛卡尔积现象,不会减少记录的匹配次数,只是显示的是有效记录。

2.3 内连接

语法:

...
A
inner join //inner可以忽略
B
on
连接条件
where
...

SQL99语法结构更清晰一些:表的连接条件和后来的where条件分离了。

等值连接:条件是等量关系。

非等值连接:连接条件中的关系是非等量关系。

自连接:一张表看做两张表。自己连接自己。

2.4 外连接

最重要的特点是:主表的数据无条件的全部查询出来。

语法:

...
A
left(right) outer join //outer可以忽略
B
on
连接条件
where
...

左外连接(左连接)和右外连接(右连接)的区别:

  • 左外连接(左连接):表示左边的这张表是主表。

  • 右外连接(右连接):表示右边的这张表是主表。

  • 左连接以左面的表为准和右边的表比较,和左表相等的不相等都会显示出来,右表符合条件的显示,不符合条件的不显示。

  • 右连接恰恰相反,以上左连接和右连接也可以加入outer关键字,但一般不建议这种写法。

  • 左连接有右连接的写法,右连接也会有对应的左连接的写法。

2.5 内连接与外连接的区别

内连接:

  • 假设A和B表进行连接,使用内连接的话,凡是A表和B表能够匹配上的记录查询出来,这就是内连接。

  • AB两张表没有主副之分,两张表是平等的。

外连接:

  • 假设A和B表进行连接,使用外连接的话,AB两张表中有一张表是主表,一张表是副表,主要查询主表中的数据,捎带着查询副表,当副表中的数据没有和主表中的数据匹配上,副表自动模拟出NULL与之匹配。

2.6 三张表连接

....
A
join
B
join
C
on
...

表示:A表和B表先进行表连接,连接之后A表继续和C表进行连接。

3. 子查询

select语句当中嵌套select语句,被嵌套的select语句是子查询。

子查询可以出现在哪里?

        select
..(select).
from
..(select).
where
..(select).

4. Union

可以将查询结果集相加

select ename,job from emp where job in(‘MANAGER‘,‘SALESMAN‘);

可以改写为

select ename,job from emp where job = ‘MANAGER‘ union select ename,job from emp where job = ‘SALESMAN‘;

5. limit

limit是mysql特有的,其他数据库中没有,不通用。(Oracle中有一个相同的机制,叫做rownum)

limit取结果集中的部分数据,这是它的作用。

语法机制:

limit startIndex, length
  • startIndex表示起始位置,从0开始,0表示第一条数据。

  • length表示取几个。

limit是sql语句最后执行的一个环节:

select          5
...
from 1
...
where 2
...
group by 3
...
having 4
...
order by 6
...
limit 7
...;

每页显示pageSize条记录:

第pageNo页:(pageNo - 1) * pageSize, pageSize

pageSize是什么?是每页显示多少条记录

pageNo是什么?显示第几页

java代码

{
int pageNo = 2; // 页码是2
int pageSize = 10; // 每页显示10条
limit (pageNo - 1) * pageSize, pageSize;
}

6. 创建表

建表语句的语法格式:

        create table 表名(
字段名1 数据类型,
字段名2 数据类型,
字段名3 数据类型,
....
);
create table tableName(
  columnName dataType(length),
  ......
  columnName dataType(length)
);

创建表的时候,表中有字段,每一个字段有:

  • 字段名

  • 字段数据类型

  • 字段长度限制

  • 字段约束

MySql常用数据类型

类型描述
Char(长度) 定长字符串,存储空间大小固定,适合作为主键或外键(String)
Varchar(长度) 变长字符串,存储空间等于实际数据空间(StringBuffer/StringBuilder)
double(有效数字位数,小数位) 数值型(java中的double)
Float(有效数字位数,小数位) 数值型(java中的float)
Int(长度) 整型(java中的int)
bigint(长度) 长整型(java中的long)
Date 日期型:年月日(对应Java中的java.sql.Date类型)
DateTime 日期型:年月日 时分秒 毫秒
time 日期型:时分秒
BLOB Binary Large OBject(二进制大对象) (存储图片、视频等流媒体信息)(对应java中的Object)
CLOB Character Large OBject(字符大对象) (存储较大文本,比如,可以存储4G的字符串。) Character Large OBject(对应java中的Object) (对应java中的Object)
其它……  

char和varchar怎么选择?

  • 在实际的开发中,当某个字段中的数据长度不发生改变的时候,是定长的,例如:性别、生日等都是采用char。

  • 当一个字段的数据长度不确定,例如:简介、姓名等都是采用varchar。

7 增加/删除/修改表结构

采用alter table来增加/删除/修改表结构,不影响表中的数据。

增删改查有一个术语:CRUD操作

Create(增) Retrieve(检索) Update(修改) Delete(删除)

7.1 添加字段

alter table t_student add email varchar(255);

技术图片

7.2 修改字段

alter table t_student modify email varchar(100);

技术图片

7.3 删除字段

alter table t_student drop email;

技术图片

8 添加、修改和删除数据

添加、修改和删出都属于DML,主要包含的语句:insert、update、delete

8.1 insert

语法格式

insert into 表名(字段名1,字段名2,字段名3,....) values(值1,值2,值3,....)

要求:字段的数量和值的数量相同,并且数据类型要对应相同。

技术图片

省略字段的插入:字段可以省略不写,但是后面的value对数量和顺序都有要求。

技术图片

一次插入多行数据

insert into 表名(字段名1,字段名2,....) values(值1,值2,....),(值1,值2,....),...;

注意:

  • 当一条insert语句执行成功之后,表格当中必然会多一行记录。

  • 即使多的这一行记录当中某些字段是NULL,后期也没有办法在执行insert语句插入数据了,只能使用update进行更新。

8.2 表的复制

语法:

create table 表名 as select语句;

将查询结果当做表创建出来

技术图片

将查询结果插入到一张表中

技术图片

8.3 update

可以修改数据,可以根据条件修改数据。

语法格式:

update 表名 set 字段名称1=需要修改的值1,字段名称2=需要修改的值2 where 条件;

注意:没有条件整张表数据全部更新。

技术图片

8.4 delete

可以删除数据,可以根据条件删除数据

语法格式:

Delete from 表名 where 条件;  

注意:没有条件全部删除。

技术图片

怎么删除大表中的数据?(重点)

truncate table 表名; // 表被截断,不可回滚。永久丢失。

删除表?

drop table 表名; // 这个通用。
drop table if exists 表名; // oracle不支持这种写法。

MySQL-DAY02

标签:tor   写法   适合   into   row   并且   ack   字段名   数字   

原文地址:https://www.cnblogs.com/winterriver/p/12491241.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!