MySQL-查询

语法: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;

例3:查询选修了所有课程的同学

select * from student where not exists(select * from course where not exists (select * from sc where sc.Sid=student.Sid and sc.Cid=course.Cid));

 

 

作者:kerwin-chyl

文章链接:https:////www.cnblogs.com/kerwin-chyl

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利

posted @ 2020-03-07 15:17  Kerwin_chyl  阅读(114)  评论(0编辑  收藏  举报