学生表

#创建表
CREATE TABLE LX_student( studentId INT(8) PRIMARY KEY NOT NULL, studentName VARCHAR(8) NOT NULL, studentSex VARCHAR(2) NOT NULL, Birthday DATE NOT NULL, Nation VARCHAR(6) NOT NULL, Address VARCHAR(20) NOT NULL, majorId INT(4), stuResume TEXT, stuCertificate BLOB,
FOREIGN KEY (majorId) REFERENCES LX_major(majorId)
);
​
#插入数据
INSERT INTO LX_student(studentId,studentName,studentSex,Birthday,Nation,Address,majorId)
VALUES (06053113,'唐李生','男','1987-4-19','汉','湖北省麻城',0501),
(07042219,'黄耀','男','1989-1-2','汉','黑龙江省牡丹江市',0403),
(06041138,'华美','女','1987-9-11','汉','河北省保定市',0403),
(07045120,'刘权利','男','1989-10-20','回','湖北省武汉市',0403),
(08055117,'王燕','女','1990-10-20','回','河南省安阳市',0501),
(08045142,'郝明星','女','1989-11-29','满','辽宁省大连市',0403),
(08053101,'高猛','男','1990-2-3','汉','湖北生黄石市',0501),
(08053124,'多桑','男','1988-10-26','藏','西藏',0501),
(08053160,'郭政强','男','1986-11-24','土家','湖南省吉首',0501),
(08053116,'陆敏','女','1990-8-3','汉','广东省东莞',0501),
(08053131,'林惠萍','女','1989-4-12','壮','广西省柳州市',0501),
(07093305,'郑家谋','男','1988-9-12','汉','上海市',0904),
(07093342,'罗家艳','女','1988-5-16','满','北京市',0904),
(07093325,'史玉磊','男','1988-9-11','汉','湖北省孝感市',0904),
(07093317,'凌晨','女','1988-6-28','汉','浙江省温州',0904),
(08041136,'徐栋梁','男','1989-12-20','回','陕西咸阳',0403),
(08041127,'巴朗','男','1989-12-25','蒙古','内蒙古',0403);

员工表

#创建表
CREATE TABLE emp (empno INT,ename VARCHAR (50),job VARCHAR (50),mgr INT,hiredate DATE,sal DECIMAL (7, 2),comm DECIMAL (7, 2),deptno INT
) ;
​
#插入数据
INSERT INTO emp VALUES(7369,'SMITH','CLERK',7902,'1980-12-17',800,NULL,20);
INSERT INTO emp VALUES(7499,'ALLEN','SALESMAN',7698,'1981-02-20',1600,300,30);
INSERT INTO emp VALUES(7521,'WARD','SALESMAN',7698,'1981-02-22',1250,500,30);
INSERT INTO emp VALUES(7566,'JONES','MANAGER',7839,'1981-04-02',2975,NULL,20);
INSERT INTO emp VALUES(7654,'MARTIN','SALESMAN',7698,'1981-09-28',1250,1400,30);
INSERT INTO emp VALUES(7698,'BLAKE','MANAGER',7839,'1981-05-01',2850,NULL,30);
INSERT INTO emp VALUES(7782,'CLARK','MANAGER',7839,'1981-06-09',2450,NULL,10);
INSERT INTO emp VALUES(7788,'SCOTT','ANALYST',7566,'1987-04-19',3000,NULL,20);
INSERT INTO emp VALUES(7839,'KING','PRESIDENT',NULL,'1981-11-17',5000,NULL,10);
INSERT INTO emp VALUES(7844,'TURNER','SALESMAN',7698,'1981-09-08',1500,0,30);
INSERT INTO emp VALUES(7876,'ADAMS','CLERK',7788,'1987-05-23',1100,NULL,20);
INSERT INTO emp VALUES(7900,'JAMES','CLERK',7698,'1981-12-03',950,NULL,30);
INSERT INTO emp VALUES(7902,'FORD','ANALYST',7566,'1981-12-03',3000,NULL,20);
INSERT INTO emp VALUES(7934,'MILLER','CLERK',7782,'1982-01-23',1300,NULL,10);

