多张表进行查询

1、表中存在的关系,一对一,一对多,多对多。

2、等值查询

SELECT 表1.字段名,表2.字段名 FROM 表1,表2WHERE 表1.关键字段=表2.关键字段;

可以使用别名,一旦使用别名则不能再使用表的名字来指定对应字段。

3、自连接查询

多表查询不仅可以在多张表之间查询,也可以在一张表之间进行多表查询

1、内连接 join on 语句,多个条件可以使用( )括起来

SELECT 表1.字段,表2.字段 FROM 表1 JOIN 表2 ON 表1.关键字段=表2.关键字段;

2、外连接 外连接分为左外连接( left outer join ) 和右外连接( right outer join )其值outer 可以省略。外连接查询时,条件用 on 连接,多个条件使用() 将其括起来.左外连接表示以左表为主表,右外连接表示以右表为主表。查询时将主表信息在从表中进行匹配

1、左外连接;

SELECT 字段列表 FROM 表1 LEFT JOIN 表2 ON 条件 ... ;

2、右外连接:

SELECT 字段列表 FROM 表1 RIGHT JOIN 表2 ON 条件 ... ;

3、子查询

1、单行子查询:

SELECT * FROM 表名 WHERE 字段名= ( 查询语句);

2、多列子查询:

SELECT * FROM 表名 WHERE (字段名1,字段名2)= (查询语句);;

注意,查询语句中的字段名应当与"="前的字段名一致。

3、多行子查询:

操作符有:IN,ALL,ANY,NOT IN

IN:在指定范围内即可

ALL:子查询返回列表的所有值都必须满足

ANY;满足返回列表中任意一个即可

4、关联子查询:

关联子查询与外部查询(主查询)之间存在联系,并且内部子查询的结果依赖于外部查询的值。内部子查询的执行取决于外部查询的每一行。

SELECT student_name,
(SELECT score FROM scores WHERE subject = 'Math' AND
students.student_id = scores.student_id) AS math_score
FROM students;

补充:

IFNULL用法:

可以接受两个参数,如果不是NULL,返回第一个参数。否则返回第二个参数。

IFNULL(NUM,'暂无');

CASE语句:

CASE 
​
 WHEN    条件1         THEN       返回值
​
 WHEN    条件1         THEN       返回值 
​
WHEN    条件1         THEN       返回值
​
ELSE      返回值
​
END

满足第一个条件时返回一个值,一旦条件为真,会停止读取并返回结果。如果都没有条件为真,则会返回ELSE子句的值。

如果没有ELSE自居部分且没有条件为真,则返回NULL。

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