MySQL查询(数据过滤,内连接、外连接、自然连接、交叉连接和联合查询)

本文详细介绍了SQL的各种查询操作,包括基本查询过滤、条件查询过滤、模糊查询过滤、内连接查询、外连接查询、自然连接查询和交叉连接查询。内容涵盖了从查询单个字段到复杂连接查询的各个方面,对外连接查询中的左外连接、右外连接和自然连接进行了讲解,还提到了交叉连接查询和联合查询的用法。通过这些查询方式,能够灵活地处理和组合多个数据表的数据。
摘要由CSDN通过智能技术生成

基本查询过滤:可以用来查询所有字段数据或指定一个字段或者多个字段

SELECT * FROM USER;#查询所有字段数据
SELECT NAME,sex,age FROM USER;#查询一个或多个字段数据

条件查询过滤

AND(与)、OR(或)、IN(在范围内)、NOT IN(不在范围内)、BETWEEN AND(在..区间)

模糊查询过滤

SELECT * FROM USER NAME LIKE '张%';#LIKE '张%':查询该字段以“张”开头的数据
SELECT * FROM USER NAME LIKE '%张';#LIKE '%张':查询该字段以“张”结尾的数据
SELECT * FROM USER NAME LIKE '%张%';#LIKE '%张%':查询含字段以“张”的数据

