MySQL:基本操作进阶(二)

目录

续MySQL:基本操作进阶(一)

一、NULL值

1、NULL值与空值区别

2、查询空值与非空值

二、连接查询

1、内连接

2、左连接

3、右链接

总结


续MySQL:基本操作进阶(一)

一、NULL值

在 SQL 语句使用过程中,经常会碰到 NULL 这几个字符。通常使用 NULL 来表示缺失的值,也就是在表中该字段是没有值的。如果在创建表时,限制某些字段不为空,则可以使用 NOT NULL 关键字,不使用则默认可以为空。在向表内插入记录或者更新记录时,如果该字段没有 NOT NULL 并且没有值,这时候新记录的该字段将被保存为 NULL。需要注意 的是,NULL 值与数字 0 或者空白(spaces)的字段是不同的,值为 NULL 的字段是没有值的。在 SQL 语句中,使用 IS NULL 可以判断表内的某个字段是不是 NULL 值,相反的用 IS NOT NULL 可以判断不是NULL值。

1、NULL值与空值区别

  1. 空值长度为0不占空间NULL值的长度为null,占用空间
  2. is null无法判断空值
  3. 空值使用"=“或者”<>"来处理(!=)
  4. count()计算时,NULL会忽略,空值会加入计算

注:NULL是占用内存空间的,而空值则不占用内存空间 

alter table roster add address varchar(10);
select * from roster;
select count(address) from roster;

MySQL:基本操作进阶(二)_第1张图片

update roster set address=' ' where id=1;
select * from roster;
select count(address) from roster;

 MySQL:基本操作进阶(二)_第2张图片

2、查询空值与非空值

select * from roster where address is null;
查询空值

select * from roster where address is not null;
查询非空值

MySQL:基本操作进阶(二)_第3张图片

二、连接查询

MySQL 的连接查询,通常都是将来自两个或多个表的记录行结合起来,基于这些表之间的 共同字段,进行数据的拼接。首先,要确定一个主表作为结果集,然后将其他表的行有选择性的连接到选定的主表结果集上。
使用较多的连接查询包括:内连接、左连接和右连接

下面的实验,均已以一下两个表进行实验

MySQL:基本操作进阶(二)_第4张图片

1、内连接

  • MySQL 中的内连接是两张或多张表中同时符合某种条件的数据记录的组合。
  • 通常在 FROM 子句中使用关键字 INNER JOIN 来连接多张表,并使用 ON 子句设置连接条件。
  • 内连接是系统默认的表连接,所以在 FROM 子句后可以省略 INNER 关键字,只使用 关键字 JOIN。
  • 同时有多个表时,也可以连续使用 INNER JOIN 来实现多表的内连接。
  • 不过为了更好的性能,建议最好不要超过三个表

内连查询:通过inner join的方式将俩张表指定的相同字段的记录行输出出来

select 表名1.字段1,表名1.字段2 from 表名1 inner join 表名2 on 表名1.字段 = 表名2.字段; 


select pm.name,pm.特性,pokemon.属性 from pm inner join pokemon on pm.name=pokemon.name;

MySQL:基本操作进阶(二)_第5张图片

MySQL:基本操作进阶(二)_第6张图片

2、左连接

左连接也可以被称为左外连接, 在from子句中使用left join 或者 left outer join 关键字来表示

左连接以左侧表为基础表,接收左表的所有行,并用这些行与右侧参考中的记录进行匹配,也就是说 匹配左表的所有行以及右表中符合条件的行。

select * from pm left join pokemon on pm.name=pokemon.name;
#左表的内容将全部显示,右表只会显示与左表共同字段的记录,当右表没有数据将与null显示

MySQL:基本操作进阶(二)_第7张图片

3、右链接

右连接也称为右外连接,在from子句中使用right join 或者right outer join 关键字来表示。右连接跟左连接正好相反,它是以右表为基础表,用于接收右表中所有行,并用这些记录与左表中的行进行匹配。

select * from pm right join pokemon on pm.name=pokemon.name;

MySQL:基本操作进阶(二)_第8张图片

总结

常用查询

  • 可以使用order by进行针对某一个字段进行排序,使用asc为升序,可默认不写,使用desc为降序。如果同一条语句中写了两条排序字段,则默认按照第一个进行排序,等出现相同字段才会去使用第二个字段排序。
  • 使用and和or可以过来判断条件,常用在查询语句中筛选一些条件,使用在where条件后面
  • distinct 为查询不重复记录,在查询语句时,定义字段前面加上distinct就可以输出该字段的所有记录,重复的记录只输出一遍。
  • group by,表示分组,用来指定以哪个字段进行分组,其中还可以使用count(*)来表示统计行数,经常搭配使用。
  • limit表示限制,可以选定只显示前几行,或者从第几行开始的后几行内容。
  • 是指别名as,表示在对于表名或字段名较长的时候,使用as设置别名,可以方便降低复杂度。还可使用as来获取另一个表的内容,相当于克隆表的内容数据。as可以省略。
  • 通配符查询,有%表示任意长度的只读,_表示单个任意字符,查询时,经常配合like来进行模糊查询。

子查询

  • 子查询,就是当进行多个表进行查询时,可以使用子查询的结构作为主查询的判断条件进行。总的来说就是,将子查询的结果作为一个集合交给主查询。
  • 写法有两种,一种是在定义判断条件时,使用where in (子查询内容),或者将子查询结果直接作为主查询的表来实现,这样实现需要使用as将子查询的结果设置别名,不然报错。
  • 子查询还可以进行insert、update、delect、exists布尔判断,来设置。

视图
        视图就是将表的不同的内容加载到内存中,用来展现给不同的人看,视图可以理解为时一个快捷方式,加载速度快,不消耗磁盘资源,不影响数据库的资源,查询自己需要查询的内容非常方便快捷。

NULL值

        主要了解NULL和空值的区别,NULL是站空间的,长度为NULL,空值是不占空间的。

连接查询

  • 内连接inner join,显示的数据为左右表都同时满足条件。
  • 左连接 left join ,是以左表为基础显示,右表需满足条件。
  • 右连接right join ,是以右表为基础显示,左表需满足条件。
     

你可能感兴趣的:(mysql,数据库,sql)