DQL语句

作者: 熊大呀 | 来源:发表于2019-08-28 16:21 被阅读0次

1、DQL(数据查询语言)主要用于进行数据表中数据的查询

基本语法:SELECT 属性1,属性2,…. FROM 表名

SELECT识别要查询的列     FROM识别要查询的表          例:SELECT empno,ename,jobno,hiredate FROM hzdl_emp;

通配符*,代表所有,可以使用*代表查询表中所有列;例子:SELECT * FROM hzdl_emp;

使用SELECT语句进行数据查询时,还可以进行算术运算、限定查询、排序、分组等控制

2、算术运算

能够在SELECT语句查询的结果基础上进行相应的数学运算例子:SELECT sal+100 FROM hzdl_job;

限定查询:在使用SELECT语句进行查询时,使用WHERE子句,就能查询出满足条件的记录,而不是表中的所有记录

例子:SELECT * FROM hzdl_emp WHERE empno=20161001;

WHERE子句也可以使用多个限定条件(在WHERE子句中设置的限定条件,一般由各种运算符组成)

例子:SELECT * FROM hzdl_emp WHERE empno=20161001 AND ename='董事长';

3、MySQL中常用的运算符:数学运算符、比较运算符、逻辑运算符

通配符%代表若干个字符,通配符_代表一个字符

逻辑运算符!在使用的时候一定要注意不能省略后面括号     运算符优先级:数学运算符>比较运算符>逻辑运算符

