SQL笔记(一)SQL语法、SELECT语句、DISTINCT语句、LIMIT、LIMIT和OFFSET组合使用、WHERE 子句

文章目录

  • 1SQL语法
    • 1.1 SELECT 语句
      • 1.1.1SQL SELECT 语句
      • 1.1.2SQL SELECT 语法
    • 1.2DISTINCT 语句
      • 1.2.1 DISTINCT 的作用
      • 1.2.2 DISTINCT 的用法
      • 1.2.3 DISTINCT 的原理
    • 1.3LIMIT
      • 1.3.1指定初始位置
        • 1.3.1.1例子:在 emp 表中,使用 LIMIT 子句返回从第 3 条记录开始的行数为 5 的记录,SQL 语句和运行结果如下
      • 1.3.2不指定初始位置
        • 1.3.2.1例子显示 emp 表查询结果的前 3 行,SQL 语句和运行结果如下
      • 1.3.3 LIMIT 和 OFFSET 组合使用
        • 1.3.3.1在 emp 表中,使用 LIMIT OFFSET 返回从第 4 条记录开始的行数为 5 的记录,SQL 语句和运行结果如下。
      • 1.3.4总结
    • 1.4WHERE 子句
      • 1.4.1WHERE 子句中的运算符
      • 1.4.2例子
        • 1.4.2.1emp表
        • 1.4.2.2 查询emp表中job为人工智能,使用“=”
        • 1.4.2.3查询emp表中的sal大于20000的,使用">","<",">=","<="也类似
        • 1.4.2.4查询emp表中deptno不等于20,"<>"的使用
        • 1.4.2.5查询emp表中sal的值在20000-40000,"between"的使用
        • 1.4.2.6查询emp表中job有"端"字,"like"关键字的使用
        • 1.4.2.7查询emp表中deptno有10,30,50
        • 1.4.2.8查询没有comm值的
        • 1.4.2.9多重条件查询
          • 1.4.2.9.1查询deptno为20并且sal>20000
          • 1.4.2.9.2查询deptno为20或者sal>20000

1SQL语法

1.1 SELECT 语句

SELECT
[ALL|DISTINCT]
<目标列的表达式1> [别名],
<目标列的表达式2> [别名]…
FROM <表名或视图名> [别名],<表名或视图名> [别名]…
[WHERE<条件表达式>]
[GROUP BY <列名>
[HAVING <条件表达式>]]
[ORDER BY <列名> [ASC|DESC]]
[LIMIT <数字或者列表>];
简化版语法
SELECT *| 列名 FROM 表 WHERE 条件

1.1.1SQL SELECT 语句

SELECT 语句用于从表中选取数据。
结果被存储在一个结果表中(称为结果集)。

1.1.2SQL SELECT 语法

SELECT 列名称 FROM 表名称

以及:

SELECT * FROM 表名称

SQL 语句对大小写不敏感。SELECT 等效于 select。提示:星号(*)是选取所有列的快捷方式。

1.2DISTINCT 语句

1.2.1 DISTINCT 的作用

在MySQLl中,DISTINCT关键字的主要作用就是对数据库表中一个或者多个字段重复的数据进行过滤,只返回其中的一条数据给用户,DISTINCT只可以在SELECT中使用

1.2.2 DISTINCT 的用法

SELECT DISTINCT expression[,expression...]
FROM tables 
[where conditions];

在使用distinct的过程中主要注意一下几点:

  1. 在对字段进行去重的时候,要保证DISTINCT在所有字段的最前面
  2. 如果DISTINCT关键字后面有多个字段时,则会对多个字段进行组合去重,只有多个字段组合起来的值是相等的才会被去重

1.2.3 DISTINCT 的原理

DISTINCT 进行去重的主要原理是通过先对要进行去重的数据进行分组操作,然后从分组后的每组数据中去一条返回给客户端,在这个分组的过程可能会出现两种不同的情况:

  1. DISTINCT 依赖的字段未全部包含索引:
    该情况由于索引不能满足整个去重分组的过程,所以需要用到临时表,MySQL 首先需要将满足条件的数据放到临时表中,然后在临时表中对该部分数据进行分组,然后从临时表中每个分组的数据中去一条数据,在临时表中进行分组的过程中不会对数据进行排序。

  2. DISTINCT 依赖的字段全部包含索引:
    该情况 MySQL 直接通过操作索引对满足条件的数据进行分组,然后从分组后的每组数据中去一条数据。

