EXISTS和NOT EXISTS子查询
EXISTS 子查询
语法:
SELECT * FROM 表名 WHERE EXISTS(子查询);
EXISTS关键字后面可以有任意的子查询,如果有返回结果则为true 否则为false;
EXISTS跟NOT EXISTS语法一样,不过是相同取反操作.
子查询注意事项:
1):子查询语句可以嵌套在任何表达式出现的位置.
嵌套在SELECT语句的SELECT子句中的子查询语句:
SELECT (子查询) FROM 表名;
子查询结果为单行单列,但不必指定列别名;
前台在SELECT语句的FROM子句中的子查询语句:
*SELECT FROM (子查询) AS 表的别名;
必须为表指定别名,一般返回对行多列数据记录,可以当做一张临时表;
2):只出现在子查询中而没有出现在父查询中的表不能包含在输出列中;
分组查询
使用group by 进行分组查询
#查看每个学员考试的平均分
SELECT studentNo 学员编号 , AVG(StudentResult) 平均成绩 FROM result GROUP BY StudentNo;
进行多列分组查询
#查询每个班班男同学和女同学的人数
SELECT COUNT(*) 人数,sex 性别,gradeID FROM students GROUP BY sex,gradeID;
使用HAVING子句进行分组筛选
#计算平均成绩大于80分以上的学生
SELECT studentNo 学号, AVG(StudentResult) 平均成绩
FROM result GROUP BY studentNo HAVING AVG(StudentResult)>80;
内连接查询
(1):INNER JOIN用来连接两个表
(2):INNER可以省略
(3):ON用来设置条件
(4):AS用来指定表的 ’别名’ .可写/也可不写
外连接查询
与内连接查询相对的方式称为外连接查询,在外连接中参与连接的表有主从之分,以主表的每行数据匹配从表的数据列,将符合连接条件数据直接返回到结果集中,对那些不符合连接条件的列.将被填上null值后在返回到结果集中;
左外连接查询
左外连接查询的结果集包括LEFT JOIN子句中指定的左表的所有行,而不仅仅是连接列所匹配的行;
左外链接查询使用LEFT JOIN…ON或LEFT OUTER JOIN…ON关键字来进行表之间的关联;
右外连接查询
右外连接查询与左外连接查询类似,只不过要包含右表中所有匹配的行.若右表中有的项在左表中没有对应的项,则以null填充;
右外链接查询使用RIGHT JOIN…ON或RIGHT OUTER JOIN…ON关键字来进行表之间的关联;
模糊查询LIKE
查询名字包含李的所有学生信息:
SELECT * FROM students WHERE studentName like ‘%李%’;