注意:在WHERE子句中(字符串和日期要用引号括起来、对字符串不区分大小写、日期值是格式敏感的

4、去除重复

使用DISTINCT关键字能够将查询到的结果集中重复的记录去除;例:SELECT DISTINCT(hiredate) FROM hzdl_emp;

设置别名(使用AS关键字可以在查询时设置属性(列)的别名,不过AS可以省略)例子:

SELECT empno AS '员工号',ename AS '员工姓名' FROM hzdl_emp;

SELECT empno '员工号',ename '员工姓名' FROM hzdl_emp;

5、排序

使用ORDER BY子句可以将SELECT查询到的结果集按照指定属性排序;默认采用升序(ASC)排序方式,也可以使用降序(DESC)例子:

SELECT * FROM hzdl_emp ORDER BY deptno;                 SELECT * FROM hzdl_emp ORDER BY deptno ASC;

SELECT * FROM hzdl_emp ORDER BY deptno DESC;

同样,排序时也可以指定多个属性排序。当多属性排序方式有冲突时,按照指定先后顺序排序

例子:SELECT * FROM hzdl_emp ORDER BY deptno,jobno;

6、分组

使用GROUP BY子句可以对查询结果按指定属性进行分组统计。数据库中的分组并不是将查询结果分组排序,而是分组后对每个分组按照特定属性进行统计,因此查询到的是每个分组的统计后结果

例如:查询公司内各个部门员工人数。一般分组GROUP BY子句和聚合函数一起使用,常用的聚合函数有:

-COUNT            -AVG             -SUM             -MAX              -MIN             -GROUP_CONCAT

7、计数函数COUNT

统计表中某个属性对应的记录数;例子:SELECT COUNT(empno) FROM hzdl_emp;

(1)求平均值函数AVG

统计表中某个属性对应的平均值;例子:SELECT AVG(sal) FROM hzdl_job;

(2)求和函数SUM

统计表中某个属性的汇总值(和);例子:SELECT SUM(sal) FROM hzdl_job;

(3)最大值函数MAX

统计表中某个属性的最大值;例子:SELECT MAX(sal) FROM hzdl_job;

(4)最小值函数MIN

统计表中某个属性的最小值;例子:SELECT MIN(sal) FROM hzdl_job;

(5)列值拼接函数GROUP_CONCAT

将表中某个属性的所有值拼接到同一个结果中,默认值与值之间用逗号分隔。也可使用SEPARATOR关键字指定分隔符

例子:SELECT GROUP_CONCAT(jobname) FROM hzdl_job;

8、数据库中的分组就是依赖这些聚合函数,完成对查询结果中的每个分组进行统计

(1)例子:查询公司内各个部门员工人数

使用的SQL语句:SELECT deptno,COUNT(empno) FROM hzdl_emp GROUP BY deptno;

(2)在MySQL数据库中使用分组时,SELECT语句后查询的属性可以不出现在GROUP BY子句中

但是在其他类型的数据库中,SELECT语句后只能使用聚合函数和GROUP BY子句后出现的属性;和分组GROUP BY子句经常一起使用的还有HAVING子句;HAVING子句为分组统计进一步设置统计条件,效果和WHERE子句类似。它们的区别是:WHERE子句在查询前限定查询条件       HAVING子句在分组后进行进一步限定

例如:查询公司内各个部门员工人数,并返回部门员工人数大于2人的部门编号

SELECT deptno,COUNT(empno) FROM hzdl_emp GROUP BY deptno HAVING COUNT(ename)>2;

(3)分组同样可以基于多个属性;例:查询公司内各个部门不同职位的员工人数

SQL语句:SELECT deptno,jobno,COUNT(empno) FROM hzdl_emp GROUP BY deptno,jobno;

9、限定结果

使用LIMIT子句可以限定查询返回的记录数。例如:查询数据表中前两条记录

SQL语句:SELECT * FROM hzdl_emp LIMIT 2;

LIMIT子句后面可以有一个参数,也可以有两个参数。如果有一个参数,该参数表示从表开始位置查询对应的记录数量

如果有两个参数,那么第一个参数表示起始位置与第一行的偏移量,第二个参数表示查询的数量

例子:SELECT * FROM hzdl_emp LIMIT 2,3;

10、单行函数

数据库中的函数作用也非常大,一般多用于SELECT语句和WHERE语句;函数按照类型又可分为:单行函数和多行函数

单行函数:就是将数据表中的每条数据进行独立的计算并返回结果

多行函数:就是计算数据表中的多条数据并返回结果,前面接触的聚合函数就是多行函数,一般用于数据的统计汇总

常用的单行函数可以分为几类:

-字符串函数    -日期时间函数    -数学函数    -类型转换函数    -流程控制函数

需要注意的是可以转换的数据类型是有限制的:-整型(signed)、无符号整型(unsigned)、浮点型(decimal)、字符型(char)、日期(date)、时间(time)、日期时间型(datetime)

11、多表查询

使用一个SELECT语句查询多张表,即多表查询;多表查询分为两类:

(1)内连接:进行多表查询时,按照匹配条件,在结果集中只保留各个表中满足匹配条件的记录

内连接又分为:等值连接、不等值连接、自然连接、自连接

等值连接:就是在进行内连接查询时,使用比较运算符‘=’作为匹配条件

例子:SELECT hzdl_emp.ename,hzdl_job.jobname FROM hzdl_emp,hzdl_job WHERE hzdl_emp.jobno=hzdl_job.jobno;

非等值连接:就是在进行内连接查询时,使用非‘=’的其他比较运算符作为匹配条件

例子:SELECT hzdl_emp.ename,hzdl_job.jobname FROM hzdl_emp,hzdl_job WHERE hzdl_emp.jobno>hzdl_job.jobno;

自然连接:和等值连接类似,但是连接时不需要额外指定连接条件,因为会自动按照相同属性进行等值连接,且会删除结果集中的重复属性。因此进行自然连接的两张表中需要有相同的属性存在

例子:SELECT * FROM hzdl_emp NATURAL JOIN hzdl_dept;

自连接:就是表与它自己进行的连接查询,即自连接

在自连接查询过程中,一定要设置表的别名;例:SELECT e1.ename AS '员工姓名',e2.ename AS '上级主管' FROM hzdl_emp e1,hzdl_emp e2 WHERE e1.mgr=e2.empno;

注意:使用了表的别名后,就不能再使用表名作为属性的标识

(2)外链接:进行多表查询时,分为主、从表,在结果集中保留主表中的所有记录以及从表中满足匹配条件的记录

内连接又分为:左外连接、右外连接

左外连接:在连接查询过程中,以左表为主表,在结果集中保留左表中的全部记录及右表中满足匹配条件的记录

例子:SELECT hzdl_emp.ename,hzdl_job.jobname FROM hzdl_emp LEFT OUTER JOIN hzdl_job ON hzdl_emp.jobno=hzdl_job.jobno;

右外连接:在连接查询过程中,以右表为主表,在结果集中保留右表中的全部记录及左表中满足匹配条件的记录

例子:SELECT hzdl_emp.ename,hzdl_job.jobname FROM hzdl_emp RIGHT OUTER JOIN hzdl_job ON hzdl_emp.jobno=hzdl_job.jobno;

12、子查询

将一个SELECT语句A使用于另外一个SELECT语句B中,则A即为B中的子查询

子查询分为:单行子查询、多行子查询、多列子查询

使用子查询注意事项:子查询一定要使用括号括起来、子查询放在比较运算符的右边、子查询中不要加ORDER BY子句、对单行子查询使用单行运算符、对多行子查询使用多行运算符

单行子查询:即子查询语句只返回一行一列

例子:SELECT ename FROM hzdl_emp WHERE mgr = (SELECT empno FROM hzdl_emp WHERE ename='董事长');

多行子查询:即子查询语句返回多行一列

多列子查询:即子查询语句返回多行多列               多行比较运算符:IN

13、合并结果集

在MySQL中使用UNION语句可以将多个SELECT语句的结果集合并消除表中任何重复行;使用UNION进行合并时要求:

1、多个SELECT语句中的列名可以不一样, UNION结果集中的列名是等于第一个SELECT语句中的列名

2、多个SELECT语句必须拥有相同数量的列                 3、多个SELECT语句列必须拥有相似的数据类型

4、多个SELECT语句列的顺序必须相同

例子:SELECT empno FROM hzdl_emp WHERE deptno=3 UNION SELECT empno FROM hzdl_emp WHERE deptno=4;

UNION操作符默认选取不同的值,即默认会消除重复的行

如果不消除重复行,要使用UNION ALL例子:

SELECT jobno FROM hzdl_emp WHERE deptno=3 UNION ALL SELECT jobno FROM hzdl_emp WHERE deptno=4;

使用UNION进行合并时,如果SELECT语句中使用ORDER BY、LIMIT子句,需要使用括号将SELECT语句括起来

例子:(SELECT empno FROM hzdl_emp WHERE deptno=3 ORDER BY empno LIMIT 1) UNION (SELECT empno FROM hzdl_emp WHERE deptno=4 ORDER BY empno LIMIT 1);

相关文章

  • 5. DQL语句和查询相关语句以及多表查询

    DQL语句和查询相关语句以及多表查询 一. DQL语句 数据查询语句DQL(Data Query Language...

  • SQL语句

    SQL语句主要分为四类 DQL(数据查询语言): 查询语句,凡是select语句都是DQL。 DML(数据操作语言...

  • JDBC之API详解(Resultset)

    ResultSet ResultSet(结果集对象)作用: 封装了DQL查询语句的结果执行DQL语句后,将所得...

  • MySQL基础——DQL语句

    在上篇文章中,我们学习了MySQL基础——DML语句,这篇文章学习MySQL基础——DQL语句。 DQL语句 DQ...

  • sql场景记忆

    1.常见的ddl,dql,dml联合场景 ddl:对于表结构的管理sql语句dql:常见的sql查询语句dml:常...

  • DQL语句

    1、DQL(数据查询语言)主要用于进行数据表中数据的查询 基本语法:SELECT 属性1,属性2,…. FROM ...

  • SQL基础概念

    SQL分类 DQL(数据查询语言):查询语句,凡是select都是DQL DML(数据操作语言):insert d...

  • Oracle基础(第一节)

    关于注释: 1、--:单行注释;2、/* */:多行注释; 关于查询语句 DQL: 数据操作语句 DML:...

  • 数据库--重难

    掌握 SQL熟练DQL语句 msql交互Python redis语句 redis交互Python redis与my...

  • MySQL基础——DCL语句

    上篇文章学习了MySQL基础——DQL语句,这篇文章学习MySQL基础——DCL语句。 DCL语句 DCL英文全称...

网友评论

      本文标题:DQL语句

      本文链接:https://www.haomeiwen.com/subject/ymzpectx.html