内连接查询 

       内连接查询分为等值连接查询和非等值连接查询,它使用关键字inner JOIN ON,inner关键字可以省略。它是从左表中取出每一条记录,去与右表中所有的记录进行匹配,匹配成功后才会保留结果,否则不保留结果。
      SELECT*FROM左表[INNER]JOIN右表ON左表字段=右表字段:
      (1)ON关键字表示连接条件,条件字段代表相同的业务含义,如user. id和score.id。
      (2)内连接可以没有连接条件,没有ON之后的内容,这样会保留所有结果
      (3)内连接可以使用WHERE代替ON,通常不用WHERE,因为WHERE没有ON效率高。ON指匹配到第一条成功记录后就结束,(其他记录不匹配,若没有,则不进行匹配;而WHERE《一直匹配,并进行判断》(4)通常使用字段别名、表别名,在查询数据的时候,不同表有同名字段,需要使用别名加以区分。
     (5)等值连接:指使用等号“=”比较两个表的连接列的值,取两表连接列的值相等的记录。
     (6)非等值连接;指使用大于号“>”或小于号“<”比较两个表的连接列的值,取一个表大于或小于另一个表的连接列值的记录。

SELECT * FROM USER u INNER JOIN score s ON u.id=s.id;#使用等值内连接查询
SELECT * FROM USER u JOIN score s ON u.id=s.id;#省略关键字inner
SELECT u.id uid ,u.name uname,u.sex usex,u.age uage,s.score,s.grade FROM USER u JOIN scores ON u.id=s.id;#使用别名,查询指定字段的别名
SELECT * FROM USER u JOIN score s;#省略on关键字查询,这样会保留所有结果
SELECT * FROM USER u INNER JOIN score s ON u.id>s.id;#使用非等值内连接查询

外连接查询

       外连接査询分为左外连接查询和右外连接查询。外连接查询是以一张表为基础,取出里面的所有记录,然后将每条记录与另外一张表进行连接,不管能不能匹配上,最终都会保留。也就是说,能匹配,正确保留;不能匹配,其他表的字段都置空null,它是使用关键字outer JOINON进行连接查询的。

   SELECT*FROM左表LEFT/RIGHT』JOIN右表ON左表字段=右表字段;
       (1)LEFT  JOIN也可写成 LEFT  OUTER  JOIN ,左连接查询返回左表中符合条件的所有行,如果左表中的某行记录在右表中没有匹配,那么在结果集中,相关右表的列显示为空null。
       (2)RIGHT  JOIN也可写成 RIGHT  OUTER  JOIN ,右连接查询返回所有符合条件的右表记录,如果右表中的记录在左表中找不到匹配,那么相关左表的列显示为空null。
       (3)ON后面的条件内容不可以省略。

SELECT * FROM USER u LEFT JOIN score s ON u.id=s.id;#左外连接,省略outer
SELECT * FROM USER u RIGHT JOIN score s ON u.id=s.id;#右外连接,省略outer
SELECT * FROM USER u LEFT OUTER JOIN score s ON u.id=s.id;#左外连接,不省略outer
SELECT * FROM USER u RIGHT OUTER JOIN score s ON u.id=s.id;#右外连接,不省略outer

自然连接查询

       自然连接查询在连接的两个表中的列名称相等时才能使用,MySQL以同名字段作为字段进行匹配,它使用关键字natural JOIN进行自然连接,这种连接很少使用。自然连接又可以分为自然内连接和自然外连接。
       SELECT  *  FROM  左表  LEFT/RIGHT  INNER  JOIN  右表  ON  using(字段名)
自然内连接示例:
       SELECT  *  FROM   user  NATURAL  JOIN  score;
自然左外连接示例:
       SELECT  * FROM  user  NATURAL  LEFT  JOlN  score; 

自然右外连接示例:
       SELECT  *  FROM user  NATURAL  RIGHT  JOIN   score;
外连接模拟自然左外连接示例:
       SELECT  *   FROM  user  LEFT  JOIN  score using(id);

SELECT * FROM USER NATURAL JOIN score;#自然内连接
SELECT * FROM USER NATURAL LEFT JOIN score;#自然左外连接
SELECT * FROM USER NATURAL RIGHT JOIN score;#自然右外连接
SELECT * FROM USER LEFT JOIN score USING(id);#外连接模拟自然左外连接

交叉连接查询

      交叉连接查询是从一张表中循环取出每一条记录,然后将每条记录都在另外一张表中进行匹配,匹配结果都会保留,而连接本身字段会增加,其最终结果称为笛卡尔积,它是使用关键字CROSSJOIN来进行叉连接查询的,
     SELECT  *  FROM USER  左表  CROSS  JOIN  右表或RROM左表,

SELECT * FROM USER CROSS JOIN score;#交叉连接查询,使用关键字cross join
SELECT * FROM USER,score;#交叉连接查询,from两个表

 联合查询

       联合查询是将多次查询结果合并起来进行拼接,其字段不会增加,要求两次查询的列数必须一致,列的类型可以不一样,多次SQL语句取出的列名可以不一致《此时以第一个SQL语句的列名为准,使用关键字UNION进行联合查询,会去掉重复的行,使用关键字UNIONaH进行联合查询,不会去掉重复的存在。ORDSYBY不能直接使用,需要对查询语句使用括号才行,要ORDERBY生效,就必须搭配UMIT,LMTP使用限定的最大数即可,推荐放到所有子旬之后,即对最终合并的结果来排序或筛选。
      SELECT column _ name FROM table1
      UN1ON(all)
      SELECT column name  FROM table2 

       联合查询经常用于查询同一个表,但是需求不同,如查询学生信息、男生身高升序、女生身高降序;进行多表查询,多个表的结构是完全一样的,保存的数据(结构)也是一样的。

SELECT id FROM USER
UNION 
SELECT id FROM score;#查询user表的id和score表的id

SELECT id,NAME FROM USER
UNION 
SELECT id,score FROM score;#查询user表的id、name和score表的id、score

(SELECT id,NAME FROM USER ORDER BY id DESC LIMIT 0,2)
UNION 
(SELECT id,score FROM score ORDER BY id DESC LIMIT 0,2);#使用ORDER BY LIMIT需要使用括号()

(SELECT id,NAME FROM USER WHERE age>20)
UNION 
(SELECT id,score FROM score WHERE score>80) ORDER BY id LIMIT 0,2;

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

老衲只用阿道夫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值