语法:SELECT 列名 1,列名 2,…. FROM 表名
1、查询所有列 查询所有信息用*表示
范例:查询 dept 表中的所有信息,SELECT * FROM dept;
说明:在查询所有信息的时候,我们既可以使用*,也可以把具体的列名写上去。
最好采用 的是写具体的列名。原因有:1)如果是写具体的列名,那么列的顺序可以随意调换,但是 如果是*,那么必须按照固定的格式显示。2)从执行效率角度出发,*执行的效率慢。
2、查询指定列
范例:查询 emp 表中的雇员编号, mysql> SELECT ename FROM emp;
练习:查询各个等级的最低工资标准和最高工资标准。 SELECT losal,hisal FROM emp;
3、去除重复行distinct
SELECT ALL|DISTINCT 列名 1,列名 2,…. FROM 表名;
Distinct必须放在select后的第一个字段前
Distinctrow=distinct
select distinctrow job,deptno from emp;
4、列别名
SELECT ALL|DISTINCT|DISTICTROW 列名1 AS 列别名1,列名2 列别名2,…FROM 表名;
SELECT empno [as] 编号,ename [as] 姓名 FROM emp;
当别名中有关键字或者特殊符号(如*+¥空格等),需要将别名加上引号(单双引号均可)
列别名:改变的是查询结果的列标题,对数据表中的列名没有影响
5、Where子句
Select 列名 from 表名 where 过滤条件;
查询条件 |
运算符 |
比较 |
=, >, <, >=, <=, <>, !=, !>, !< |
范围 |
BETWEEN…AND NOT BETWEEN…AND |
列表 |
IN, NOT IN |
字符串匹配 |
LIKE , NOT LIKE |
空值 |
IS NULL, IS NOT NULL |
逻辑运算条件 |
AND(&&),OR(||),NOT(!),XOR |
6、Limit限制+排序
语法:SELECT ALL|DISTINCT|DISTICTROW 列名1 AS 列别名1,列名2 列别名2,…FROM 表名 LIMIT 整数;
select * from emp limit 10; //只显示前面10行数据
select ename,year(now())-year(hiredate) from emp; //查询员工的服务时间
SELECT ename,sal*12 total FROM emp ORDER BY 2 limit 3; //查询雇员姓名、编号,要求以姓名升序排列,只显示前 3 条记录。
7、聚合函数(组函数)
函数名 |
意义 |
用法 |
Sum |
求和 |
sum([distinct|all] 列名) |
Count |
累加 |
count([distinct|all] 列名) |
Avg |
平均值 |
Avg([distinct|all] 列名) |
Min |
最小值 |
min([distinct|all] 列名) |
Max |
最大值 |
max([distinct|all] 列名) |
Count()不会计算有空值的数据,自动忽略
select count(comm),count(sal),sum(sal) from emp;
select count(distinct job,mgr) from emp; // 7=如下查询数量-null数量
select distinct job,mgr from emp; // 8条记录,其中有1行是null
8、分组查询
SELECT 列名,聚合函数 FROM 表名
ORDER BY 排序条件
GROUP BY 分组条件 HAVING 过滤条件;
聚合函数不能出现在where后面,要作为过滤条件只能出现在having子句后
WHERE 子句用于对表中的原始数据进行过滤,而HAVING 则是对查询结果按照聚合的条件进行过滤。
语句执行顺序:From→join→on→where→group by→聚合函数→having→select→distinct→order by
扩展:GROUP_CONCAT,将每个分组中指定字段值都显示出来
SELECT deptno,job,count(empno),avg(sal),GROUP_CONCAT(ename)
FROM emp GROUP BY deptno,job;
9、limit子句
Limit子句的作用是从查询结果集中选出指定位置开始的指定行的数据,对于没有应用order by的limit子句,结果同样也是无序的,默认按照表主键的记录顺序进行显示。Limit子句分为两种;
a).不指定初始位置
LIMIT m表示从第一条记录开始查询,显示m条记录。
范例1:select ename hiredate from emp limit 3;
范例2:查询员工号最大的员工信息
Select * from student order by empno desc limit 1;
b).指定初始位置
LIMIT n,m表示从第n+1条记录开始查询(初始位置为0),显示m条记录。
范例:select ename,hiredate from emp limit 2,3;
10、补充用法
\g:作用等价于分号,表示结束
\G:作用约等于分号,但显示效果为分号查的结构旋转90°变为纵向,将行显示为列,列显示为行,也就是将每个字段打印到单独的行上去。
11、多表查询
语法:SELECT 列名,…FROM 表名1, 表名2 …WHERE 连接条件 AND过滤条件
select * from emp,dept; //查询出14*4=56条记录,产生了笛卡尔积
select * from emp,dept where emp.deptno=dept.dptno
多表连接条件:等值连接和非等值连接
多表连接分类:外部连接和内部连接
例1:查询工作地点在NEW YORK的员工编号、姓名、部门编号和工作地
select empno,ename,emp.deptno,loc
from emp,dept
where emp.deptno=dept.deptno
AND loc=‘NEW YORK‘;
例2:查询工资等级=1的员工信息
select e.*,s.*
from emp e,salgrade s
where e.sal BETWEEN s.losal AND s.hisal
AND grade=1;
作者:kerwin-chyl
文章链接:https:////www.cnblogs.com/kerwin-chyl
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利
原文:https://www.cnblogs.com/kerwin-chyl/p/12434433.html
如果您也喜欢它,动动您的小指点个赞吧