DQL即数据查询语言,指的是对数据库表执行一系列查询动作(操作),包括基础查询和高级查询。此处只讨论基础查询,高级查询将在后续进行讨论。

1.基础查询SQL

-- where 条件不要即查询该表所有记录,否则按照条件删选满足条件的记录。
select 字段列表 from mktest.mkt [where 条件];-- 例如:
-- 查询所有记录的所有字段,注:*通配符表示所有字段(因为它会全字段扫描,
-- 当数据库表记录比较大的时候性能比较低,因此生产环境不会使用*,而宁可写全字段)
select * from mktest.mkt;    -- 查询编号大于20的客户的名字和年龄
select sname,age from mktest.mkt where sid >20; -- 查询名称为null的客户的名字和年龄
select sname,age from mktest.mkt where sname is null;

2.条件查询(模糊)

条件查询即上面提到的 + where 条件的查询,模糊查询查询则是值使用 like 关键字 ,虽然like模糊查询会全表查询牺牲一定的性能,但是有时候某些应用场景需要用到,因此必须会使用。

通配符:

%   -- 匹配任意多个字符
_   -- 下划线,匹配一个任意字符%s%  -- 匹配包含s的
s%   -- 匹配以s开头的
%s   -- 匹配以s结尾的
_L%  -- 匹配第一个字符任意,第二个字符必须为L的
-- 查询名称以y结尾的客户信息
select * from mktest.mkt where sname like '%y';    --查询名字第一个字符任意,第二个字符为y的客户信息
select * from mktest.mkt where sname like '_y';

3.分组查询

1) 聚合函数

谈到分组就要谈到聚合函数了,所谓聚合函数指的是MySQL提供的,对于分组字段进行聚合,例如求某一组数的最大值,最小值,总个数,求和操作等

常用聚合函数:

count(1) 统计记录数,count(字段名)则是对字段的统计

sum(字段名) 对某一字段聚合求和

max(字段名) 求最大值 -> 例如一个部门最高的工资

avg(字段名) 求平均值 -> 求某一个部门的员工的平均工资

min(字段名) 求最小值

2) 分组关键字 (group by )

对分组后的结果集进行条件删选的话,使用having关键字,使用方法同where

-- 求不同年龄段的客户的最大投资额,展示分组年龄和该年龄最大投资额
select age,max(invest) from mktest.mkt group by age;   -- 针对分组后的结果去除age<=24的部分。
select age,max(invest) from mktest.mkt group by age having age>24;

having 和where的区别

顺序:having是在分组之后使用的

能否使用聚合函数:having可以使用聚合函数

4.结果排序(order by)

-- 对查询后得到的结果集进行降序排序返回
select * from mktest.mkt order by invest desc; -- 默认是升序
select * from mktest.mkt order by invest;    -- 升序
select * from mktest.mkt order by invest asc;  即:
降序    ->    order by xxx desc
升序    ->    order by xxx [asc];  asc -- 可以省略

5.对查询结果集进行限制(limit)

limit 是该查询结果集中最后执行的限制结果集的记录条数的关键字。

-- 此时最终结果只有两条,而不是每一个分组两条哦(当然也不能)。
select age,max(invest) from mktest.mkt group by age having age>24 limit 2;  -- 使用:# limit 起始查询索引,查询的条数
-- 参数1:起始查询条数,如果从0开始查询,则可以直接省略
-- 即从结果集的第三条记录开始取5条记录
select * from mktest.mkt where age>20 limit 2,5;

注意:

limit关键字限制查询结果只能在MySQL中使用,在其他数据库管理系统中可不能使用哦,hive 本省也不是标准SQL,姑且不算。

提示:关于子查询,内外连接等高级查询将在后续章节涉及到,此处不做详解。

6.练习:

1) 数据准备:

emp员工表

