?(查询中表名=关键字时可以在外面加''单引号)
一、内连接
定义:内连接是返回连接表中符合连接条件记录的连接查询
1.显式内连接(结构较清晰)
SELECT name,class
FROM student AS s
INNER JOIN studentClass AS c
ON s.id = c.id
翻译:
SELECT 所查列名1(字段),所查列名2(字段)
FROM 表1(主表) AS 表1的小名(别名)
INNER JOIN 表2(副表) AS 表2的小名(别名)
ON 表1公有列=表2公有列(条件)
2.隐式内连接(逻辑较清晰)
SELECT name, class
FROM student AS s, studentClass?AS c
WHERE s.id = c.id
翻译:
SELECT 字段1,字段2
FROM 表一 AS 小名,表二 AS 小名
WHERE 表一公有字段1=表二公有字段2
二、外连接
定义:外连接是以一张表为基表,返回基表中所有记录及连接表中符合条件的记录的连续查询
1.左连接
定义:左外连接是以左表为基表,返回左表中所有记录及连接表中符合条件的记录的外连接
SELECT name, class
FROM student AS s
LEFT JOIN studentClass?AS c
ON s.id = c.id
翻译:
SELECT 字段1,字段二
FROM 左表 AS 小名
LEFT JOIN 右表 AS 小名
ON 左表公有字段1=右表公有字段2
2.右连接
定义:右外连接是以右表为基表,返回右表中所有记录及连接表中符合条件的记录的外连接
SELECT name, class
FROM student AS s
RIGHT JOIN studentClass?AS c
ON s.id = c.id
翻译:
SELECT 字段1,字段二
FROM 右表 AS 小名
RIGHT JOIN 左表 AS 小名
ON 左表公有字段1=右表公有字段2
内外连接区别:
内连接=交集(没有空数据,不一定包含完整的表)
外连接=主表+交集(有一基表,不满足有空数据,基表还是完整的)
三、子查询
定义:子查询是在一个查询的内部包括另一个查询的查询方式
例:查询所有比张三成绩高的同学
SELECT * FROM stu
WHERE score >(SELECT score FROM stu WHERE name='张三')
翻译:
SELECT * FROM 表
WHERE 字段 >
(SELECT 字段 FROM 表 WHERE 字段2='条件')
关键字 | 用法 | 例子 | distinct | 唯一的值(重复的不计) | select DISTINCT 字段 from 表 | group by ...??having... | 对查询到的结果集进行分组 | select city group by city having count(memberId)>=3 查询城市成员总数大于等于3的城市,同时按城市名分组 | inner join | 多表查询 | 内连接处例子 | left join | 多表查询 | 外连接处例子 | as | 使用别名 | | between...and... | 在..和..之间 | | in (..,..,..,..) | 在()中的数据之间 | in (85,86,88) | or | 或者 | class='95031' or ssex='女' | order by...desc | ORDER BY 关键字默认按照升序对记录进行排序。如果需要按照降序对记录进行排序,可以使用 DESC关键字。 | select *from score order by Cno,Degree desc 以Cno升序、Degree降序查询Score表的所有记录。 | count(*) | 聚合函数-求列数 | select count(*) from student where class='2184' | max() | 聚合函数-求最大值 | select MAX(Degree) as maxfen,MIN(Degree) as minfen from Score where Cno='3-105' | min() | 聚合函数-求最小值 | | sum() | 聚合函数-求和 | | avg() | 聚合函数-求平均值 | | any | 任意一个 <\<=any相当于:父查询中的结果集小于子查询中任意一个值(小于子查询结果集中的最大值),则为真; >\>=any相当于:父查询中的结果集大于子查询中任意一个值(大于子查询结果集中的最小值),则为真; =any相当于in:父查询条件表达式存在于子查询的结果集中里 无<>/!=any | T1(2,3) T2(1,2,3,4) 测试 select * from T2 where n > ANY(select n from T1) 结果显示: 3,4 | all | 所有 <\<=all相当于:父查询中的结果集小于子查询中每一个值(小于子查询结果集中的最小值),则为真; >\>=all相当于:?父查询中的结果集大于子查询中每一个值(大于子查询结果集中的最大值),则为真; <>/!=all相当于not in =all相当于in | T1(2,3) T2(1,2,3,4) 测试 select * from T2 where n > ALL(select n from T1) 结果显示: 4 | some | some=any | |
|