引言
最近看了《sql必知必会》,趁这个机会汇总一下涉及的知识点,方便大家查阅。
SQL(Structured Query Language,结构化查询语言)是一种用于管理关系型数据库的语言。它是一种标准化的语言,可以用于执行多种任务,例如创建和修改数据库结构、向数据库中插入数据、从数据库中查询和筛选数据等。
SQL 分为几个不同的部分,包括:
- 数据定义语言(DDL,Data Definition Language):用于创建和修改数据库结构,例如创建表、修改表结构等;
- 数据操作语言(DML,Data Manipulation Language):用于向数据库中插入数据、更新数据、删除数据等;
- 数据控制语言(DCL,Data Control Language):用于控制数据库的访问权限,例如创建用户、赋予用户权限等;
- 数据查询语言(DQL,Data Query Language):用于从数据库中查询数据。
SQL 使用简单的语法来描述这些操作,并且可以很容易地与其他编程语言集成使用。不同的关系型数据库管理系统(RDBMS)都支持 SQL 语言,例如 MySQL、Oracle、SQL Server 等。
总的来说,SQL 是一种非常重要的数据库管理语言,它可以帮助我们方便地管理和操作关系型数据库,实现各种功能。
检索数据
SELECT语句的基本语法
SELECT column1, column2, ...
FROM table_name;
其中,column1, column2为要检索的列,table_name为要检索的表名。
使用通配符*检索所有列
SELECT *
FROM table_name;
检索不重复的数据
SELECT DISTINCT column1, column2, ... FROM table_name;
其中,DISTINCT关键字用于检索不重复的数据。
使用条件检索数据
SELECT column1, column2, ... FROM table_name WHERE condition;
其中,condition是一个逻辑表达式,用于检索符合特定条件的数据。
使用运算符检索数据
SELECT column1, column2, ... FROM table_name WHERE column1 operator value;
其中,operator是一个运算符,如=、<、>等。
排序数据
ORDER BY子句的基本语法
SELECT column1, column2, ... FROM table_name ORDER BY column1, column2, ... ASC|DESC;
其中,ORDER BY子句可以按一个或多个列进行排序,并可以选择升序(ASC)或降序(DESC)排序。
按单个列排序
SELECT column1, column2, ... FROM table_name ORDER BY column1 ASC|DESC;
按多个列排序
SELECT column1, column2, ... FROM table_name ORDER BY column1 ASC|DESC, column2 ASC|DESC, ...;
过滤数据
WHERE子句的基本语法
SELECT column1, column2, ... FROM table_name WHERE condition;
其中,condition是一个逻辑表达式,用于检索符合特定条件的数据。
使用比较运算符过滤数据
SELECT column1, column2, ... FROM table_name WHERE column1 operator value;
其中,operator是一个比较运算符,如=、<、>等。
使用逻辑运算符过滤数据
SELECT column1, column2, ... FROM table_name WHERE condition1 operator condition2;
其中,operator是一个逻辑运算符,如AND、OR、NOT等。
模糊匹配
LIKE关键字的基本语法
SELECT column1, column2, ... FROM table_name WHERE column LIKE pattern;
其中,pattern是一个带有通配符的字符串,用于匹配符合特定模式的数据。
使用%通配符进行模糊匹配
SELECT column1, column2, ... FROM table_name WHERE column LIKE '%pattern%';
其中,%表示任意长度的任意字符。
使用_通配符进行模糊匹配
SELECT column1, column2, ... FROM table_name WHERE column LIKE 'pattern_';
其中,_表示任意一个字符。
聚合数据
聚合函数的使用
COUNT():用于计算行数或非空值的数量;
SUM():用于计算列中数值的总和;
AVG():用于计算列中数值的平均值;
MIN():用于计算列中的最小值;
MAX():用于计算列中的最大值。
GROUP BY子句的使用
SELECT column1, aggregate_function(column2) FROM table_name GROUP BY column1;
其中,GROUP BY子句用于按照指定的列对数据进行分组。
HAVING子句的使用
SELECT column1, aggregate_function(column2) FROM table_name GROUP BY column1 HAVING condition;
其中,HAVING子句用于过滤分组后的数据。
子查询和联结
子查询的使用
子查询是指在一个查询中嵌套另一个查询,将内部查询的结果作为外部查询的条件或结果集。可以将子查询看作是一个临时表,根据需要执行。
例如:
SELECT * FROM orders WHERE customer_id IN (SELECT customer_id FROM customers WHERE city = 'London');
内部查询的结果是"customers"表中城市为'London'的客户ID,外部查询返回所有订单中客户ID等于内部查询结果的数据。
联结的使用
联结是指在多个表中查找相关数据并将其合并成一个结果集。有多种联结方式,包括内联结、外联结和自联结等。
SELECT orders.order_id, customers.customer_name FROM orders INNER JOIN customers ON orders.customer_id = customers.customer_id;
INNER JOIN关键字指定了联结方式,ON子句指定了连接条件,返回订单ID和客户名称。
删除和更新
DELETE语句
DELETE语句用于删除表中的数据,它的基本语法如下:
DELETE FROM table_name WHERE condition;
其中,condition是过滤条件,它用于指定哪些行需要被删除。
以下是一个删除示例,删除名为"customers"的表中所有姓为"Smith"的人的记录:
DELETE FROM customers WHERE last_name = 'Smith';
UPDATE语句
UPDATE语句用于更新表中的数据,它的基本语法如下:
UPDATE table_name SET column1 = value1, column2 = value2, ... WHERE condition;
其中,SET子句用于指定需要更新的列和新的值,condition用于过滤需要更新的行。
以下是一个更新示例,将名为"John"的客户的地址更新为"123 Main St.":
UPDATE customers SET address = '123 Main St.' WHERE first_name = 'John';
视图
CREATE VIEW
CREATE VIEW语句用于创建一个视图,它的基本语法如下:
CREATE VIEW view_name AS SELECT statement;
其中,SELECT statement指定了视图的数据来源。
以下是一个创建视图的示例,创建一个名为"customer_orders"的视图,包含顾客和订单表中的相关信息:
CREATE VIEW customer_orders AS
SELECT customers.customer_id, customers.first_name, customers.last_name, orders.order_id, orders.order_date
FROM customers
INNER JOIN orders
ON customers.customer_id = orders.customer_id;
SELECT FROM VIEW
SELECT语句可以从视图中获取数据,就像从表中获取数据一样。基本语法如下:
SELECT column1, column2, ... FROM view_name WHERE condition;
其中,condition用于指定筛选条件。