1.3LIMIT

当数据表中有上万条数据时,一次性查询出表中的全部数据会降低数据返回的速度,同时给数据库服务器造成很大的压力。这时就可以用 LIMIT 关键字来限制查询结果返回的条数。

LIMIT 是 MySQL 中的一个特殊关键字,用于指定查询结果从哪条记录开始显示,一共显示多少条记录。

LIMIT 关键字有 3 种使用方式,即指定初始位置、不指定初始位置以及与 OFFSET 组合使用。

1.3.1指定初始位置

LIMIT 关键字可以指定查询结果从哪条记录开始显示,显示多少条记录
LIMIT 指定初始位置的基本语法格式如下:

LIMIT 初始位置,记录数

其中,“初始位置”表示从哪条记录开始显示;“记录数”表示显示记录的条数。第一条记录的位置是 0,第二条记录的位置是 1。后面的记录依次类推。

注意:LIMIT 后的两个参数必须都是正整数。

1.3.1.1例子:在 emp 表中,使用 LIMIT 子句返回从第 3 条记录开始的行数为 5 的记录,SQL 语句和运行结果如下

SQL笔记(一)SQL语法、SELECT语句、DISTINCT语句、LIMIT、LIMIT和OFFSET组合使用、WHERE 子句_第1张图片

SQL笔记(一)SQL语法、SELECT语句、DISTINCT语句、LIMIT、LIMIT和OFFSET组合使用、WHERE 子句_第2张图片
由结果可以看到,该语句返回的是从第 3 条记录开始的之后的 5 条记录。LIMIT 关键字后的第一个数字“2”表示从第 3 行开始(记录的位置从 0 开始,第 3 行的位置为 2),第二个数字 5 表示返回的行数。

1.3.2不指定初始位置

LIMIT 关键字不指定初始位置时,记录从第一条记录开始显示。显示记录的条数由 LIMIT 关键字指定。

LIMIT 不指定初始位置的基本语法格式如下:

LIMIT 记录数

其中,“记录数”表示显示记录的条数。如果“记录数”的值小于查询结果的总数,则会从第一条记录开始,显示指定条数的记录。如果“记录数”的值大于查询结果的总数,则会直接显示查询出来的所有记录。

1.3.2.1例子显示 emp 表查询结果的前 3 行,SQL 语句和运行结果如下

SQL笔记(一)SQL语法、SELECT语句、DISTINCT语句、LIMIT、LIMIT和OFFSET组合使用、WHERE 子句_第3张图片
SQL笔记(一)SQL语法、SELECT语句、DISTINCT语句、LIMIT、LIMIT和OFFSET组合使用、WHERE 子句_第4张图片结果中只显示了 3 条记录,说明“LIMIT 3”限制了显示条数为 3。

1.3.3 LIMIT 和 OFFSET 组合使用

LIMIT 可以和 OFFSET 组合使用,语法格式如下:

LIMIT 记录数 OFFSET 初始位置

参数和 LIMIT 语法中参数含义相同,“初始位置”指定从哪条记录开始显示;“记录数”表示显示记录的条数。

1.3.3.1在 emp 表中,使用 LIMIT OFFSET 返回从第 4 条记录开始的行数为 5 的记录,SQL 语句和运行结果如下。

SQL笔记(一)SQL语法、SELECT语句、DISTINCT语句、LIMIT、LIMIT和OFFSET组合使用、WHERE 子句_第5张图片

SQL笔记(一)SQL语法、SELECT语句、DISTINCT语句、LIMIT、LIMIT和OFFSET组合使用、WHERE 子句_第6张图片

由结果可以看到,该语句返回的是从第 4 条记录开始的之后的 5 条记录。即“LIMIT 5 OFFSET 3”意思是获取从第 4 条记录开始的后面的 5 条记录,和“LIMIT 3,5”返回的结果相同。

1.3.4总结

带一个参数的 LIMIT 指定从查询结果的首行开始,唯一的参数表示返回的行数,即“LIMIT n”、"LIMIT n OFFSET 0"与“LIMIT 0,n”返回结果相同。带两个参数的 LIMIT 可返回从任何位置开始指定行数的数据。

但是:LIMIT 0,n运行效率更高
LIMIT n运行效率低
LIMIT n OFFSET 0运行效率中

SELECT *
FROM emp 
LIMIT 0,2 运行效率更高
SELECT *
FROM emp 
LIMIT 2   运行效率低
SELECT *
FROM emp 
LIMIT 2 OFFSET 0 运行效率中

1.4WHERE 子句

WHERE 子句用于过滤记录

1.4.1WHERE 子句中的运算符

下面的运算符可以在 WHERE 子句中使用:

运算符 描述
= 等于
<> 不等于。注释:在 SQL 的一些版本中,该操作符可被写成 !=
> 大于
< 小于
>= 大于等于
<= 小于等于
BETWEEN 在某个范围内
LIKE 搜索某种模式
IN 指定针对某个列的多个可能值

1.4.2例子

1.4.2.1emp表

SQL笔记(一)SQL语法、SELECT语句、DISTINCT语句、LIMIT、LIMIT和OFFSET组合使用、WHERE 子句_第7张图片

1.4.2.2 查询emp表中job为人工智能,使用“=”

SELECT empno,job 
FROM emp
WHERE job = "人工智能"

SQL笔记(一)SQL语法、SELECT语句、DISTINCT语句、LIMIT、LIMIT和OFFSET组合使用、WHERE 子句_第8张图片

1.4.2.3查询emp表中的sal大于20000的,使用">“,”<“,”>=“,”<="也类似

SELECT ename,sal 
FROM emp
WHERE sal > 20000;

SQL笔记(一)SQL语法、SELECT语句、DISTINCT语句、LIMIT、LIMIT和OFFSET组合使用、WHERE 子句_第9张图片

1.4.2.4查询emp表中deptno不等于20,"<>"的使用

SELECT ename,deptno 
FROM emp
WHERE deptno <> 20;

SQL笔记(一)SQL语法、SELECT语句、DISTINCT语句、LIMIT、LIMIT和OFFSET组合使用、WHERE 子句_第10张图片

1.4.2.5查询emp表中sal的值在20000-40000,"between"的使用

SELECT ename,sal 
FROM emp
WHERE sal BETWEEN 20000 AND 40000;

SQL笔记(一)SQL语法、SELECT语句、DISTINCT语句、LIMIT、LIMIT和OFFSET组合使用、WHERE 子句_第11张图片

1.4.2.6查询emp表中job有"端"字,"like"关键字的使用

SELECT ename,job 
FROM emp
WHERE job LIKE "%端%";

SQL笔记(一)SQL语法、SELECT语句、DISTINCT语句、LIMIT、LIMIT和OFFSET组合使用、WHERE 子句_第12张图片

1.4.2.7查询emp表中deptno有10,30,50

SELECT ename,deptno 
FROM emp
WHERE deptno IN(10,30,50);

SQL笔记(一)SQL语法、SELECT语句、DISTINCT语句、LIMIT、LIMIT和OFFSET组合使用、WHERE 子句_第13张图片

1.4.2.8查询没有comm值的

SELECT *
FROM emp
WHERE comm IS NOT null; 

SQL笔记(一)SQL语法、SELECT语句、DISTINCT语句、LIMIT、LIMIT和OFFSET组合使用、WHERE 子句_第14张图片

1.4.2.9多重条件查询

在WHERE子句中可以使用逻辑运算符AND和OR来组成多条件查询。
使用AND谓词的语法格式如下:
布尔表达式1 AND 布尔表达式2 AND … AND 布尔表达式n
只有当全部的布尔表达式均为真时,整个表达式的结果才为真,只要有一个布尔表达式的结果为假,则整个表达式结果即为假。

使用OR谓词的语法格式如下。
布尔表达式1 OR 布尔表达式2 OR … OR 布尔表达式n
表示只要其中一个布尔表达式为真,则整个表达式的结果即为真;只有当全部布尔表达式的结果均为假时,整个表达式结果才为假。

1.4.2.9.1查询deptno为20并且sal>20000
SELECT *
FROM emp
WHERE deptno = 20 AND sal > 20000;

SQL笔记(一)SQL语法、SELECT语句、DISTINCT语句、LIMIT、LIMIT和OFFSET组合使用、WHERE 子句_第15张图片

1.4.2.9.2查询deptno为20或者sal>20000

SQL笔记(一)SQL语法、SELECT语句、DISTINCT语句、LIMIT、LIMIT和OFFSET组合使用、WHERE 子句_第16张图片

你可能感兴趣的:(SQL,sql,数据库,mysql)