目录
SHOW TABLES 命令用于显示当前选定的 MySQL 数据库中的所有表。
CONCAT() 函数用于连接两个或多个文本值,并返回连接字符串。
内连接(INNER JOIN)注释:INNER JOIN 与 JOIN 是相同的。
UNION 将多个数据集合并到单个数据集中,并删除任何现有的重复项。
UNION ALL 将多个数据集合并到一个数据集中,但不会删除重复的行。
UNION 用于合并两个或多个 SELECT 语句的结果集。
SQL 不区分大小写 等效
select City from customers;
SELECT City FROM customers;
sElEct City From customers;
tips:通常的做法是用大写编写所有 SQL 命令。
主键(PRIMARY KEY)是表中唯一标识表记录的字段。
主键的主要特征是:
- 主键必须包含唯一的值。
- 主键列不能包含 NULL 值。
tips: 每张表格只能有一个主键, 每行主键的值必须不同。
SHOW 语句显示数据库及其表中包含的信息
SHOW DATABASES 命令列出了服务器管理的数据库。
SHOW TABLES 命令用于显示当前选定的 MySQL 数据库中的所有表。
SHOW COLUMNS 显示有关给定表中的列的信息。
SHOW COLUMNS FROM customers
SHOW COLUMNS 显示每个表列的以下值:
- Field:列名称
- Type:列数据类型
- Key:指示列是否被索引
- Default:分配给列的默认值
- Extra:可能包含任何有关给定列的附加信息
SELECT 语句用于从数据库中选取数据。
SELECT column_list FROM table_name
column_list:包含从中检索数据的一个或多个列。
table_name:是从中检索信息的表的名称。
完全限定名称
## 二者等效
SELECT City FROM customers;
SELECT customers.City FROM customers;
ORDER BY
用于对结果集进行排序。
## 从 "customers" 表中选取所有客户,并按照 "FirstName" 列排序:
SELECT * FROM customers
ORDER BY FirstName;
tips:ORDER BY 关键字默认按照升序(ASC)对记录进行排序。降序对记录进行排序,使用 DESC 关键字。
## 多列排序
SELECT * FROM customers
ORDER BY LastName, Age;
tips:ORDER BY 命令按照与列相同的顺序开始排序。它将按列出的第一列排序,然后按第二列排序,依此类推。
“LastName” 列有两个 "Smith",他们将按照 “Age” 列升序排列。
## 从 "students" 表中选择不同的名称,然后按 "name" 列排序。
SELECT DISTINCT name FROM students ORDER BY name;
SHOW TABLES;
列出表名。
WHERE 子句用于提取那些满足指定标准的记录。
SELECT column_list FROM table_name WHERE condition;
## 从 "customers" 表中选择 ID 等于 "6" 的记录:
SELECT * FROM customers WHERE ID = 6;
运算符 | 描述 |
---|---|
= | 等于 |
<> | 不等于。注释:在 SQL 的一些版本中,该操作符可被写成 != |
> | 大于 |
< | 小于 |
>= | 大于等于 |
<= | 小于等于 |
BETWEEN | 在指定范围内
|
LIKE | a%(a开头)、%a(a结尾)、%a%(包含a) % 通配符可以在同一模式中多次使用。
|
IN | 指定针对某个列的多个可能值 IN(*) |
AND | 如果两个表达式结果都为 true,则为 true
|
OR | 如果任一表达式结果为 true,则为 true
|
IN | 如果操作数等于表达式列表之一,则为 true
|
NOT | 如果表达式结果为 true,则返回 false;否则如果表达式的结果为 false,则返回 true。
|
## 选择 id 为 "2" 或 "3",且城市为 "Hollywood" 的客户。
SELECT * FROM customers WHERE (id = 2 OR id = 3) AND city = 'Hollywood';
CONCAT() 函数用于连接两个或多个文本值,并返回连接字符串。
SELECT CONCAT(FirstName, ', ' , City) FROM customers;
AS
配合CONCAT()使用。
使用 AS 为结果列分配自定义名称:
SELECT CONCAT(FirstName,', ', City) AS new_column FROM customers;
## 可使用运算符 + - * /
SELECT ID, FirstName, LastName, Salary+500 AS Salary FROM employees;
UPPER() 函数将指定字符串中的所有字母转换为大写。
LOWER() 函数将字符串转换为小写。
SELECT FirstName, UPPER(LastName) AS LastName FROM employees;
SQRT() 函数返回参数中给定值的平方根。
AVG() 函数返回数值列的平均值:
SELECT Salary, SQRT(Salary) FROM employees;
SELECT AVG(Salary) FROM employees;
SUM() 函数返回数值列的总数。
SELECT SUM(Salary) FROM employees;
## 从 "items" 表中选择 cost 大于 "500" 的所有项目,按降序对 cost 进行排序。
SELECT * FROM items WHERE cost > 500 ORDER BY cost DESC;
SELECT FirstName, Salary FROM employees WHERE Salary > (SELECT AVG(Salary) FROM employees)
ORDER BY Salary DESC;
MIN() 函数返回指定列的最小值。
SELECT MIN(Salary) AS Salary FROM employees;
表连接
SELECT customers.ID, customers.Name, orders.Name, orders.Amount
FROM customers, orders
WHERE customers.ID=orders.Customer_ID
ORDER BY customers.ID;
## 使用表连接显示项目名称和购买项目的客户名称
SELECT customers.name, items.names
FROM customers , items
WHERE items.seller_id=customers.id;
自定义别名
将表名简短化
SELECT ct.ID, ct.Name, ord.Name, ord.Amount
FROM customers AS ct, orders AS ord
WHERE ct.ID=ord.Customer_ID
ORDER BY ct.ID;
-
内连接(INNER JOIN)注释:INNER JOIN 与 JOIN 是相同的。
-
左连接(LEFT JOIN)
-
右连接 (RIGHT JOIN)
## 通过共有column_name连接两张表
SELECT column_name(s) FROM table1 INNER JOIN table2 ON table1.column_name=table2.column_name;
从左表(table1)返回所有的行,即使右表(table2)中没有匹配。如果右表中没有匹配,则结果为 NULL。
返回左表中所有的行,在右表中有对应匹配的显示,没有则结果为NULL
SELECT table1.column1, table2.column2...
FROM table1 LEFT OUTER JOIN table2
ON table1.column_name = table2.column_name;
返回右表表中所有的行,在左表中有对应匹配的显示,没有则结果为NULL
SELECT table1.column1, table2.column2...
FROM table1 RIGHT OUTER JOIN table2
ON table1.column_name = table2.column_name;
UNION 将多个数据集合并到单个数据集中,并删除任何现有的重复项。
UNION ALL 将多个数据集合并到一个数据集中,但不会删除重复的行。
因为不会删除重复行,所以UNION ALL 比 UNION 快。
UNION 用于合并两个或多个 SELECT 语句的结果集。
tips:UNION 内部的每个 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每个 SELECT 语句中的列的顺序必须相同。
SELECT column_name(s) FROM table1
UNION
SELECT column_name(s) FROM table2;
## 不同的值
SELECT ID, FirstName, LastName, City FROM table1
UNION
SELECT ID, FirstName, LastName, City FROM table2;
## 含相同的值
SELECT ID, FirstName, LastName, City FROM table1
UNION ALL
SELECT ID, FirstName, LastName, City FROM table2;
INSERT INTO
tips:须确保值的顺序与表中的列的顺序相同。
## 等效
INSERT INTO table_name VALUES (value1, value2, value3,...);
INSERT INTO Employees (ID, FirstName, LastName, Age) VALUES (6, 'Andrew', 'Thomas', 43);
UPDATE 语句用于更新表中的记录。
UPDATE table_name SET column1=value1, column2=value2, ... WHERE condition;