部门表

#创建表
CREATE TABLE dept (deptno INT,dname VARCHAR (14),loc VARCHAR (13)
) ;
​
#插入数据
INSERT INTO dept VALUES(10, 'ACCOUNTING', 'NEW YORK');
INSERT INTO dept VALUES(20, 'RESEARCH', 'DALLAS');
INSERT INTO dept VALUES(30, 'SALES', 'CHICAGO');
INSERT INTO dept VALUES(40, 'OPERATIONS', 'BOSTON'); 

连接查询

自然连接

#自然连接,两表之间无条件连接,生成n(第一张表行数)*m(第二张表行数)行数据的新表(笛卡尔积)(但是大部分数据是没有任何意义的)
语法:SELECT 查询列 FROM 表一 NATURAL JOIN 表二;(自然连接不需要连接条件)
例:SELECT * FROM grede NATURAL JOIN dept;

内连接

语法:SELECT 查询列 FROM 表一 JOIN 表二 ON 连接条件;
例:SELECT e.*,d.dname,d.loc FROM emp e JOIN dept d ON e.deptno = d.deptno;

外连接

分为左连接和右连接
#语法:(左连接)SELECT 查询返回列表 FROM 表一 别名 LEFT [INNER] JOIN 表二 别名 ON 连接条件
​
#查询emp表的所有数据,和对应部门信息(左连接)
SELECT e.*,d.dname,d.loc FROM emp e LEFT JOIN dept d ON e.deptno = d.deptno;
​
​
#语法:(右连接)SELECT 查询返回列表 FROM 表一 别名 RIGHT [INNER] JOIN 表二 别名 ON 连接条件
​
#查询dept表的所有数据,和对应员工信息信息(右连接)
SELECT d.*,e.* FROM emp e RIGHT JOIN dept d ON e.deptno = d.deptno;

自连接

顾名思义就是表自己和自己在某种条件下进行连接

#查询员工及其所属领导的名字
SELECT e.ename,a.ename FROM emp e,emp a WHERE e.empno = a.mgr;
​
​
#查询员工及其所属领导的名字,如果没有领导也要展示出来(外连接)
SELECT d.ename,e.ename FROM emp e RIGHT JOIN emp d ON e.empno = d.mgr;

联合查询