Field Type Null Key Default Description
empno int(11) No PRI null 员工编号
ename varchar(30) YES null 员工名称
job varchar(30) YES null 工作
mgr int(11) YES null 上司编号
hiredate datetime YES null 雇用日期
sal decimal(10,2) YES null 薪水
comm decimal(10,2) YES null 年终奖金
deptno int(11) YES MUL外键 null 部门ID
INSERT INTO mktest.emp (empno, ename, job, mgr, hiredate, sal, comm, deptno) VALUES (7369, 'SMITH', 'CLERK', 7902, '1980-12-17 00:00:00', 800.00, null, 20);
INSERT INTO mktest.emp (empno, ename, job, mgr, hiredate, sal, comm, deptno) VALUES (7499, 'ALLEN', 'SALESMAN', 7698, '1981-02-20 00:00:00', 1600.00, 300.00, 30);
INSERT INTO mktest.emp (empno, ename, job, mgr, hiredate, sal, comm, deptno) VALUES (7521, 'WARD', 'SALESMAN', 7698, '1981-02-22 00:00:00', 1250.00, 500.00, 30);
INSERT INTO mktest.emp (empno, ename, job, mgr, hiredate, sal, comm, deptno) VALUES (7566, 'JONES', 'MANAGER', 7839, '1981-04-02 00:00:00', 2975.00, null, 20);
INSERT INTO mktest.emp (empno, ename, job, mgr, hiredate, sal, comm, deptno) VALUES (7654, 'MARTIN', 'SALESMAN', 7698, '1981-09-28 00:00:00', 1250.00, 1400.00, 30);
INSERT INTO mktest.emp (empno, ename, job, mgr, hiredate, sal, comm, deptno) VALUES (7698, 'BLAKE', 'MANAGER', 7839, '1981-05-01 00:00:00', 2850.00, null, 30);
INSERT INTO mktest.emp (empno, ename, job, mgr, hiredate, sal, comm, deptno) VALUES (7782, 'CLARK', 'MANAGER', 7839, '1981-06-09 00:00:00', 2450.00, null, 10);
INSERT INTO mktest.emp (empno, ename, job, mgr, hiredate, sal, comm, deptno) VALUES (7788, 'SCOTT', 'ANALYST', 7566, '1987-04-19 00:00:00', 3000.00, null, 20);
INSERT INTO mktest.emp (empno, ename, job, mgr, hiredate, sal, comm, deptno) VALUES (7802, 'Jpppp', 'Programine', 7788, '2019-01-21 00:00:00', 5000.00, 100.00, 20);
INSERT INTO mktest.emp (empno, ename, job, mgr, hiredate, sal, comm, deptno) VALUES (7839, 'KING', 'PRESIDENT', null, '1981-11-17 00:00:00', 5000.00, null, 10);
INSERT INTO mktest.emp (empno, ename, job, mgr, hiredate, sal, comm, deptno) VALUES (7844, 'TURNER', 'SALESMAN', 7698, '1981-09-08 00:00:00', 1500.00, 0.00, 30);
INSERT INTO mktest.emp (empno, ename, job, mgr, hiredate, sal, comm, deptno) VALUES (7876, 'ADAMS', 'CLERK', 7788, '1987-05-23 00:00:00', 1100.00, null, 20);
INSERT INTO mktest.emp (empno, ename, job, mgr, hiredate, sal, comm, deptno) VALUES (7900, 'JAMES', 'CLERK', 7698, '1981-12-03 00:00:00', 950.00, null, 30);
INSERT INTO mktest.emp (empno, ename, job, mgr, hiredate, sal, comm, deptno) VALUES (7902, 'FORD', 'ANALYST', 7566, '1981-12-03 00:00:00', 3000.00, null, 20);
INSERT INTO mktest.emp (empno, ename, job, mgr, hiredate, sal, comm, deptno) VALUES (7934, 'MILLER', 'CLERK', 7782, '1982-01-23 00:00:00', 1300.00, null, 10);

注意:emp表使用empno作为主键,另外deptno作为外键,引用自dept表的主键deptno字段

dept部门表

Field Type Null Key Default Description
deptno int(11) NO PRI null 部门ID
dname varchar(30) YES null 部门名称
loc varchar(30) YES null 部门地址
INSERT INTO mktest.dept (deptno, dname, loc) VALUES (10, 'ACCOUNTING', 'NEW YORK');
INSERT INTO mktest.dept (deptno, dname, loc) VALUES (20, 'RESEARCH', 'DALLAS');
INSERT INTO mktest.dept (deptno, dname, loc) VALUES (30, 'SALES', 'CHICAGO');
INSERT INTO mktest.dept (deptno, dname, loc) VALUES (40, 'OPERATIONS', 'BOSTON');

2) 练习

-- 查询姓名中包含了s的员工信息
select * from mktest.emp where ename like '%s%';-- 查询30号部门工资最高的前三条记录
select * from mktest.emp where deptno=30 order by sal desc limit 3;-- 查询20号部门工资最高的员工信息
select * from mktest.emp where deptno=20 and sal=(select max(sal) from mktest.emp where deptno=20);-- 查询入职时间超过35年的员工的信息
select *,year(now())-year(hiredate) hireAge from mktest.emp where year(now())-year(hiredate)>35;-- 查询在当月倒数第二天入职的员工信息
select * from mktest.emp where date(hiredate)=DATE_SUB(LAST_DAY(hiredate),interval 1 day);-- 查询每个部门在当月倒数第二天入职的员工信息
select * from mktest.emp where date(hiredate)=DATE_SUB(LAST_DAY(hiredate),interval 1 day);-- 统计每个部门中工资超过1000的员工的各个部门的平均工资
select *,avg(sal) from mktest.emp where sal>1000 group by deptno;-- 查询平均工资超过2000的部门编号和平均工资
select deptno,avg(sal) from mktest.emp group by deptno having avg(sal)>2000;

思考:虽然上述但查询也能完成一定的任务,但是在实际开发中,单查询还是比较少的,一般都是写一些高级查询,当然,高级查询也是基于上述的基础查询的。

