前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SQL | SQL 必知必会笔记 (一 )

SQL | SQL 必知必会笔记 (一 )

作者头像
PyStaData
发布2020-07-21 11:00:00
2.5K0
发布2020-07-21 11:00:00
举报
文章被收录于专栏:PyStaDataPyStaData

基本概念

概念

含义

数据库(database)

保存有组织的数据的容器(通常是一个文件或一组文件)

数据库软件管理系统(DBMS)

数据库软件用于创建和操作数据库

表(table)

某种特定类型数据的结构化清单

列(column)

表中的一个字段,所有表都是有一个和 多个列组成

行(row)

表中的一个记录(record)

主键(primary key)

一列(或一组列),其值能够唯一标识表中每一行

关键字(keyword)

作为 SQL 组成部分的保留字。关键字不能用作表或者列的名字

子句(clause)

SQL 语句由子句构成,有些子句是必需的,有些则是可选的

一些规则

  1. 多条 SQL 语句必须以分号分隔。
  2. SQL 不区分大小写,但一般习惯关键字用大写,列名和表名使用小写。
  3. 处理 SQL 语句时,所有空格都会被忽略。一般认为写成多行更容易维护。
  4. 选择多个列时,一定要在列名之间加上逗号,但最后一个列名不加。如果在最后一个列名加了逗号,会出现错误。
  5. SQL 一般返回原始的、无格式的数据。
  6. 第一个检索的行是第 0 行,而不是第 1 行。
  7. 并非所有 SQL 实现方式 都一样。虽然基本的语句容易移植,但是较复杂的语句会有区别。
  8. 检索出来的数据默认是不排序,会以其在底层表中出现的顺序显示。

检索数据

SQL 语句是由简单的英语单词构成的。这些单词称为 关键字,每个 SQL 语句都是由一个或多个关键字构成的。使用 SELECT 关键字检索表数据,必须给出想选择什么(SELECT)和从什么地方选择两条信息(FROM)。

选择单个列

SELECT prod_name
FROM Products;

处理 SQL 语句时,所有空格都会被忽略。下面三个例子可以实现同样的效果,一般认为写成多行更容易维护。

# 语法1
SELECT prod_name
FROM Products;

# 语法2
SELECT prod_name FROM Products;

# 语法3
SELECT
prod_name
FROM
Products;

检索多个列

SELECT prod_id, prod_name, prod_price
FROM Products;

检索所有列

SELECT *
FROM Products;

实际列名的位置使用星号(*)通配符可以选择所有列。除非实际需要检索所有的列,不然检索不需要的列或降低检索和应用程序的性能。

检索不同的值

SELECT vend_id
FROM Products;

使用 DISTINCT 关键字只返回不同的(唯一的)值。

SELECT DISTINCT vend_id
FROM Products;

DISTINCT 关键字作用于所有列,不仅仅是跟在其后那一列。比如 SELECT DISTINCT vend_id, prod_id, prod_price 因为指定的两列不完全相同,所以所有的行都会被检索出来。

限制结果

默认显示所有满足条件的行,可以只显示指定的行吗?**可以,但是在不同数据库实现方式不同。

在 SQL Server 和 Access 中使用 SELECT 时,可以使用 TOP 关键字来限制最多返回的行。

SELECT TOP 5 prod_name
FROM Products;

如果使用 DB2 :

SELECT prod_name
FROM Products
FETCH FIRST 5 ROWS ONLY;

如果使用 Oracle ,需要基于 ROWNUM(行计数器)来计算行:

SELECT prod_name
FROM Products
WHERE ROWNUM > 5;

如果使用 MySQL、MariaDB、PostgreSQL 或者 SQLite,则需要使用 LIMIT 子句:

SELECT prod_name
FROM Products
LIMIT 5;

返回第 5 行起的第 5 行数据。第一个数字是检索的行数,第二个数字是指从哪儿开始。

