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。