MySQL之DQL简单查询

2024-09-02 13:04
文章标签 简单 mysql 查询 dql database

本文主要是介绍MySQL之DQL简单查询,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1、结构化查询语言

1. 什么是SQL

结构化查询语言(Structured Query Language),后续通常简称SQL。SQL是用于存取数据以及查询、更新和管理关系数据库系统的标准语言。20世纪70年代由IBM公司开发,目前应用于各种关系型数据库。SQL是一套标准,百分之九十以上的SQL在各种关系型数据库中都是通用的,每种关系型数据库也有少量自己特定的操作方言。

2. SQL语言分类

SQL语言可分为如下5种

分类

名称

用途

代表关键字

DDL (Data Definition Language)

数据定义语言

用来定义数据库、表及其它对象的结构

CREATE、DROP、ALTER

DML (Data Manipulation Language)

数据操作语言

用来增加、修改、删除表中的数据

INSERT、DELETE、UPDATE

DQL (Data Query Language)

数据查询语言

用来查询表中的数据

SELECT、FROM、WHERE、ORDER BY 、GROUP BY、HAVING

DCL (Data Control Language)

数据控制语言

用来授予和收回权限

GRANT、REVOKE

TCL (Transaction Control Language)

事务处理语言

用来对数据进行提交和回滚

COMMIT、ROLLBACK

3. SQL语言书写规范

在介绍SQL书写规范之前,先简单了解几个概念:

关键字:是SQL语言保留的字符串,有着的特殊的功能。

语句:是一条完整的SQL命令。数据库只能执行一条完整的SQL命令。

子句:是部分SQL命令。一个SQL语句可能会有多个子句构成。

为了增加程序的可读性,在写SQL的时候,通常需要遵守如下规范:

1、一条SQL语句可以单行书写,也可以书写多行,以分号结尾。建议多行书写,增强代码可读性,通常每条子句占一行。

2、适当增加缩进或空格,提高程序的可读性。

3、SQL语句不区分大小写,也就是说SELECT,select,Select,执行时效果是一样的,关键字最好使用大写,其它语法元素(如列名、表名等)小写。

4、不能使用关键字,关键字不可以缩写、分开以及跨行书写,如SELECT不可以写成SEL或SELE CT等形式。

2、DQL-简单查询

1. SELECT简单查询作用

通过简单查询,可以查询表中的所有列或者指定列,通过算术运算符、列别名以及消除重复行可以改变查询结果的显示方式。

2. SELECT查询所有列

2.1 语法

SELECT * | 列名1,列名2,...列名n

FROM table;

说明:

1、“*”号代表指定表中的所有列名;

2、“|” 代表“或者”的含义,所以SELECT子句后面可以既可以写“*”,也可以写所有的列名,不能两种方式都写;

3、如果使用第二种方式,每个列名之间必须要用逗号分隔,最后一个列名后面不写逗号;

4、FROM子句后面写要查询的表名;

5、SQL语句的最后需要加分号;

例:查询所有部门信息

SELECT  *  FROM  dept;

或者

SELECT deptno,dname,loc FROM dept;

DEPTNO

DNAME

LOC

10

ACCOUNTING

NEW YORK

20

RESEARCH

DALLAS

30

SALES

CHICAGO

40

OPERATIONS

BOSTON

如上两种查询方式的结果完全相同,建议使用第二种方式,可读性强,效率稍高。

3. SELECT查询指定列

3.1 语法

SELECT 列名1[,列名2,...列名n]

FROM table;

说明:

1、[ ] 中括号里面的内容可以省略;

2、想显示哪列,写对应的列名就可以。

例:查询所有部门的部门编号、部门所在地

SELECT deptno,loc 
FROM dept;

查询结果如下:

DEPTNO

LOC

10

NEW YORK

20

DALLAS

30

CHICAGO

40

BOSTON

4. 算术运算符

4.1 算术运算符作用

可以在SELECT子句中使用算术运算符(只对数值型数据起作用),来改变查询结果的显示方式。

算术运算符包括:

运算符

作用

+

-

*

/

例:查询每个员工的姓名,工资,以及工资增加300后的金额。

SELECT ename, sal, sal+300  
FROM    emp;

查询结果如下:

ENAME

SAL

SAL+300

KING

5000

5300

BLAKE

2850

3150

