mysql基础操作

mysql基础操作

一、数据操作

1、insert插入数据

-- 基本语法:
insert into 表名 [(字段列表)] values (值列表);
-- 一次插入多条
insert into 表名 [(字段列表)] values (值列表),(值列表),(值列表),....;
insert into students values ('licu',20),('Arie',21);

主键冲突:

表中如果使用业务主键(有业务含义),在插入数据时,有不确定是否存在其主键,在插入数据时,如果有主键相同时,就会产生主键冲突。

主键冲突方案:

1、插入记录主键冲突,采用更新方法;

-- 解决方法语法:
insert into 表名 [(字段列表)] values (值列表)on duplicate key update 字段=新值;
-- 假如学生的stu0004主键被使用,插入的数据主键有使用了stu0004
insert into students values('stu0004','小婷') on duplicate key update stuname = '小婷';
-- 将原来的主键为stu0004的stuname的值,替换成'小婷'

2、主键冲突替换 :当主键冲突之后,干掉原来的数据,重新插入。

-- 基本语法:
replace into 表名([字段列表]) values (值列表);

2、蠕虫复制

蠕虫复制:一分为二,成倍增加。从已有的数据中获取数据,将获取的数据插入到表中

-- 基本语法
insert into 表名 [(字段列表)] select */字段列表 from 表;
-- 蠕虫复制注意主键冲突,蠕虫在业务上没什么意义,但可以在短时间内大量添加数据,进行测试

3、update更新数据

1、更新数据的时候,特别注意,通常是跟随条件;

-- 基本语法:
update 表名 set 字段名 = 新值 where 条件判断;

2、如果没有条件,是全表数据更新,可以使用limit 来限制数量 ;

-- 基本语法
update 表名 set 字段名 = 新值 [where条件判断] limit 数量;

4、delete删除数据

1、删除数据时,不全表删除,用where条件判断;

2、删除数据时,可以用limit限制数量;

-- 基本语法
delete from 表名 [where 条件];

Delete 删除数据时,无法重置auto_increment ;

MySQL中有一个重置表选项中自动增长语法:Truncate 表名; 它等于 drop 再create 。

5、select查询数据

-- 完整查询指令
 select (select选项) 字段列表 from 数据源 where 条件 group by 分组 having 条件 order by 排序 limit 限制;
 
 -- select选项:系统如何对待查询的结果;all保存所有记录,distinct 去重复;

1、where条件

对查询出来的数据进行条件筛选,where是通过运算符进行结果比较来判断。

2、group by字句

group by 表示分组的含义,根据指定的字段,将数据进行分组,分组的目的是进行统计。

-- 基本语法
group by 字段名;
select * from student where stuage>20 group by stuId;

group by 是为了分组后进行统计的,如果想看数据显示,group by没有意义;并且使用group by分组统计之后,只会保留每组的第一条数据(仅显示每组的第一条记录)。

group by分组的一些统计函数:

avg():求平均值;

count():统计每组的数量,如果统计目标是字段,是不统计null字段的;如果为“*”代表统计记录;

sum():求和

max():最大值

min():最小值

group_concat():将选定的字符串拼接

3、having字句

Having和where本质是相同,用来进行数据的条件筛选。

Having:在group by字句之后的,顺序不能乱的。可以针对分组数据进行筛选,where是不行的。

4、order by字句

将指定的字段进行排序

二、运算符

1、算术运算符

+、-、*、/、%:加减乘除求余
通常在不在条件中使用,而用于结果运算中。

2、比较运算符

> 、>=、<、<=、=、<>:大于、大于等于、小于、小于等于、等于、既大于又小于就不等于
用来条件中的限定

3、逻辑运算符

and、or、not:逻辑与、逻辑或、逻辑非
in:代替=,当结果不是一个值,而是结果集
基本语法:in(结果1,结果2,结果3....);
select *from student where stuId in ('stu001','stu002','stu003');
is:专门用于判断字段是否为null的运算符;
基本语法:is null / is not null;
like:用于进行模糊匹配;
基本语法:like '匹配模式';
_:匹配单个对应字符
%:匹配多个字符

三、高级查询

1、联合查询

1、概述

联合查询是可合并多个相似的选择查询的结果集。等同于将一个表追加到另一张表,从而实现两张表的查询组合到一起,使用的谓词:union或union all。查询的字段合并是纵向合并,字段数不变,结果集合并到一起。

2、应用场景

1、将同一张表的不同结果(需要多条查询语句来实现),合并到一起显示数据。

​ 比如:学生表中,男生身高升序查询,女生身高降序查询。

