MySQL第二篇

查询记录

SELECT * FROM tablename [WHERE CONDITION];“*”表示所有的记录都选出来,也可以用逗号分割字段来代替
SELECT * FROM emp;
SELECT ename, age, sal, deptno,hiredate FROM emp;

查询不重复的数据

SELECT DISTINCT field FROM tablename;有些时候需要将表中的记录去掉重复后显示出来,就可以用distinct关键字来实现
SELECT DISTINCT deptno FROM emp;

条件查询

SELECT * FROM tablename WHERE CONDITION;
where后面的条件是一个字段的=比较,除了=还可以使用>、<、>=、<=、!=比较运算符,多个条件还可以使用or、and等逻辑运算符进行多条件联合查询
SELECT * FROM emp WHERE detpno=1;
SELECT * FROM emp WHERE deptno=1 and sal>3000;

排序和限制

SELECT * FROM tablename [WHERE CONDITION][ORDER BY firld1 [DESC|ASC],field2 [DESC|ASC],…,fieldn [DESC|ASC]];
关键字ORDER BY可以按照某个字段进行排序,其中desc和asc是排序顺序的关键字,desc表示按照字段进行降序排序,asc表示升序排序,如果不写则默认升序排序。order by 后面可以跟多个不同的排序字段,并且每个字段都可以有不同的排序顺序
SELECT * FROM emp ORDER BY sal;
对于某个字段相同的记录,如果按照另一个字段由高到低排序
SELECT * FROM emp order BY deptno, sal DESC;
对于排序后只选择显示一部分可以用limit关键字来实现
SELECT * FROM tablename WHERE CONDITION [LIMIT offset_start,row_count];
SELECT * FROM emp ORDER BY sal LIMIT 3;
显示排序后从第二条记录开始的三条数据,
SELECT * FROM emp ORDER BY sal LIMIT 1,3;
需要注意的是limit是mysql的语法,其他的数据库不能使用,limit也经常和order by一起使用,来做分页显示。

聚合(一些汇总操作)

SELECT [field1,field2,…,dieldn]fun_name FROM tablename [WHERE where_contition][GROUP BY field1,field2,…,fieldn [WITH ROLLUP]] [HAVING where_contition]
参数说明: (1)fun_name要做的聚合操作,也就是聚合函数,sum(求和),count(*)记录数,avg(平均值),max(最大),min(最小)。
(2)GROUP BY是表示要进行分类的聚合的字段,写在group by 后面
(3)WITH ROLLUP 是可选参数,表明是否对分类聚合后的结果进行再汇报。
(4)HAVING 关键字表示对分类后的结果再进行条件过滤。
HAVING 和 WHERE 的区别: HAVING是对结果集进行条件过滤, WHERE是在聚合前对记录进行过滤。
COUNT(): SELECT count(1) FROM emp;
COUNT(),GROUP BY : SELECT deptno,COUNT(1) FROM emp GROUP BY deptno;
COUNT(),GROUP BY,WITH ROLLUP: SELECT deptno,COUNT(1) FROM emp GROUP BY deptno WITH ROLLUP;
COUNT(1),GROUP BY,HAVING: SELECT deptno,COUNT(1) FROM emp GROUP BY deptno HAVING COUNT(1)>1;
SUM(),MAX(),MIN(): SELECT SUM(sal),MAX(sal),MIN(sal) FROM emp;

表连接

表连接可以分为内连接和外连接,内连接是选出两张表中间互相匹配的记录,外连接是选出其它不匹配的记录
其中外连接又分左连接和右链接:左连接包含所有左边表中的数据和右边表没和它匹配的数据,右链接包含所有右边表中的数据和右边表没和它匹配的数据

内链接查询:

SELECT ename, deptname FROM emp, dept WHERE emp.deptno=dept.deptno;

外连接查询左连接:

SELECT ename,deptname FROM emp LEFT JOIN dept ON emp.deptno=dept.deptno;

外连接查询右连接:

SELECT ename, deptname FROM dept RIGHT JOIN emp on dept.deptno = emp.deptno;

子查询:

子查询的关键字主要包括in、not in、=、!=、exists、not exists等
SELECT * FROM emp WHERE deptno in(SELECT deptno FROM dept);
亦可以用=代替in
SELECT * FROM emp WHERE deptno = (SELECT deptno FROM dept LIMIT 1);
子查询转化为表连接
SELECT * FROM emp WHERE deptno in (SELECT deptno FROM dept);
转为表连接
SELECT emp.* FROM emp ,dept WHERE emp.deptno=dept.deptno;

数据联合

UNION 和 UNION ALL UNION ALL 是将查询出来的结果集直接合并,union是将合并之后的结果集进行去重
SELECT * FROM t1 UNION/UNION ALL SELECT * FROM t2
SELECT deptno FROM emp UNION ALL SELECT deptno FROM dept;
SELECT deptno FROM emp UNION SELECT deptno FROM dept;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值