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 = '李老师'
)))

浙公网安备 33010602011771号