SELECT prod_name
FROM Products
LIMIT 5 OFFSET 5;

MySQL、MariaDB 和 SQLite 支持简化版的 LIMIT 4 OFFSET 3 语句,即 LIMIT 3,4

使用注释

行注释 1:注释使用 --(两个连字符)嵌在行内。

SELECT prod_name --这是一条注释
FROM Products;

行注释 2:使用 #

# 这是一条注释
SELECT prod_name
FROM Products;

块注释:使用 /**/

/* SELECT prod_name, vend_id
FROM Products; */
SELECT prod_name
FROM Products;

排序检索数据

本节讲授如何使用 SELECTORDER BY 子句,根据需要排序检索数据。

排序数据

SELECT prod_name
FROM Products
ORDER BY prod_name;

/* ORDER BY prod_id;
也可以是非检索行排序*/

在指定一条 ORDER BY 子句时,应该保证它是 SELECT 语句中的最后一条子句。

按多列排序

SELECT prod_id, prod_name, prod_price
FROM Products;
ORDER BY prod_price, prod_name;

上面的语句,首先按照价格,然后按名称排序。

按列位置排序

除了能用列名排序顺序外,ORDER BY 还支持按相对列位置进行排序。

SELECT prod_id, prod_name, prod_name
FROM Products
ORDER BY 2,3; --,2,3表示清单中的列;表示先按prod_price,再按prod_name排序

指定排序方向

默认使用升序排序(从 A 到 Z),通过指定 DESC (DESCENDING) 关键字实现降序排序。可以通过 AESC (AESCENDING)升序排序,但实际没有多大用处,因为默认就是使用升序排序。

SELECT prod_id, prod_name, prod_price
FROM Products
ORDER BY prod_price DESC;

DESC 只应用到直接位于其前面的列名。如果想在多个列上降序排序,必须对每一列指定 DESC 关键字。

SELECT prod_id, prod_name, prod_price
FROM Products
ORDER BY prod_price DESC, prod_name;

区分大小写和排序数据?在对文本数据排序的时候,A 和 a 是一样的吗?这不是理论问题,取决于数据库的设置。

过滤数据

本节讲授使用 WHERE 关键字指定搜索条件。

使用 WHERE 句子

只检索所需数据指定搜索条件(search criteria),搜索条件也被称为过滤条件(fliter condition)。

SELECT prod_name, prod_price
FROM Products
#检索 prod_price 为 3.49 的行
WHRER prod_price = 3.49;

注意:在同时使用 ORDER BYWHERE 子句时,应该让 ORDER BY 位于 WHERE 之后。

WHERE 子句操作符

注意:<>!=通常可以互换。但是并非所有 DBMS 都支持这两种不等于操作符。比如,Microsoft Access 支持 <> 而不支持 !=

检查单个值与不匹配检查

SELECT prod_name, prod_price
FROM Products
WHERE prod_price <= 10;
# WHERE vend_id != 'DLL01';

范围值检查

SELECT prod_name, prod_price
FROM Products;
WHERE prod_price BEtween 5 AND 10;

空值检查

NULL 表示空值,确定是否空值,不能简单的 = NULLSELECT 语句有一个特殊的 WHERE 子句 IS NULL ,可用来检查具有 NULL 值的列。

SELECT prod_name
FROM Products
WHERE prod_price IS NULL;
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-05-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 PyStaData 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 基本概念
  • 一些规则
  • 检索数据
    • 选择单个列
      • 检索多个列
        • 检索所有列
          • 检索不同的值
            • 限制结果
              • 使用注释
              • 排序检索数据
                • 排序数据
                  • 按多列排序
                    • 按列位置排序
                      • 指定排序方向
                      • 过滤数据
                        • 使用 WHERE 句子
                          • WHERE 子句操作符
                            • 检查单个值与不匹配检查
                            • 范围值检查
                            • 空值检查
                        相关产品与服务
                        云数据库 SQL Server
                        腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
                        领券
                        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档