2、最常见,在大数据的情况下,会对表进行分表操作,需要对每张表进行部分数据显示,使用联合查询将数据显示在一起。

QQ1表在线数据,QQ2表在线数据

3、基本语法

-- 基本语法:
select 语句
union [union 选项]
select 语句;

-- union选项:1、distinct 去重;2、all 所有

-- 联合查询,使用到order by 字句时,需要键select语句括起来,同时要使用limit关键字来限制
(select 语句 order by 字段 limit 数量) union (select 语句 order by 字段 limit 数量);
-- 数量不确定,一般是一个比总记录数大就行。

2、连接查询

连接查询,就是将多张表连到一起进行查询(会导致记录数行和字段数列发生改变),它的意义:在关系型数据库中,实体与实体之间存在很多关联,可以通过连接查询来显示完整的数据。

连接查询分类:交叉连接、内连接、外连接(左连接和右连接)、自然连接

1、交叉连接:将两张表数据与另一张表彼此交叉,交叉连接产生的数据量很大,实际意义不大。

原理:

–1、从第一张表中依次取出每一条记录

–2、取出每条记录之后,与另一张表中的记录挨个进行匹配

–3、没有匹配条件,所有结果都会保留

–4、记录数 = 第一张表的记录数*第二张表的记录数;字段数 = 第一张表中的字段数+第二张中的字段数;

-- 基本语法
表1 cross join 表2;
select * from student cross join class;

2、内连接

内连接:inner join ,从一张表在中取出所有的记录去另一张表进行匹配,利用匹配条件进行匹配,匹配上的,就将结果保留下来;匹配不上的,放弃该结果。

-- 基本语法
表1 [inner] join 表2 on 匹配条件;  -- 匹配条件通常是等号,表1的某个字段值=表2对应的字段值
select * from student s inner join class c on s.classId = c.classId;
-- 查询学生以及他对应的班级

3、外连接

外连接:outer join ,以某一张表作为主表(表中的所有记录都会保留),根据条件去连接另一张表,而得到目标数据。

外连接分类:左外连接(left join),右外连接(right join);

左连接:左表为主表

右连接:右表为主表

-- 基本语法
左连接:主表 left join 从表 on 连接条件;
右连接:从表 right join 主表 on 连接条件;
select * from student s left join class c on s.classId = c.classId;
select * from class c right join student s on s.classId = c.classId;

3、using关键字

在连接查询中,用using来代替on关键字,进行条件匹配。

1、原理

–1、连接查询时,使用on的地方用using来代替;

–2、使用using的前提,对应两张表的字段名字要相同。

–3、如果使用using关键字,对应的同名字段,最终在结果中只会显示一个;

-- 基本语法
表1 [inner/left/right] join 表2 using(同名字段);

4、子查询

子查询是一种常用的计算机语言SELECT-SQL语言中嵌套查询下层的程序模块;当一个查询是另一个查询的条件时,称之为子查询。

子查询:指在一条select语句中,嵌入另一条select语句,那么被嵌入的select的语句被称之子查询语句。

子查询分类:

1、标量子查询:返回结果是一个数据源(一列一行 )

2、列子查询:返回结果是一列(一列多行 )

3、行子查询:返回结果是一行(一行多列)

4、表子查询:返回结果是多行多列

5、Exists 子查询:返回1 或 0(类似布尔型)

-- 标量子查询
---需求:知道一个学生名字:小猪,想知道他是哪个班级(班级名称)
---第一步:通过学生表获取他所在的班级id
---第二步:通过班级id,获取他的班级名称
-- 标量子查询语法:
select *from 数据源 where 条件判断 = 或 < >(大于或小于)(select 字段 from 数据源 where 条件判断);
selet *from my_class where class_id =(select class_id from my_student where stu_name='小猪');


-- 列子查询语法:
主查询 where 条件 in(列子查询);

---列子查询
---获取已经有学生在班的班级名称
---第一步:找出学生表中的所有班级id
---第二步:找出班级表中的班级
select class_name from my_class where class_id in (select class_id from my_student);

-- 行子查询语法:
主查询 where 条件 [(构造一个行元素)] =子查询;
---行子查询
---想获取班级年龄最大、且身高最高的学生
---第一步:求出班级年龄最大的值
---第二步:求出班级身高最大的值
---第三步:求出对应的学生
selet *from my_student where (stu_age,stu_height)=(select max(stu_age),max(stu_height) from my_student);

-- 表子查询语法
select (字段表)from(表子查询)as 别名 [where] [group by] [ having] [order by] [limit];






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值