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

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,098评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,213评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,960评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,519评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,512评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,533评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,914评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,574评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,804评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,563评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,644评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,350评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,933评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,908评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,146评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,847评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,361评论 2 342

推荐阅读更多精彩内容

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