MYSQL表操作

查询语法

SELECT 查询列表
FROM 表名或视图列表
【WHERE 条件表达式】
【GROUP BY 字段名 【HAVING 条件表达式】】
【ORDER BY 字段 【ASC|DESC】】
【LIMIT m,n】;

 

模糊查询

SELECT * FROM stu WHERE nameLIKE '李%';

% 匹配0-n个,_ 匹配一个

 

关联查询,联合查询

关联查询一共有几种情况:

  • 内连接:INNER JOIN 、CROSS JOIN

  • 外连接:左外连接(LEFT OUTER JOIN)、右外连接(RIGHT OUTER JOIN)、全外连接(FULL OUTER JOIN)

  • 自连接:当table1和table2本质上是同一张表,只是用取别名的方式虚拟成两张表以代表不同的意义

例:三表关联

SELECT ename,basic_salary,dname FROM t_employee INNER JOIN t_department INNER JOIN t_salary
ON t_employee.dept_id=t_department.did AND t_employee.eid=t_salary.eid;

 

外连接分为:

左外连接(LEFT OUTER JOIN),简称左连接(LEFT JOIN)

右外连接(RIGHT OUTER JOIN),简称右连接(RIGHT JOIN)

全外连接(FULL OUTER JOIN),简称全连接(FULL JOIN)。

 

自连接

#查询所有员工姓名及其领导姓名
SELECT emp.ename,mgr.ename
FROM t_employee AS emp LEFT JOIN t_employee AS mgr
ON emp.mid = mgr.eid;

 

 

-- 1、查询“c001”课程比“c002”课程成绩高的所有学生的学号;
SELECT a.sid AS '学号'
FROM sc a,sc b
WHERE a.sid = b.sid
AND a.cid = '001'
AND b.cid = '002'
AND a.score > b.score;

-- 2、查询平均成绩大于60 分的同学的学号和平均成绩;
SELECT sid as '学号',AVG(score) AS '平均成绩'
FROM sc
GROUP BY sid
HAVING AVG(score) > 60;

-- 3、查询所有同学的学号、姓名、选课数、总成绩;
select sc.sid as '学号',student.sname '姓名',sum(score),count(cid)
from student left join sc
on student.sid = sc.sid
group by sc.sid;

-- 4、查询姓“刘”的老师的个数;
select count(tName) '个数'
from teacher
where tName like '刘%';


-- 5、查询没学过“李老师”课的同学的学号、姓名;
select sid '学号',sname '姓名'
from student
where sid not in(
select sid from sc
where cid in(
select cid from course
where tid in(
select tid from teacher
where tName = '李老师'
)))

 

posted @ 2020-10-21 21:29  月下伊人丶  阅读(46)  评论(0)    收藏  举报