Mysql语句总结(3)
2017-07-27 19:38
127 查看
多表查询(重要)
多表查询分为:
合并结果集 - UNION /UNION ALL
连接查询 -
内连接 (inner) join on
外连接 outer join on
左外连接 left (outer) join
右外连接 right (outer) join
自然连接 nature join
子查询
1 合并结果集
UNION - 去重复记忆
UNION all -不去重复记忆
要求 被合并的两个结果列数 和列类型必须相同
SELECT * FROM emp UNION SELECT *FROM dept;SELECT * FROM emp UNION ALL SELECT *FROM dept;
SELECT deptno FROM emp UNION SELECT deptno FROM dept;
SELECT * FROM emp UNION ALL SELECT *FROM dept;
注意 这个时候出现的是笛卡尔积 类似排列组合
SELECT * FROM emp,dept;筛选出我们想要的结果
SELECT * FROM emp,dept WHERE emp.deptno=dept.deptno;2.1内连接
上面的连接语句就是内连接 只不过不是SQL标准的查询方式
SELECT * FROM emp INNER JOIN dept ON emp.deptno=dept.deptno;inner 可以省略
SELECT * FROM emp JOIN dept ON emp.deptno=dept.deptno;别名
SELECT * FROM emp e JOIN dept d ON e.deptno=d.deptno;外连接(左连接,右连接)
查询出的结果存在不满足条件的可能
左连接
先查询左表(主),再查询右表,
右表中满足条件的显示出来 否则null
SELECT *FROM emp e LEFT OUTER JOIN dept d ON e.deptno=d.deptno;SELECT *FROM emp e RIGHT OUTER JOIN dept d ON e.deptno=d.deptno;
3 自然连接
与内连接一样,会自动匹配相同的名字,相同类型的字段
SELECT *FROM emp NATURAL JOIN dept;SELECT *FROM emp NATURAL LEFT JOIN dept;
SELECT *FROM emp NATURAL RIGHT JOIN dept;
合并结果集
4子查询(非常重要)
SELECT *FROM emp;
工资高于jones 的员工
1,找到JONES的工资
SELECT sal FROM emp WHERE ename = ‘JONES’;2,找到工资高于2975的人
SELECT *FROM emp WHERE sal > 2975;SELECT *FROM emp WHERE sal > (SELECT sal FROM emp WHERE ename = ‘JONES’);
查询与SCOTT同一个部门的员工
SELECT *FROM emp WHERE deptno = (SELECT deptno FROM emp WHERE ename =’SCOTT’);工资高于30号部门所有人的员工信息
SELECT *FROM emp WHERE sal>(SELECT max(sal)FROM emp WHERE deptno = 30);查询工作和工资与MARTIN完全相同的员工信息
SELECT *FROM emp WHERE job =(SELECT job FROM emp WHERE ename =’MARTIN’) AND sal = (SELECT sal FROM emp WHERE ename =’MARTIN’)SELECT *FROM emp WHERE (job,sal) IN (SELECT job,sal FROM emp WHERE ename = ‘MARIN’);
查询有两个以上直接下属的员工信息
SELECT *FROM emp WHERE empno IN (SELECT mgr FROM emp GROUP BY mgrHAVING COUNT(mgr)>=2);
查询7369员工编号,姓名,经理编号,经理姓名
子连接
SELECT e1.empno,e1.ename,e1.mgr,e2.ename FROM emp e1,emp e2 WHERE e1.mgr=e2.empno AND e1.empno=7369;SELECT * FROM emp;
表与表之间的关系;
一对多
多对一
一对一
多对多
一对多 多对一(常见)
CREATE TABLE stu(sid INT PRIMARY KEY ,
name VARCHAR(50),
sex VARCHAR(10)DEFAULT ‘男’
);
CREATE TABLE score(
id INT,
score DOUBLE,
sid INT
);
多对多
CREATE TABLE teacher(tid INT PRIMARY KEY ,
name VARCHAR(50)
);
CREATE TABLE stu(
sid INT PRIMARY KEY ,
name VARCHAR(50)
);
CREATE TABLE tea_stu_rel(
tid INT,
sid INT
);
一对一,在一对多的模型下 将关联的两个字段设置为主键
外键约束:FOREIGN KEY
CREATE TABLE score(sid INT PRIMARY KEY ,
name VARCHAR(50),
sex VARCHAR(10)DEFAULT ‘男’);
CREATE TABLE score(
id INT,
score DOUBLE,
sid INT, – 外键类型一定要与关联的主键类型一致
#方式1
fk_score_sid 是我们自己起的名字 可以任意改变
CONSTRAINT fk_score_sid FOREIGN KEY (sid) REFERENCES stu(sid)
);
方式2
注意 当表中已经存在不合法数据 就无法再添加外键约束
ALTER TABLE score ADD CONSTRAINT fk_score_sid FOREIGN KEY (sid) REFERENCES stu(sid);相关文章推荐
- 对MySql经常使用语句的全面总结(必看篇)
- mysql语句优化总结(一)
- [转载]MySQL开发中常用的查询语句总结
- php+mysql非暴力查表的注入语句写法总结
- MySQL中的if和case语句使用总结
- 关于mysql 简单的查询语句 以及常用函数的 总结
- Mysql跨表更新 多表update sql语句总结
- mysql 语句总结
- MySQL入门(终结)- 常用语句简单总结
- 对mysql经常使用语句的详细总结
- 【MYSQL】基础SQL语句总结(二)
- MySQL总结之SQL语句的应用
- Mysql学习总结(3)——MySql语句大全:创建、授权、查询、修改等
- mysql操作数据库总结sql语句总结
- Mysql跨表更新 多表update sql语句总结
- mySQL基本语句总结第一篇
- 关于mysql 简单的查询语句 以及常用函数的 总结
- Oracle和Mysql-可行的插入多条记录的SQL语句(总结)
- 数据库基础sql语句总结(以Oracle为主介绍,并与mysql,sql server做对比)一
- mysql 查询语句总结