目录
between的用法 (跟and语法差不多)between是包含两边的值编辑
IN的用法
not in 取反的意思
between的用法 (跟and语法差不多)between是包含两边的值
同时,可以根据时间来设定:
函数
greatest:返回最大值(这个是横向比较) 是比较这一行 而max是这一列是纵向
NULL
子查询
子查询也被称作内查询或者嵌套查询,是指在一个查询语句里面还嵌套着另一个查询语 句。子查询语句是先于主查询语句被执行的,其结果作为外层的条件返回给主查询进行下一 步的查询过滤。
PS: 子语句可以与主语句所查询的表相同,也可以是不同表
select name,score from info where id in (select name from info where score >80);
以上同表示例:
主语句:select name,score from info where id
子语句(集合): select id from info where score >80
PS:子语句中的sql语句是为了,最后过滤出一个结果集,用于主语句的判断条件
⭐⭐ in: 将主表和子表关联/连接的语法
想查询ky01中 成绩大于19的数目
复杂的格式:
通过相同的字段去提取
第二种举例:先执行内查询,内查询的结果作为条件返回给外查询,然后再去执行
同时可以结合as语句
EXISTS
这个关键字在子查询时,主要用于判断子查
询的结果集是否为空。如果不为空, 则返回 TRUE;反之,则返回 FALSE,监测子查询的结果
表连接查询
MySQL 的连接查询,通常都是将来自两个或多个表的记录行结合起来,基于这些表之间的 共同字段,进行数据的拼接。首先,要确定一个主表作为结果集,然后将其他表的行有选择 性的连接到选定的主表结果集上。使用较多的连接查询包括:内连接、左连接和右连接
1、内连接
MySQL 中的内连接就是两张或多张表中同时符合某种条件的数据记录的组合。通常在 FROM 子句中使用关键字 INNER JOIN 来连接多张表,并使用 ON 子句设置连接条件,内连接是系统默认的表连接,所以在 FROM 子句后可以省略 INNER 关键字,只使用 关键字 JOIN。同时有多个表时,也可以连续使用 INNER JOIN 来实现多表的内连接,不过为了更好的性能,建议最好不要超过三个表
(1)语法
SELECT column_name(s)FROM table1 INNER JOIN table2 ON table1.column_name = table2.column_name;
举例说明:
通过内连接 inner join找出左表右表相同的部分
可以根据左连接,来表示两表之间相同的数据
可以通过右表连接,来表示两表之间相同的数据
多表连接:
不仅仅可以通过内连接找到两表之间相同的数据,也可以通过多表连接找到相同的数据
2.左连接
左连接也可以被称为左外连接,在 FROM 子句中使用 LEFT JOIN 或者 LEFT OUTER JOIN 关键字来表示。左连接以左侧表为基础表,接收左表的所有行,并用这些行与右侧参 考表中的记录进行匹配,也就是说匹配左表中的所有行以及右表中符合条件的行。
语法:mysql> select * from info left join infos on info.name=infos.name;
左连接中左表的记录将会全部表示出来,而右表只会显示符合搜索条件的记录,右表记录不足的地方均为 NULL。
右连接
右连接也被称为右外连接,在 FROM 子句中使用 RIGHT JOIN 或者 RIGHT OUTER JOIN 关键字来表示。右连接跟左连接正好相反,它是以右表为基础表,用于接收右表中的所有行,并用这些记录与左表中的行进行匹配
语法:mysql> select * from info right join infos on info.name=infos.name;
补充:两表全部查询
union all 将ky01的名字和ky02的名字都表示出来, 可以看出有重复的 如想驱虫,则删除all
查看左表没有相同的数据
ky02右表中没有相同的数据,所以反馈的是null
查看右表没有相同的数据
查看两个表没有交集的数据
简要的表明 就是将右表中没有的数据+左表中没有的数据 就等于没有交集的数据
总结: