本文主要关于SQL的基本语法的笔记,来自SoloLearn。
基本概念
介绍数据库
数据库
数据库是指以利于容易地连接、有效管理和更新的方式来管理的一系列的数据。数据库由储存相关联的信息的表格组成,举例来说,假设我们需要建立一个如YouTube的网站,那么我们需要数据库来存储视频信息、用户名与密码以及评论等等。
数据库表格
数据库表格用类似Excel的方式存储和展示数据,数据库通常由许多的表格构成,例如想象一个由名字和电话号码构成的表格。
primary key
primary key是表格中特殊的一列,主要特性是
- 每行都有独特的primary key
- 不能为null
例如下图中,ID是个primary key的好选择,因为可能会有重名的情况。
什么是SQL
我们已经理解了什么是数据库,那么理解什么是SQL就很简单了。SQL 全称是结构化序列语言(Structured Query Language)。SQL用于连接和操作数据库,而MySQL指的是一种能理解SQL的程序语言。可以这么说,SQL是一种标准,而有许多遵循这个版本却自带许多特性的程序语言的实现。
SQL可以:
- 插入、更新、删除数据库里的记录
- 创建新的数据库、表格、存储程序和外观
- 从数据库取回数据
SQL语句 SELECT
基本SQL语句
SHOW DATABASES
:返回服务器上所有数据库的序列
SHOW TABLES
:返回当前数据库上的所有表格
SHOW COLUMNS FROM customers
:返回选定表格内的列信息
SELECT 语句
1 |
SELECT column_list |
在制定表格内选中一列或者多列
语法规则
多行语句
SQL允许同时运行多句语句
1 |
SELECT FirstName FROM customers; |
大小写不敏感
SQL是大小写不敏感的,如下三行是同样的效果
1 |
select City from customers; |
忽略空白
whitespace和多行被忽略,以下语句是ok的
1 |
SELECT City |
选择多列
选择多列
以逗号分隔,可以同时选择多列
1 |
SELECT FirstName, LastName, City |
选择所有列
SELECT * FROM customers;
DISTINCT和LIMIT
DISTINCT关键词
DISTINCT关键词指排除重复项
1 |
SELECT DISTINCT column_name1, column_name2 |
LIMIT关键词
指定返回的子集大小
1 |
SELECT column list |
如选择前五项
1 |
SELECT ID, FirstName, LastName, City |
选择从3后面的4项
1 |
SELECT ID, FirstName, LastName, City |
排序
全名
当要操作拥有相同列名字的多个表格时,可以使用全名如
1 |
SELECT City FROM customers; |
Order By
Order By用于与SELECT来排序数据
用 Firstname排序
1 |
SELECT * FROM customers |
多列排序
1 |
SELECT * FROM customers |
先用LastName排序,在LastName相同的情况下,用Age排序
Filtering, Functions, Subqueries
WHERE语句
WHERE语句
WHERE语句类似一个过滤器的作用
1 |
SELECT column_list |
SQL操作符
比较操作符和逻辑操作符用于WHERE语句内
BETWEEN 操作符
用于选中一定范围内的值
1 |
SELECT column_name(s) |
Text 值
需要用单引号
1 |
SELECT ID, FirstName, LastName, City |
AND OR逻辑操作符
逻辑操作符用于操作两个布尔值,返回true、false、或者null
1 |
SELECT ID, FirstName, LastName, Age |
1 |
SELECT * FROM customers |
结合AND & OR
1 |
SELECT * FROM customers |
IN NOT IN
IN操作符用于需要将一列与许多值比较的情况,如用OR语句
1 |
SELECT * FROM customers |
用IN语句替代可简写为
1 |
SELECT * FROM customers |
NOT IN就是反面情况
1 |
SELECT * FROM customers |
Custom 列
CONCAT语句
CONCAT语句用于联合多个Text值,返回字符串
SELECT CONCAT(FirstName, ', ' , City) FROM customers;
AS 操作符
AS 操作符用于生成新的列
1 |
SELECT CONCAT(FirstName,', ', City) AS new_column |
算数操作符
-
-
- /
-
如将Salary自增500
1 |
SELECT ID, FirstName, LastName, Salary+500 AS Salary |
函数
UPPER LOWER函数
用于转换为大小写格式
1 |
SELECT FirstName, UPPER(LastName) AS LastName |
SQRT 、 AVG
SQRT返回平方根
1 |
SELECT Salary, SQRT(Salary) |
AVG返回均值
1 |
SELECT AVG(Salary) FROM employees; |
SUM函数
返回列的加和
1 |
SELECT SUM(Salary) FROM employees; |
子语句
子语句是指含有其他语句的语句,假设我们需要选中全部薪水大于均值的人,那么可能需要先获取均值
SELECT AVG(Salary) FROM employees;
再
1 |
SELECT FirstName, Salary FROM employees |
其实可以结合起来
1 |
SELECT FirstName, Salary FROM employees |
LIKE和MIN
LIKE函数
LIKE用于在WHERE里指定条件
1 |
SELECT column_name(s) |
例如,选择所有A开头的人
1 |
SELECT * FROM employees |
选择所有s结尾名字的人
1 |
SELECT * FROM employees |
MIN函数
用于选择最小值
SELECT MIN(Salary) AS Salary FROM employees;
JOIN、表操作
合并表格
对于以下两个表格
可用以下语句结合
1 |
SELECT customers.ID, customers.Name, orders.Name, orders.Amount |
结果
Join的类型
可以用“小名”来简化join操作
1 |
SELECT ct.ID, ct.Name, ord.Name, ord.Amount |
JOIN类型
- INNER JOIN
- LEFT JOIN
- RIGHT JOIN
INNER JOIN等同于JOIN
1 |
SELECT column_name(s) |
关系如图
LEFT JOIN 返回所有左边表格的行,甚至是在右边表格没有符合的也是如此。
基本语法为
1 |
SELECT table1.column1, table2.column2... |
举例来说,考虑以下两个依次是customers和items,
1 |
SELECT customers.Name, items.Name |
结果
如果用RIGHT JOIN
1 |
SELECT table1.column1, table2.column2... |
结果是
UNION
当需要合并相似的表格时,可以用到UNION and UNION ALL,两者主要区别是前者会丢弃重复项。
如考虑以下两个表格
使用语句
1 |
SELECT ID, FirstName, LastName, City FROM First |
结果为
而使用UNION ALL
1 |
SELECT ID, FirstName, LastName, City FROM First |
结果为
INSERT语句
插入语句
INSERT语句用于在表格插入一条数据
1 |
INSERT INTO table_name |
也可以指定插入列
1 |
INSERT INTO table_name (column1, column2, column3, ...,columnN) |
亦可只插入指定列
1 |
INSERT INTO table_name (column1, column2, column3, ...,columnN) |
UPDATE、DELETE语句
UPDATE语句用于更改表格
1 |
UPDATE table_name |
例如
1 |
UPDATE Employees |
也可以同时更改数项
1 |
UPDATE Employees |
DELETE用于删除数据
1 |
DELETE FROM table_name |
创建表格
CREATE TABLE 用于创建表格
基本语法
1 |
CREATE TABLE table_name |
- column_names指定列名
- data_type指定存储数据的类型如int
- size指定最大长度
如
1 |
CREATE TABLE Users |
varchar指的是字符类型
数据类型
数值
INT – 带符号或者非符号integer
FLOAT(M,D) – 带符号浮点数M是展示长度,D是小数点位
DOUBLE(M,D) – 带符号long类型浮点数M是展示长度,D是小数点位
日期和时间
DATE – YYYY-MM-DD 格式
DATETIME – YYYY-MM-DD HH:MM:SS 格式
TIMESTAMP – 从 1970年1月1日午夜开始计算的时间长度
TIME – Stores the time in HH:MM:SS format.
字符串
CHAR(M) – 固定长度的字符串,M是长度,最大为255 byte.
VARCHAR(M) – 可变长度字符串,M是最大长度
BLOB – “二进制大型对象” Binary Large Objects, 用于存储图片等
TEXT – 大规模的text数据
指定primary key
1 |
CREATE TABLE Users |