前置知识
-
数据库(database):保存有组织的数据的容器(通常是一个文件或一组文件)
-
数据表(table):某种特定类型数据的结构化清单
-
模式(schema):关于数据库和表的布局及特性的信息。模式定义了数据在表中如何存储,包含存储什么样的数据,数据如何分解,各部分信息如何命名等信息。数据库和表都有模式
-
列(column):表中的一个字段。所有表都是由一个或多个列组成的
-
行(row):表中的一个记录
-
主键(primary key):一列(或一组列),其值能够唯一标识表中每一行
增
- CREATE DATABASE:创建新数据库。
CREATE DATABASE database_name;
-
CREATE TABLE:创建新表。
CREATE TABLE table_name ( column1 datatype, column2 datatype, ... );
-
CREATE INDEX:创建索引。
CREATE INDEX index_name ON table_name (column_name);
-
INSERT INTO:向数据库中插入新数据。
INSERT INTO table_name (column1, column2, ...) VALUES (value1, value2, ...);
删
-
DROP DATABASE:删除数据库。
DROP DATABASE database_name;
-
DROP TABLE:删除表。
DROP TABLE table_name;
-
DROP INDEX:删除索引。
DROP INDEX table_name.index_name;
-
DELETE:从数据库中删除数据。
DELETE FROM table_name WHERE condition;
改
-
UPDATE:更新数据库中的数据。
UPDATE table_name SET column1 = value1, column2 = value2, ... WHERE condition;
-
ALTER TABLE:修改表。
ALTER TABLE table_name ADD column_name datatype;
-
INSERT INTO:向数据库中插入新数据。
INSERT INTO table_name (column1, column2, ...) VALUES (value1, value2, ...);
查
-
SELECT:从数据库中获取数据。
SELECT column1, column2, ... FROM table_name;
-
SELECT DISTINCT:从数据库中获取唯一的数据。
SELECT DISTINCT column1, column2, ... FROM table_name;
-
WHERE:用于提取满足指定条件的记录。
SELECT column1, column2, ... FROM table_name WHERE condition;
-
AND, OR, NOT:用于创建复杂的条件语句。
SELECT column1, column2, ... FROM table_name WHERE condition1 AND condition2;
-
BETWEEN:用于选择介于两个值之间的数据。
SELECT column1, column2 FROM table_name WHERE column1 BETWEEN value1 AND value2;
-
LIMIT:限制查询结果
-- 返回前 5 行
SELECT * FROM mytable LIMIT 5;SELECT * FROM mytable LIMIT 0, 5;
-- 返回第 3 ~ 5 行
SELECT * FROM mytable LIMIT 2, 3;
子查询:
IN:用于在 WHERE 子句中规定多个值。
SELECT column1, column2
FROM table_name
WHERE column1 IN (value1, value2, ...);
子查询的子查询:
SELECT cust_name, cust_contactFROM customersWHERE cust_id IN
(SELECT cust_id FROM orders WHERE order_num IN
(SELECT order_num FROM orderitems WHERE prod_id = 'RGAN01'));
模糊查询:
-
LIKE:用于在 WHERE 子句中搜索列中的指定模式。
SELECT column1, column2 FROM table_name WHERE column1 LIKE pattern;
LIKE 操作符在 WHERE 子句中使用,作用是确定字符串是否匹配模式
只有字段是文本值时才使用 LIKE
LIKE 支持两个通配符匹配选项:% 和 _
不要滥用通配符,通配符位于开头处匹配会非常慢
% 表示任何字符出现任意次数
_ 表示任何字符出现一次
其他
对结果进行限制
-
ORDER BY:用于对结果集进行排序。
SELECT column1, column2, ... FROM table_name ORDER BY column1, column2, ... ASC|DESC;
-
GROUP BY:用于对结果集进行分组。
SELECT column1, column2 FROM table_name GROUP BY column1, column2;
-
HAVING:用于过滤分组后的结果。
SELECT column1, column2 FROM table_name GROUP BY column1, column2 HAVING condition;
-
IN:用于在 WHERE 子句中规定多个值。
SELECT column1, column2 FROM table_name WHERE column1 IN (value1, value2, ...);
连接和组合
-
SELECT column1, column2 FROM table1 UNION SELECT column1, column2 FROM table2;
-
JOIN:用于根据两个或多个表中的列之间的关系,从这些表中查询数据。
JOIN 有两种连接类型:内连接和外连接
内连接又称等值连接,使用 INNER JOIN 关键字。在没有条件语句的情况下返回笛卡尔积
自连接可以看成内连接的一种,只是连接的表是自身而已
自然连接是把同名列通过 = 测试连接起来的,同名列可以有多个
内连接 vs 自然连接
内连接提供连接的列,而自然连接自动连接所有同名列
外连接返回一个表中的所有行,并且仅返回来自次表中满足连接条件的那些行,即两个表中的列是相等的。外连接分为左外连接、右外连接、全外连接(Mysql 不支持)
左外连接就是保留左表没有关联的行
右外连接就是保留右表没有关联的行
自然连接(NATURAL JOIN)
SELECT *
FROM Products
NATURAL JOIN Customers;
左连接(LEFT JOIN)
SELECT customers.cust_id, orders.order_num
FROM customers LEFT JOIN orders
ON customers.cust_id = orders.cust_id;
右连接(RIGHT JOIN)
SELECT customers.cust_id, orders.order_num
FROM customers RIGHT JOIN orders
ON customers.cust_id = orders.cust_id;
-
UNION:用于合并两个或多个 SELECT 语句的结果集。
SELECT column1, column2
FROM table1
JOIN table2
ON table1.column_name = table2.column_name;
-
UNION ALL:用于合并两个或多个 SELECT 语句的结果集,包括重复行。
SELECT * FROM table1
UNION ALL
SELECT * FROM table2;