目的:使得两张不相干的表合并一起,以便查询(注意:两次查询结果返回的列数,和数据类型必须一致

#将薪资低于5000的员工,和年龄大于50岁的员工全部查询出来
​
SELECT * FROM emp WHERE sal > 2000
UNION             #UNION ALL 不去重    UNION 去重
SELECT * FROM emp WHERE job = 'manager';

(去重)

(不去重)

子查询

子查询就是嵌套查询,即SELECT中包含SELECT,如果一条语句中存在两个,或两个以上SELECT,那么就是子查询语句了。

语法:SELECT * FROM t1 WHERE column1 = ( SELECT column1 FROM t2 );

子查询外部的语句可以是INSERT / UPDATE / DELETE / SELECT 的任何一个。

分类:

子查询出现的位置:

  • where后,作为条件的一部分;

  • from后,作为被查询的一条表;

  • SELECT之后 ,作为被查询的一列;

当子查询出现在where后作为条件时,还可以使用如下关键字:

  • any

  • all

根据子查询结果不同,分为:

A. 标量子查询(子查询结果为单个值)

B. 列子查询(子查询结果为一列)

C. 行子查询(子查询结果为一行)

D. 表子查询(子查询结果为多行多列)

标量子查询

#查询“销售部”的所有员工信息
​
1.查询“销售部门”ID
SELECT deptno FROM dept WHERE dname = 'SALES';
​
2.根据部门ID查询员工信息
SELECT * FROM emp WHERE deptno = 30;
​
3.连接
SELECT * FROM emp WHERE deptno = (SELECT deptno FROM dept WHERE dname = 'SALES');
​
​
#查询在‘king’入职之后的员工信息
1.获取“king”入职日期
SELECT hiredate FROM emp WHERE ename = 'king';
​
2.查询比‘1981-11-17’更后入职员工信息
SELECT * FROM emp WHERE hiredate > '1981-11-17';
​
3.连接
SELECT * FROM emp WHERE hiredate > (SELECT hiredate FROM emp WHERE ename = 'king');
​

列子查询

子查询返回的结果是一列(可以是多行),这种子查询称为列子查询。

常用的操作符:IN 、NOT IN 、 ANY 、SOME 、 ALL

操作符 说明
IN 在指定的集合范围之内,多选一
NOT IN 不在指定的集合范围之内
ANY 子查询返回列表中,有任意一个满足即可
SOME 与ANY等同,使用SOME的地方都可以使用ANY
ALL 子查询返回列表的所有值都必须满足
#查询‘SALES’和‘RESEARCH’的所有员工信息
1.查询‘SALES’和‘RESEARCH’的部门编号
SELECT deptno FROM dept WHERE dname = 'SALES' OR dname = 'RESEARCH';
​
2.通过部门编号查询所有员工信息
SELECT * FROM emp WHERE deptno IN (20,30);
​
3.连接
SELECT * FROM emp WHERE deptno IN (SELECT deptno FROM dept WHERE dname = 'SALES' OR dname = 'RESEARCH');
​
​
#查询比‘SALES’所有人工资都高的员工信息
1.查询所有‘SALES’的员工工资
SELECT e.sal FROM emp e JOIN dept d ON e.deptno = d.deptno WHERE d.dname = 'SALES';
​
2.比财务部所有人工资都都高的员工信息
SELECT * FROM emp WHERE sal > ALL (SELECT e.sal FROM emp e JOIN dept d ON e.deptno = d.deptno WHERE d.dname = 'SALES');

行子查询

#查询与‘WARD’的薪资及直属领导相同的员工信息
1.查询‘WARD’的薪资及直属领导
SELECT sal,mgr FROM emp WHERE ename = 'WARD';
​
2.查询与‘WARD’的薪资及直属领导相同的员工信息
SELECT * FROM emp WHERE (sal,mgr) = (SELECT sal,mgr FROM emp WHERE ename = 'WARD');

表子查询

#表子查询
#查询与‘WARD’,‘SCOTT’的职位和薪资相同的员工信息
1.查询与‘WARD’,‘SCOTT’的职位和薪资
SELECT job,sal FROM emp WHERE ename = 'WARD' OR ename = 'SCOTT';
​
2.查询与‘WARD’,‘SCOTT’的职位和薪资相同的员工信息
SELECT * FROM emp WHERE (job,sal) IN (SELECT job,sal FROM emp WHERE ename = 'WARD' OR ename = 'SCOTT');
​
​
#查询入职时间是'1981-11-17'之后的员工信息,及其部门信息
1.入职时间是'1981-11-17'之后的员工信息
SELECT * FROM emp WHERE hiredate > '1981-11-17';
​
2.查询入职时间是'1981-11-17'之后的员工信息,及其部门信息
SELECT e.*,d.* FROM (SELECT * FROM emp WHERE hiredate > '1981-11-17') e LEFT JOIN dept d ON e.deptno = d.deptno;

两小时学会MySQL查询语句(上篇)http://t.csdn.cn/VvHoT

两小时学会MySQL查询语句(下篇)相关推荐

  1. 两小时学会MySQL查询语句(上篇)

    在实际开发中,对数据的查询占sql操作的90%以上,可见SQL查询是很重要的 首先我们创建三张学习表 创建表 学生表 #创建表 CREATE TABLE LX_student( studentId I ...

  2. 一个小时学会MySQL数据库

    致谢:一个小时学会MySQL数据库 一个小时学会MySQL数据库 目录 一.数据库概要 1.1.发展历史 1.1.1.人工处理阶段 1.1.2.文件系统 1.1.3.数据库管理系统 1.2.常见数据库 ...

  3. 【转载】一个小时学会MySQL数据库

    一个小时学会MySQL数据库 目录 一.数据库概要 1.1.发展历史 1.1.1.人工处理阶段 1.1.2.文件系统 1.1.3.数据库管理系统 1.2.常见数据库技术品牌.服务与架构 1.3.数据库 ...

  4. 网上搜集的MySQL查询语句大全集锦(经典珍藏)

    原文地址为: 网上搜集的MySQL查询语句大全集锦(经典珍藏) SQL查询语句大全集锦 MYSQL查询语句大全集锦 1:使用SHOW语句找出在服务器上当前存在什么数据库: mysql> SHOW ...

  5. mysql 查询语句执行顺序_MySQL 查询语句执行过程

    MySQL 查询语句执行过程 Mysql分为server层和存储引擎两部分,或许可以再加一层连接层 连接层(器) Mysql使用的是典型的C/S架构.连接器通过典型的TCP握手完成连接. 需要注的是, ...

  6. java mysql查询语句_Mysql查询语句执行过程

    Mysql查询语句执行过程 Mysql分为server层和存储引擎两部分,或许可以再加一层连接层 连接层(器) Mysql使用的是典型的C/S架构.连接器通过典型的TCP握手完成连接. 需要注的是, ...

  7. 一条mysql查询语句的执行过程

    当我们执行一条MySQL查询语句时,对于客户端而言是一个很简单的过程,但对于服务端来说其内部却会涉及到一些复杂的组件和处理逻辑.了解MySQL语句的内部执行原理,有助于我们更好地去处理一些复杂的SQL ...

  8. php面试专题---MYSQL查询语句优化

    php面试专题---MYSQL查询语句优化 一.总结 一句话总结: mysql的性能优化包罗甚广: 索引优化,查询优化,查询缓存,服务器设置优化,操作系统和硬件优化,应用层面优化(web服务器,缓存) ...

  9. mysql查询语句详解_基于mysql查询语句的使用详解

    1> 查询数据表除了前三条以外的数据. 起初我想到的是这条语句 SELECT * FROM admin WHERE userid NOT IN (SELECT userid FROM admin ...

最新文章

  1. php使用redis的GEO地理信息类型
  2. Django实战之开发面向用户的界面
  3. 有没有一种简单的方法可以按值删除列表元素?
  4. GB0-190 考试中的知识点分布
  5. Linux/Android多点触摸协议
  6. 顺序表应用1:多余元素删除之移位算法
  7. 搭建一个jupyter站点做数据分析吧
  8. 2013.11.18—2013.11.22周总结
  9. Unity的 UNet组件介绍
  10. 和为k的连续区间(51Nod-1094)
  11. DSP定点与浮点计算
  12. 海康威视第一季度营收165亿元 净利润22.84亿元
  13. Go语言入门之指针的使用
  14. SpringCloud 应用在 Kubernetes 上的最佳实践(二):部署篇 (开发部署)
  15. 淘票票经典Python爬虫案例
  16. 安装 Zabbix 详细教程
  17. Golang的基础数据类型
  18. 手赚网试玩平台源码 可封装APP 带文章资讯功能 帝国cms7.5内核
  19. 安卓版matlab下载,matlab转为app
  20. 13-反向传播法求梯度

热门文章

  1. 计算机硬盘sata,sata硬盘是什么
  2. Java面向对象-方法与方法重载
  3. div布局系列 - 两端对齐的方法
  4. JavaScript的输出与变量
  5. oracle 视图带变量条件,oracle视图(带参数)
  6. 简析Android中的MVC、MVP架构
  7. 我的项目开发经验积累总结
  8. 联想教育应用使用说明(7.6版本)——第0章 目录
  9. FDC2214电容检测芯片-液位检测(金属探针探测液面)方案分析
  10. sql server 自定义列的自增规则