CLARK

2450

2750

JONES

2975

3275

MARTIN

1250

1550

ALLEN

1600

1900

4.2 算术运算符优先级
  • 乘除优先于加减
  • 相同优先级按照从左至右的顺序依次计算
  • 可以使用括号提升优先级

例:比较如下两条SQL语句的查询结果,理解算术运算符优先级。

语句1:

SELECT ename, sal, 12*sal+100
FROM   emp;

语句2:

SELECT ename, sal, 12*(sal+100)
FROM   emp;

语句1的查询结果如下:

ENAME

SAL

12*SAL+100

KING

5000

60100

BLAKE

2850

34300

CLARK

2450

29500

JONES

2975

35800

MARTIN

1250

15100

......

......

......

语句2的查询结果如下:

ENAME

SAL

12*(SAL+100)

KING

5000

61200

BLAKE

2850

35400

CLARK

2450

30600

JONES

2975

36900

MARTIN

1250

16200

......

......

......

5. 空值

5.1 空值的含义

空值用NULL表示,表示一种无效的、未知的值,空值不是零,也不是空格。

例:查询员工姓名,岗位,工资,津贴

SELECT ename, job, sal, comm 
FROM   emp;

查询结果如下,其中SMITH的津贴为NULL值。

ENAME

JOB

SAL

COMM

SMITH

CLERK

800.00

NULL

ALLEN

SALESMAN

1600.00

300.00

WARD

SALESMAN

1250.00

500.00

.....

.....

.....

.....

5.2 空值参与运算

空值参与算术运算,运算后的结果仍为NULL

例:查询员工姓名,工资,津贴,以及工资和津贴的和。

SELECT  ename,sal,comm,sal+comm
FROM   emp;

查询结果如下,可以看到空值参与算术运算后,结果仍为空值

ENAME

SAL

COMM

SAL+COMM

SMITH

800

NULL

NULL

ALLEN

1600

300

1900

WARD

1250

500

1750

JONES

2975

NULL

NULL

......

......

......

......

5.3 空值的解决方法(扩展)

用ifnull(comm,0)来解决空值的问题,如果comm不为空,就返回原值 ,如果为空则返回默认值0

select ename,sal,comm,sal+ifnull(comm,0)
from emp;

查询结果

6. 列别名

6.1列别名作用及语法

列别名用来给查询语句中的列或者表达式重新命名,使语句的可读性更强。

语法:

SELECT 列名1 | 表达式1 [as] [列别名1],

列名2 | 表达式2 [as] [列别名2],

..列名n | 表达式n [as] [列别名n]

FROM table;

说明:

1、列别名可以直接写在列名或者表达式的后面,也可以加as关键子,加不加as没有任何区别,通常不加。

2、如果SELECT子句中有计算表达式,通常使用列别名。

例:查询员工姓名,工资,年薪(年薪=工资*12)

SELECT NAME , SAL , SAL*12  YearSal
FROM EMP;

查询结果如下:注意列的标题显示的是别名

ENAME

SAL

YearSal

SMITH

800

9600

ALLEN

1600

19200

WARD

1250

15000

JONES

2975

35700

......

......

......

注意:以下情况列别名两侧需要添加双引号

1、列别名中包含有空格

2、列别名中包含有特殊字符,如%,- 等。

例:查询员工姓名,工资,年薪(列别名要求Year Sal , 注意中间有空格)

SELECT NAME , SAL , SAL*12  "Year Sal"
FROM EMP;
6.2 课堂练习(2分钟)
  1. 查询出所有员工姓名、工资,以及工资上调20%之后的数值。

7. 消除重复行

7.1 消除重复行作用及语法

重复行是查询结果中有完全相同的数据行,如下面结果中第一行和第二行就是重复行。

JOB

DEPTNO

SALESMAN

30

SALESMAN

30

MANAGER

30

消除重复行是消除相同的查询结果,只保留一行重复数据,使用关键字 DISTINCT 来完成。

语法:

SELECT DISTINCT 列名1,列名2,....列名n

FROM table;

例:执行如下SQL语句,观察结果。

SELECT DISTINCT deptno
FROM emp;

DEPTNO

10

20

30

上述SQL语句的查询结果为:显示员工表中有几种不同的部门编号。

也可以使用DISTINCT关键字消除多列重复数据(同时考虑所有列的数据重复)

