专栏首页PyStaDataSQL | SQL 必知必会笔记 (一 )

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

基本概念

概念

含义

数据库(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;

本文分享自微信公众号 - PyStaData(gh_60f259052905),作者:mudaozzz

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-05-13

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • SQL | SQL 必知必会笔记 (二)

    主要内容:介绍如何用 AND 和 OR 操作符组合成 WHERE 子句;介绍如何明确地管理求值顺序,如何使用 IN 和 NOT 操作符。

    PyStaData
  • PythonforResearch | 1_文件操作

    项目介绍:一直想写一份适合经济学等社科背景、学术科研向的 Python 教程。因为学经济学的多少会对 Stata 有所了解,有一些写代码命令的经历,这份教程应该...

    PyStaData
  • Python | 地址数据清理相关的库

    实证研究过程中,少不了地址数据的清理。比如为数据匹配省市信息、从大段文本中提取地址、从电话号码、身份证等信息中提取地址。面对这些清理工作,你有什么思路吗?其实在...

    PyStaData
  • (2)SQL语句实现表的横向聚合

    经过sql查询后输出的结果集为:(字段后面增加聚合[最大值] [最小值] [>=5的值个数])

    跟着阿笨一起玩NET
  • 新特性解读 | MySQL 8.0 索引特性1-函数索引

    函数索引顾名思义就是加给字段加了函数的索引,这里的函数也可以是表达式。所以也叫表达式索引。

    [3306 Pai ] 社区
  • git创建新分支

    git checkout -b [branch name] 的效果相当于以下两步操作:

    似水的流年
  • [Oracle 11g RAC安装]UDEV设置

    到这里已经可以在系统中看到openfiler的磁盘,可是重启后路径名会改变,这时需要利用udev固定路径名

    bsbforever
  • frp 供内网穿透服务的工具

    访问公网地址:http://frp.tinywan.top/?aa=bb,可以方便调试异步回调

    Tinywan
  • 边缘计算不会取代云计算

    几乎所有的新技术都是对传统技术的一种突破创新,云计算也不例外。边缘计算在业界的一些评论家看来将会取代云计算,但问题是这是真的吗? 边缘计算,是一种分散式运算的架...

    SDNLAB
  • SpringBoot 2.3.0 新特性一览,快来跟我实践一波!

    Spring Boot 2.3 已经发布一个月了,这两天才想起来尝一尝鲜儿。除了常规的升级外,很大部分的升级是针对 Docker 的,让你不得不相信,Docke...

    macrozheng

扫码关注云+社区

领取腾讯云代金券