sql连接查询
单表查询
student表:
select 列名|* from 表名;
-- 查看全表
SELECT * FROM student;
*
可以匹配为全选
-- 在student表中查找赵六的信息
SELECT * FROM student WHERE sname = '赵六';
-- 查找年龄大于5的所有学生
SELECT * FROM student WHERE age > 5;
-- 查找孙八的年龄
SELECT age FROM student WHERE sname = '孙八';
-- 查找年龄在2到5的学生
SELECT sname FROM student WHERE age BETWEEN 2 AND 5;
连接查询
自连接
自连接,顾名思义就是自己和自己进行连接查询,使用的是同一张表
-- 查出年龄数值在表格里有id值相等的,此无实际意义,仅示例语法
SELECT t1.* FROM student t1 JOIN student t2
ON t1.age = t2.sId;
student表:
class表:
内连接
内连接必须满足相应条件才能查出
SELECT * FROM student s INNER JOIN class c ON s.class = c.stuClass;
inner 可以省略不写,写成非标准写法
外连接
左右连接,左连接是以左边表为主,条件满足时,显示,不满足是为null;
右连接则是以右边为主
左外连接
-- 插入一条记录
INSERT INTO student VALUES(7,'哈哈',9,'男',NULL);
-- student表 左连接 class表
SELECT * FROM student s LEFT JOIN class c ON s.class = c.stuClass;
右外连接
-- 添加一条记录到class表
INSERT INTO class VALUES (5,'哈尼克孜');
-- student表 右连接 class表
SELECT * FROM student s RIGHT JOIN class c ON s.class = c.stuClass;
嵌套查询
也叫子查询,就是一个查询一句包含另一个查询语句,所以叫嵌套。
内层查询语句的返回结果集作为外层查询语句的查询条件或者查询数据
- 作为查询的条件
-- 查询班级人数最多的班级的老师
SELECT teacher FROM class WHERE stuClass = (
SELECT class FROM student GROUP BY class HAVING COUNT(class) ORDER BY COUNT(class) DESC LIMIT 1
)
- 作为被查询的数据
-- 查询2班年龄大于5岁的学生
SELECT * FROM (
SELECT * FROM student WHERE class = 2
) t WHERE t.age > 5;
- 作为一列数据
SELECT sname,(SELECT age FROM student WHERE class = 4) t1 FROM student t;