例:执行如下SQL语句,观察结果。

SELECT DISTINCT deptno,job 
FROM emp;

DEPTNO

JOB

20

CLERK

30

SALESMAN

20

MANAGER

30

MANAGER

10

MANAGER

20

ANALYST

10

PRESIDENT

30

CLERK

10

CLERK

可以看出,上述SQL语句的查询结果为:显示员工表中,每个部门有哪些不同的岗位类型。

这篇关于MySQL之DQL简单查询的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1130029

相关文章

MySQL查询JSON数组字段包含特定字符串的方法

《MySQL查询JSON数组字段包含特定字符串的方法》在MySQL数据库中,当某个字段存储的是JSON数组,需要查询数组中包含特定字符串的记录时传统的LIKE语句无法直接使用,下面小编就为大家介绍两种... 目录问题背景解决方案对比1. 精确匹配方案(推荐)2. 模糊匹配方案参数化查询示例使用场景建议性能优

mysql表操作与查询功能详解

《mysql表操作与查询功能详解》本文系统讲解MySQL表操作与查询,涵盖创建、修改、复制表语法,基本查询结构及WHERE、GROUPBY等子句,本文结合实例代码给大家介绍的非常详细,感兴趣的朋友跟随... 目录01.表的操作1.1表操作概览1.2创建表1.3修改表1.4复制表02.基本查询操作2.1 SE

MySQL中的锁机制详解之全局锁,表级锁,行级锁

《MySQL中的锁机制详解之全局锁,表级锁,行级锁》MySQL锁机制通过全局、表级、行级锁控制并发,保障数据一致性与隔离性,全局锁适用于全库备份,表级锁适合读多写少场景,行级锁(InnoDB)实现高并... 目录一、锁机制基础:从并发问题到锁分类1.1 并发访问的三大问题1.2 锁的核心作用1.3 锁粒度分

MySQL数据库中ENUM的用法是什么详解

《MySQL数据库中ENUM的用法是什么详解》ENUM是一个字符串对象,用于指定一组预定义的值,并可在创建表时使用,下面:本文主要介绍MySQL数据库中ENUM的用法是什么的相关资料,文中通过代码... 目录mysql 中 ENUM 的用法一、ENUM 的定义与语法二、ENUM 的特点三、ENUM 的用法1

MySQL count()聚合函数详解

《MySQLcount()聚合函数详解》MySQL中的COUNT()函数,它是SQL中最常用的聚合函数之一,用于计算表中符合特定条件的行数,本文给大家介绍MySQLcount()聚合函数,感兴趣的朋... 目录核心功能语法形式重要特性与行为如何选择使用哪种形式?总结深入剖析一下 mysql 中的 COUNT

mysql中的服务器架构详解

《mysql中的服务器架构详解》:本文主要介绍mysql中的服务器架构,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、背景2、mysql服务器架构解释3、总结1、背景简单理解一下mysqphpl的服务器架构。2、mysjsql服务器架构解释mysql的架

MySQL之InnoDB存储引擎中的索引用法及说明

《MySQL之InnoDB存储引擎中的索引用法及说明》:本文主要介绍MySQL之InnoDB存储引擎中的索引用法及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录1、背景2、准备3、正篇【1】存储用户记录的数据页【2】存储目录项记录的数据页【3】聚簇索引【4】二

mysql中的数据目录用法及说明

《mysql中的数据目录用法及说明》:本文主要介绍mysql中的数据目录用法及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、背景2、版本3、数据目录4、总结1、背景安装mysql之后,在安装目录下会有一个data目录,我们创建的数据库、创建的表、插入的

MySQL中的InnoDB单表访问过程

《MySQL中的InnoDB单表访问过程》:本文主要介绍MySQL中的InnoDB单表访问过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、背景2、环境3、访问类型【1】const【2】ref【3】ref_or_null【4】range【5】index【6】

MySQL 中 ROW_NUMBER() 函数最佳实践

《MySQL中ROW_NUMBER()函数最佳实践》MySQL中ROW_NUMBER()函数,作为窗口函数为每行分配唯一连续序号,区别于RANK()和DENSE_RANK(),特别适合分页、去重... 目录mysql 中 ROW_NUMBER() 函数详解一、基础语法二、核心特点三、典型应用场景1. 数据分