DQL语句

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);

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 引出 •请思考如下问题? –查询所有员工的每个月工资总和,平均工资? –查询工资最高和最低的工资是多少? –查询公...
    C_cole阅读 7,323评论 0 3
  • 5.多表查询 多表查询 目的:从多张表获取数据 前提:进行连接的多张表中有共同的列 等连接 通过两个表具有相同意义...
    乔震阅读 1,350评论 0 0
  • 查询是数据的一个重要操作。用户发送查询请求,经编译软件变异成二进制文件供服务器查询,后返回查询结果集给用户,查询会...
    产品小正阅读 1,465评论 0 2
  • 1.简介 数据存储有哪些方式?电子表格,纸质文件,数据库。 那么究竟什么是关系型数据库? 目前对数据库的分类主要是...
    乔震阅读 1,885评论 0 2
  • 一个人的时候,会越来越了解自己,有时无限怜惜,有时感到害怕,有时怀疑踟蹰,每次都是一次重生。 原生家庭对孩子心灵的...
    hello姑娘儿阅读 654评论 2 3