例如下面的问题,对于但查询来说就比较麻烦了

-- 查询员工编号为7788的员工所在部门的名称

MySQL DQL操作之基础查询相关推荐

  1. MySQL入门 (二) : SELECT 基础查询

    1 查询资料前的基本概念 1.1 表格.纪录与栏位 表格是资料库储存资料的基本元件,它是由一些栏位组合而成的,储存在表格中的每一笔纪录就拥有这些栏位的资料. 以储存城市资料的表格「city」来说,设计 ...

  2. 【MySQL】系统命令与基础查询

    系统命令 这里介绍的包含了MySQL的系统命令,基于5.5.19版本 启动MySQL: mysqladmin start /ect/init.d/mysql start 重启MySQL: mysqla ...

  3. 数据基础---mysql数据库操作(一)---基础操作

    mysql常识 本文前面主要是对<mysql_5.5中文参考手册>部分内容的整理. 说明:登录mysql后,可以看到mysql> 的提示符,可以输入相关命令:输入命令后,需要以&qu ...

  4. mysql数据库操作多表查询_MySQL数据库查询操作进阶——多表查询

    多表查询 在大部分情况下,我们用到的表都是彼此相关联的,所以我们会有相当大的需求用到跨表的查询,这个时候我们就需要将相关联的表连起来做多表查询. 多表查询分为连表查询和子查询,连表查询即将相关联的表连 ...

  5. mysql DML操作、关联查询、联合查询、聚合函数使用

    目录 DML操作 关联查询.联合查询 按条件查询.聚合函数使用 DML操作 CREATE DATABASE db2USE db2; CREATE TABLE stu(sid INT PRIMARY K ...

  6. mysql 数据操作 单表查询 where约束 between and or

    WHERE约束 where字句中可以使用: 比较运算符:>< >=  <=  != between 80 and 100 值在80到100之间   >=80  <= ...

  7. java操作mongodb基础(查询 排序 输出list)

    为什么80%的码农都做不了架构师?>>>    代码如下: package com.infomorrow.webroot; import java.util.List; import ...

  8. java mongodb排序查询_java操作mongodb基础(查询 排序 输出list)

    代码如下: package com.infomorrow.webroot; import java.util.List; import com.mongodb.BasicDBObject; impor ...

  9. mysql 数据操作 多表查询 子查询 带比较运算符的子查询

    带比较运算符的子查询 #比较运算符:=.!=.>.>=.<.<=.<> #查询大于所有人平均年龄的员工名与年龄 思路 先拿到所有人的平均年龄然后 再用另外一条sql ...

最新文章

  1. 合理设置apache参数
  2. linux开机自动执行命令或自动启动程序(rc.local)
  3. Codeforces 458C - Elections
  4. Qt中的QRadioButton
  5. “红人经济第一股”搞虚拟社交,天下秀是变道还是扩道?
  6. CSS3 Media Query:移动 Web 的完美开端
  7. php中等3秒再跳转,跳转和重定向
  8. DevOps案例研究|史上最能“拜客户教”的公司,是如何做到持续交付的?(第1趴)...
  9. 难题:嵌套computeIfAbsent
  10. 计算机辅助语言和语言学关系,西方语言学与多媒体计算机辅助语言学习_王艳萍...
  11. ih5怎么切换下一个页面_区块链是下一个风口?那PPT该怎么做?
  12. yum httpd安装详解
  13. 万物皆可python_Python知识点合集,学完万物皆可爬
  14. java B2B2C springmvc mybatis电子商城系统-分布式配置中心(Spring Cloud Config)
  15. 战地1服务器怎么显示fps,战地1怎么显示FPS帧数_战地1显示FPS帧数方法图文攻略_玩游戏网...
  16. 太原用计算机单位的工资,太原个税计算器_太原税后月薪|工资计算器_太原个人所得税查询 - Tax518...
  17. 强烈推荐几款IDEA插件,12款小白神器
  18. Vue CLI3 bable兼容ie11ie10
  19. 世界 5G 通信频段和运行模式
  20. android 系统儿童锁,儿童锁-家长助手

热门文章

  1. 计算机微格教学教案设计表,微格教学教案设计表模板
  2. 如何建立自动语音问卷外呼系统
  3. 解决安装在虚拟机VMware的Ubuntu-18-04系统与主机之间的复制粘贴问题
  4. 运维工程师必备的认证【红帽liunx-RHCE 8】
  5. 熵权法、极差法标准化简介与实战
  6. 微信小程序————简易计算器
  7. 收藏 | 42 款 Chrome 插件神器,你必须知道!
  8. 【HTML5】Web前端——网页实用技巧1:将一个方形图片,变成圆形(利用CSS属性)
  9. 高级性能测试系列《34.普通性能场景:​jmeter的线程数,有没有限制?线程数+ramp-up时间,怎么设置才比较合理?》...
  10. matlab armax和arima区别,ARMA和ARIMA的区别是什么?