SQL语句总结

SQL ,全称为Structured Query Language (结构化查询语言)。要将SQL就要说database(数据库),平时所说的数据库,一般就是指的 Relational database(关系型数据库)

小贴士:有哪些流行的数据库?
大家应该或多或少听说过一些数据库比如 SQLite, MySQL, Postgres, Oracle 和 Microsoft SQL Server. 这几个数据库(可以理解为软件)是目前比较流行的一些数据库。所有这些数据库都支持标准的 SQL,换句话说,你学会了SQL就可以对这些数据库做数据操作了! 当然上面的每一种数据库都有自己的特性和适用范围(想象一下你家有 不同尺寸的盘子).

  • SQL Lesson 1: select 查询
Select 查询某些属性列(columns)的语法
SELECT column(列名),another_column, ... 
FROM mytable(表名); 

查询的结果是一个二维的表格,由行(rows)和列(columns)组成。
如果想获取所有列的数据,可以用(*)来代表所有列,如下:

SELECT * 
FROM mytable(表名);
  • -SQL Lesson 2: 条件查询(constraints)
条件查询语法
SELECT column , another_column,...
FROM mytable
WHERE condition
	AND/OR another_condiction
	AND/OR ....;
注:condition 都是描述属性列的

可以用 AND or OR 这两个关键字来组装多个条件(score>=80 AND age <=45 这个组合表示成绩大于80并且年龄小于45),下面有用来筛选数字的属性列:
在这里插入图片描述
当然除了有数字类型属性的筛选,那肯定还有字符串属性的筛选。下面这个表格对字符串操作富有详细的描述:
在这里插入图片描述

  • SQL Lesson 3:查询结果Filtering过滤 和 sorting 排序
    DISTINCT 语法介绍,表中某一列中有很多相同的元素,比如:年份,但你想对这一列进行排重,那你可以使用 DISTINCT 关键字来制定某个或者某些属性列唯一返回,写作:DISTINCT Year
选取出唯一的结果的语法:
SELECT DISTINCT column, another_column,...
FROM mytable
WHERE condiction;

因为 DISTINCT 语法会直接删除重复的行,所以仅限查询的话不太建议使用,我们还学习了 GROUP BY 语句, GROUP BY 也返回唯一的一行,不过可以对具有相同的属性进行一些聚合计算,比如:求和,平均值

结果排序

过滤操作后,我们可能还会对结果做一些排序操作,为了解决结果排序问题,我们可以用 ORDER BY col_name 排序的语法来让结果按一个或多个属性列做排序。

结果排序
SELECT column, anther_column,...
FROM nytable
WHERE condiction
ORDER BY column ASC/DESC;
注意:ORDER BY col_name 这句话的意思就是让结果按照 col_name 列的具体值做 ASC升序 或 DESC 降序,文本列是按文本的字母序进行排序。

通过Limit选取部分结果
LIMIT 和 OFFSET 语句通常和 ORDER BY 语句一起使用, 当我们对整个结果集排序后,可以 LIMIT 来指定只返回多少行结果,用OFFSET 来指定从哪一行开始返回。

limit 查询
SELECT column, anther_column, ...
FROM mytable
WHERE confiction
ORDER BY col_name ASC/DESC
LIMIT num_limit  OFFSET num_offset;
  • SQL Lesson 5: 用JOINs进行多表联合查询

主键(primary key) 一般关系数据表,都会有一个属性设置为 主键(primary key)。主键是唯一标识一条数据的,不会重复。一个常见的主键就是 auto-incrementing integer。借助主键,(当然其他唯一性的属性也可以),我们可以把两个表中具有相同 主键ID的数据连接起来(因为一个ID可以简要的识别一条数据,所以连接之后还是表达的同一条数据)(你可以想象一个左右连线游戏)。具体我们用到 JOIN 关键字。我们先来学习 INNER JOIN。

用INNER JOIN 连接表的语法
SELECT column,another_table_column,...
FROM mytable(主表)
INNER JOIN another_table(要连接的表)
	ON mytable.id = another_table_id (连接条件)
WHERE condition
ORDER BY column ,...ASC/DESC
LIMIT num_limit OFFSET num_offset;

INNER JOIN 只会保留两个表都存在的数据,但对数情况下我们会用到外连接,也就是左连接LEFT JOIN , 右连接RIGHT JOIN 和 全连接 FULL JOIN

用 LEFT/RIGHT/FULL JOINs 做多表查询
SELECT column, another_column,...
FROM mytable
INNER/LEFT/RIGHT/FULL JOIN another_table 
	ON mytable.id = another_table.id
WHERE condition
ORDER BY column ,ASC/DESC
LIMIT num_limit OFFSET num_offset;
  • 使用AS 关键字
AS使用别名
SELECT col_expression AS expr_description, …
FROM mytable;

实际上AS不仅用在表达式别名上,普通的属性列甚至是表(table)都可以取一个别名,这让SQL更容易理解.

基本语法大概就这些,现在我们对执行顺序做一个排序

介绍完了所有查询相关的语法,我们来把之前的所有语法集中到一个句子中.

这才是完整的SELECT查询
SELECT DISTINCT column, AGG_FUNC(column_or_expression), …
FROM mytable
    JOIN another_table
      ON mytable.column = another_table.column
    WHERE constraint_expression
    GROUP BY column
    HAVING constraint_expression
    ORDER BY column ASC/DESC
    LIMIT count OFFSET COUNT;

一个查询SQL的执行总是先从数据里按条件选出数据,然后对这些数据再次做一些整理处理,按要求返回成结果,让结果尽可能是简单直接的。因为一个 查询SQL由很多部分组成,所以搞清楚这些部分的执行顺序还挺重要的,这有助于我们更深刻的理解SQL执行过程.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值