常用SQL语法总结

目录

常见的DDL操作

创建数据库

删除数据库

查看数据库:

创建表格

删除表格

添加主键

删除主键

查看表格

查看表的结构

改变表格名字

添加列

删除列

修改列名

修改表格

创建索引

 删除索引

创建视图

删除视图

常见的DML操作

插入数据

方式1:使用常规INSERT INTO语句

方式2:插入多行数据

更新数据

方式1:使用常规UPDATE语句

方式2:同时更新多个列

删除数据

方式1:使用常规DELETE FROM语句

方式2:删除所有数据

查询数据

方式1:基本SELECT语句

方式2:使用聚合函数

方式3:多表联接

高级DML技巧

事务管理

使用子查询

使用触发器

常见的DCL操作

SQL Server

创建用户

给用户授权

撤销授权

查看用户权限

删除用户

修改用户密码

MySQL

创建用户

给用户授权

撤销授权

查看用户权限

删除用户

修改用户密码

数据库权限的层次结构

角色的使用

注意事项和最佳实践

常见的DQL操作

多种查询方式

a. 基本SELECT语句

b. 条件筛选

c. 排序结果

使用聚合函数

分组和分组函数

内连接

左连接

右连接

子查询

SQL Server常用语法

创建数据库:

选择数据库:

创建表格:


SQL(Structured Query Language)具有四个主要的子集,用于不同的数据库操作,这些子集分别是:

  1. DML(Data Manipulation Language): DML用于操纵数据库中的数据,主要包括插入、更新、删除数据的操作。常见的DML语句包括INSERT、UPDATE、DELETE。

  2. DQL(Data Query Language): DQL用于查询数据库中的数据,它主要包括用于检索信息的查询操作,其中最常见的是SELECT语句。

  3. DDL(Data Definition Language): DDL用于定义数据库的结构,包括创建、修改、删除数据库对象,如表、索引、视图等。常见的DDL语句包括CREATE、ALTER、DROP。

  4. DCL(Data Control Language): DCL用于数据库的访问控制和权限管理,它包括授权、撤销授权等语句,用于管理用户对数据库的权限。常见的DCL语句包括GRANT和REVOKE。

这四个子集一起构成了SQL的核心功能,使用户能够管理数据库对象、执行查询、操纵数据以及控制访问权限。不同的数据库管理系统(DBMS)支持SQL的不同子集,但这些子集都是SQL语言的标准组成部分。

常见的DDL操作

创建数据库

要创建一个新数据库,您可以使用SQL中的CREATE DATABASE语句,后面跟着数据库的名称。例如:

CREATE DATABASE MyDatabase;

这将创建一个名为"MyDatabase"的新数据库。 

删除数据库

要删除数据库及其所有内容,可以使用SQL中的DROP DATABASE语句,后面跟着数据库的名称。请谨慎使用此操作,因为它将永久删除数据库中的所有数据。例如:

DROP DATABASE MyDatabase;

这将永久删除名为"MyDatabase"的数据库。

查看数据库:

要查看数据库的列表或属性,可以使用数据库管理系统(DBMS)提供的查询或命令。具体操作取决于使用的DBMS。以下是一些常见的示例:

 在MySQL中,您可以使用以下命令列出所有数据库:

SHOW DATABASES;

在SQL Server中,您可以使用以下查询来列出所有数据库:

SELECT name FROM sys.databases;

创建表格

创建表格是数据库设计的第一步。使用DDL中的CREATE TABLE语句,我们可以定义表格的结构,包括列的名称、数据类型、约束条件等。这是数据存储的基础。

CREATE TABLE Employees (
    EmployeeID INT PRIMARY KEY,
    FirstName VARCHAR(50),
    LastName VARCHAR(50),
    Salary DECIMAL(10, 2)
);

这个SQL代码用于创建名为"Employees"的表格。以下是各个部分的解释:

  • CREATE TABLE Employees: 这是DDL语句的起始部分,指示要创建一个名为"Employees"的表格。

  • (EmployeeID INT PRIMARY KEY, FirstName VARCHAR(50), LastName VARCHAR(50), Salary DECIMAL(10, 2)): 这部分定义了表格的列。每列由列名和数据类型组成,其中包括EmployeeID(整数类型),FirstNameLastName(文本类型),以及Salary(十进制数类型)。PRIMARY KEY关键字指示EmployeeID列是主键,用于唯一标识每个记录。

删除表格

有时候,我们需要从数据库中删除不再需要的表格。使用DDL中的DROP TABLE语句,我们可以永久删除表格及其数据。

DROP TABLE Employees;

这个SQL代码用于永久删除名为"Employees"的表格及其所有数据。以下是解释:

  • DROP TABLE Employees: 这部分指示要删除名为"Employees"的表格。

添加主键

Alter table tabname add primary key(col)

删除主键

Alter table tabname drop primary key(col)

查看表格

在MySQL中,您可以使用以下SQL查询来查看数据库中的表格:

SHOW TABLES;

在SQL Server中,您可以使用以下SQL查询来列出当前数据库中的所有表格:

SELECT table_name = t.name
FROM sys.tables t
INNER JOIN sys.schemas s
ON t.schema_id = s.schema_id;

查看表的结构

使用以下SQL语句可以查看表格的结构

DESCRIBE table_name;

SHOW COLUMNS FROM table_name;

改变表格名字

使用以下SQL语句可以更改表格的名字:

ALTER TABLE old_table_name RENAME TO new_table_name;

添加列

-- 在Employees表格中添加新列Email
ALTER TABLE Employees
ADD Email VARCHAR(100);

在上面的示例中,我们使用ALTER TABLE语句,指定要修改的表格(Employees),然后使用ADD子句添加新列(Email),并指定新列的数据类型(VARCHAR(100))。 

删除列

-- 从Employees表格中删除列Email
ALTER TABLE Employees
DROP COLUMN Email;

在上面的示例中,我们使用ALTER TABLE语句指定要修改的表格(Employees),然后使用DROP COLUMN子句删除列(Email)。 

修改列名

使用以下SQL语句可以修改列名:

ALTER TABLE table_name
CHANGE old_column_name new_column_name new_data_type;

这将把名为old_column_name的列的名字更改为new_column_name,并可以选择性地更改数据类型。 

修改表格

据库结构是动态的,需要不断适应变化的需求。DDL允许我们使用ALTER TABLE语句来修改表格结构,如添加新列、修改列数据类型或添加约束条件。

ALTER TABLE Employees
ADD Email VARCHAR(100);

这个SQL代码用于修改名为"Employees"的表格,添加一个名为"Email"的新列。以下是解释:

  • ALTER TABLE Employees: 这部分指示要修改名为"Employees"的表格。

  • ADD Email VARCHAR(100): 这部分表示要向表格中添加一个新列,名为"Email",数据类型为VARCHAR,最大长度为100个字符。

创建索引

索引是加速数据检索的关键。DDL允许我们使用CREATE INDEX语句来定义一个或多个列的索引,提高数据检索性能。

CREATE INDEX idx_EmployeeLastName ON Employees(LastName);

个SQL代码用于在名为"Employees"的表格的"LastName"列上创建一个索引。以下是解释:

  • CREATE INDEX idx_EmployeeLastName: 这部分表示要创建一个名为"idx_EmployeeLastName"的索引。

  • ON Employees(LastName): 这部分指示该索引应该建立在名为"Employees"的表格的"LastName"列上,以加速对"LastName"列的数据检索。

 删除索引

DROP INDEX index_name ON table_name

注:索引是不可更改的,想更改必须删除重新建。

创建视图

create view viewname as select statement

删除视图

drop view viewname

常见的DML操作

DML是SQL的子集,专注于操作和管理数据库中的数据。它是数据库管理的核心,允许我们以不同的方式操纵数据,以满足应用程序的需求。

插入数据

插入数据是DML中的基本操作,用于将新数据添加到数据库表格中。有多种方式可以实现插入数据,下面是一些示例:

方式1:使用常规INSERT INTO语句
INSERT INTO Customers (CustomerName, ContactName, ContactEmail)
VALUES ('CompanyA', 'John Smith', '[email protected]');

在这个示例中,我们使用INSERT INTO语句指定要插入数据的目标表格(Customers),然后在VALUES子句中指定要插入的值,这将在表格中创建一条新记录。

方式2:插入多行数据
INSERT INTO Orders (OrderID, CustomerID, OrderDate)
VALUES (1, 101, '2023-01-15'),
       (2, 102, '2023-01-16'),
       (3, 101, '2023-01-17');

这个示例演示如何一次插入多行数据,以便高效地添加多个记录。

更新数据

更新数据是DML的另一个关键操作,它允许我们修改数据库中的现有数据。以下是一些更新数据的方式:

方式1:使用常规UPDATE语句
UPDATE Employees
SET Salary = 55000.00
WHERE EmployeeID = 1001;

在这个示例中,我们使用UPDATE语句指定要更新的目标表格(Employees),然后使用SET子句指定要更新的列和新值,最后使用WHERE子句确定要更新的行。

方式2:同时更新多个列
UPDATE Orders
SET OrderStatus = 'Shipped',
    ShippedDate = '2023-01-20'
WHERE OrderID = 123;

这个示例演示了如何同时更新多个列,以便在一次操作中修改多个字段的值。

删除数据

删除数据是DML操作的一个关键方面,用于从数据库中永久删除不再需要的数据。以下是一些删除数据的方式:

方式1:使用常规DELETE FROM语句
DELETE FROM Customers
WHERE CustomerName = 'CompanyA';

在这个示例中,我们使用DELETE FROM语句指定要删除的目标表格(Customers),然后使用WHERE子句确定要删除的行。

方式2:删除所有数据
DELETE FROM Products;

这个示例演示了如何删除表格中的所有数据,这在清理整个表格时非常有用。

查询数据

查询数据是DML的核心,用于检索数据库中的数据。以下是一些不同方式的查询数据:

方式1:基本SELECT语句
SELECT CustomerName, ContactName
FROM Customers;

这是最基本的查询方式,用于选择特定列的数据。

方式2:使用聚合函数
SELECT COUNT(*) AS TotalOrders
FROM Orders;

这个示例演示了如何使用聚合函数(COUNT)来汇总数据,以获取总订单数。

方式3:多表联接
SELECT Customers.CustomerName, Orders.OrderDate
FROM Customers
JOIN Orders ON Customers.CustomerID = Orders.CustomerID;

这个示例演示了如何将多个表格联接在一起,以获取相关数据。

高级DML技巧

除了基本的插入、更新、删除和查询操作,还有一些高级DML技巧:

事务管理

使用事务可以确保一系列DML操作要么全部成功,要么全部失败。这有助于维护数据库的一致性。

BEGIN TRANSACTION;
-- 执行一系列DML操作
COMMIT;
-- 或者 ROLLBACK 如果需要回滚操作
使用子查询

子查询允许您在DML操作中使用查询结果,以便根据其他数据来操作数据。

UPDATE Products
SET Price = Price * 0.9
WHERE CategoryID IN (SELECT CategoryID FROM Categories WHERE CategoryName = 'Electronics');
使用触发器

触发器是在DML操作之前或之后自动触发的存储过程。它们可以用于执行特定的操作,如日志记录或数据验证。

常见的DCL操作

数据库授权是授予用户或角色对数据库对象的访问权限的过程。权限控制是确保用户只能执行其具备权限的操作的方法。通过DCL语句,数据库管理员可以执行以下操作:

SQL Server

创建用户

  1. 创建登录(用户名和密码):

    CREATE LOGIN NewUser WITH PASSWORD = 'UserPassword';
    

    使用 CREATE LOGIN 语句创建登录,登录将作为用户的凭证。NewUser 是要创建的登录用户名,UserPassword 是登录的密码。

  2. 创建用户并将其与数据库关联:

    USE YourDatabaseName;
    CREATE USER NewUser FOR LOGIN NewUser;
    

 使用 USE 语句选择要创建用户的数据库。使用 CREATE USER 语句为登录创建数据库用户。NewUser 是用户的名称,它将与创建的登录关联起来。

给用户授权

使用 GRANT 语句为用户分配权限。

GRANT SELECT, INSERT, UPDATE ON YourTableName TO NewUser;

这个语句将授予 NewUser 用户对 YourTableName 表格的 SELECTINSERTUPDATE 权限。

撤销授权

使用 REVOKE 语句来撤销已授予的权限。

REVOKE SELECT, INSERT, UPDATE ON YourTableName FROM NewUser;

这个语句将从 NewUser 用户中撤销对 YourTableName 表格的 SELECTINSERTUPDATE 权限。

查看用户权限

要查看用户的权限,您可以使用以下查询:

SELECT permission_name, state_desc
FROM sys.database_permissions
WHERE grantee_principal_id = USER_ID('NewUser');

这个查询将返回 NewUser 用户在数据库中拥有的权限列表,以及这些权限的状态。

删除用户

删除用户需要首先删除用户与数据库的关联,然后删除登录。

  1. 删除用户与数据库的关联:

    USE YourDatabaseName;
    DROP USER NewUser;
    

    使用 USE 语句选择要删除用户的数据库。使用 DROP USER 语句删除用户。

  2. 删除登录:

    DROP LOGIN NewUser;
    

    使用 DROP LOGIN 语句删除登录。

修改用户密码

要更改用户密码,可以使用以下命令:

ALTER LOGIN NewUser WITH PASSWORD = 'NewPassword';

这个命令将 NewUser 登录的密码更改为 NewPassword

MySQL

创建用户

在MySQL中,您可以使用 CREATE USER 语句创建用户。

CREATE USER 'NewUser'@'localhost' IDENTIFIED BY 'UserPassword';

这个语句将创建一个名为 NewUser 的用户,只允许从 localhost 访问,并且使用 UserPassword 作为密码。

给用户授权

使用 GRANT 语句为用户分配权限:

GRANT SELECT, INSERT, UPDATE ON YourDatabaseName.YourTableName TO 'NewUser'@'localhost';

这个语句将授予 NewUser 用户对 YourDatabaseName.YourTableName 表格的 SELECTINSERTUPDATE 权限。

撤销授权

使用 REVOKE 语句来撤销已授予的权限:

REVOKE SELECT, INSERT, UPDATE ON YourDatabaseName.YourTableName FROM 'NewUser'@'localhost';

这个语句将从 NewUser 用户中撤销对 YourDatabaseName.YourTableName 表格的 SELECTINSERTUPDATE 权限。

查看用户权限

您可以使用以下查询来查看用户的权限:

SHOW GRANTS FOR 'NewUser'@'localhost';

这个查询将返回 NewUser 用户在数据库中的权限列表。

删除用户

要删除MySQL用户,使用 DROP USER 语句:

DROP USER 'NewUser'@'localhost';

修改用户密码

要更改用户密码,可以使用以下命令:

SET PASSWORD FOR 'NewUser'@'localhost' = PASSWORD('NewPassword');

这个命令将 NewUser 用户在 localhost 上的密码更改为 NewPassword

数据库权限的层次结构

数据库权限通常具有层次结构,其中高级别的权限包含了低级别的权限。一些常见的数据库权限包括:

  • SELECT:允许用户查询数据库对象的数据。
  • INSERT:允许用户向数据库对象中插入新数据。
  • UPDATE:允许用户修改数据库对象中的数据。
  • DELETE:允许用户从数据库对象中删除数据。
  • CREATE:允许用户创建新的数据库对象,如表格、视图、存储过程等。
  • ALTER:允许用户修改现有的数据库对象的结构。
  • DROP:允许用户删除数据库对象。
  • GRANT:允许用户授权其他用户或角色。
  • REVOKE:允许用户回收已授权的权限。

通过将这些权限分配给特定的用户或角色,数据库管理员可以实现细粒度的权限控制,确保数据库的安全性和完整性。

角色的使用

数据库管理员通常使用角色来简化权限管理。角色是一组权限的集合,可以将用户分配给角色,而不必单独分配每个权限。这提高了权限管理的效率,因为可以根据角色来管理权限,而不是为每个用户分配权限。

注意事项和最佳实践

在使用DCL进行权限控制时,有一些重要的注意事项和最佳实践:

  • 最小权限原则:仅授予用户或角色所需的最小权限,以降低不必要的风险。
  • 定期审查权限:定期审查和更新用户和角色的权限,以确保数据库安全性和完整性。
  • 谨慎使用WITH GRANT OPTIONWITH GRANT OPTION允许用户将其获得的权限授予其他用户,要慎用以防止权限滥用。
  • 记录权限变更:记录权限的授予和撤销,以便跟踪权限变更的历史。

常见的DQL操作

多种查询方式

a. 基本SELECT语句

基本的SELECT语句用于从数据库中检索数据。以下是一个例子,从名为Employees的表格中检索员工的姓名和工资信息:

SELECT FirstName, LastName, Salary
FROM Employees;
b. 条件筛选

条件筛选允许您根据特定条件筛选数据行。在以下示例中,我们只检索工资高于50000的员工:

SELECT FirstName, LastName, Salary
FROM Employees
WHERE Salary > 50000;
c. 排序结果

您可以使用ORDER BY子句对结果进行排序。以下是一个示例,按工资降序排列员工:

SELECT FirstName, LastName, Salary
FROM Employees
ORDER BY Salary DESC;

使用聚合函数

聚合函数用于计算结果集中的统计信息,如总和、平均值、最大值和最小值。以下是一个示例,计算所有员工的平均工资:

SELECT AVG(Salary)
FROM Employees;

分组和分组函数

分组操作允许您将结果集按一列或多列分组,然后使用分组函数对每个组进行聚合。以下是一个示例,按部门分组并计算每个部门的平均工资:

SELECT Department, AVG(Salary)
FROM Employees
GROUP BY Department;

内连接

内连接(INNER JOIN)用于将两个表格中相匹配的行联接在一起。以下是一个内连接的示例,它检索员工的姓名和所属部门:

SELECT Employees.FirstName, Employees.LastName, Departments.DepartmentName
FROM Employees
INNER JOIN Departments ON Employees.DepartmentID = Departments.DepartmentID;

内连接仅返回两个表格中匹配的行。

左连接

左连接(LEFT JOIN)返回左表格的所有行,以及与右表格匹配的行。如果没有匹配的行,将显示NULL值。以下是一个左连接示例,返回所有员工和他们的部门信息,包括那些没有分配到部门的员工:

SELECT Employees.FirstName, Employees.LastName, Departments.DepartmentName
FROM Employees
LEFT JOIN Departments ON Employees.DepartmentID = Departments.DepartmentID;

这个查询将返回所有员工的姓名以及他们所属的部门,如果员工没有分配到部门,将显示NULL。

右连接

右连接(RIGHT JOIN)返回右表格的所有行,以及与左表格匹配的行。如果没有匹配的行,将显示NULL值。以下是一个右连接示例,返回所有部门以及属于该部门的员工,包括那些没有员工的部门:

SELECT Employees.FirstName, Employees.LastName, Departments.DepartmentName
FROM Employees
RIGHT JOIN Departments ON Employees.DepartmentID = Departments.DepartmentID;

这个查询将返回所有部门的名称以及在该部门工作的员工,如果没有员工在某个部门工作,将显示NULL。

子查询

子查询是一个嵌套在主查询中的查询,允许您根据其他查询的结果进行进一步的操作。以下是一个子查询的示例,筛选出工资高于平均工资的员工:

SELECT FirstName, LastName, Salary
FROM Employees
WHERE Salary > (SELECT AVG(Salary) FROM Employees);
  • WHERE Salary > (SELECT AVG(Salary) FROM Employees):这是一个子查询,它计算了员工的平均工资,并将其与每个员工的工资进行比较。

这个查询将返回工资高于平均工资的员工的姓名和工资信息。

SQL Server常用语法

创建数据库

CREATE DATABASE database_name;

CREATE DATABASE database_name;: 用于创建一个新的数据库,其中database_name是您要创建的数据库的名称。

选择数据库

USE database_name;

USE database_name;: 用于选择要在其上执行SQL操作的数据库,database_name是数据库的名称。

创建表格

CREATE TABLE table_name (
    column1 datatype,
    column2 datatype,
    ...
);

CREATE TABLE table_name (...): 创建一个新表格,您需要指定表格的名称和列的定义,列定义包括列名和数据类型。

插入数据

INSERT INTO table_name (column1, column2, ...)
VALUES (value1, value2, ...);

INSERT INTO table_name (...) VALUES (...): 用于将新数据插入到表格中,您需要指定表格名称和要插入的值。

更新数据

UPDATE table_name
SET column1 = new_value1, column2 = new_value2, ...
WHERE condition;

UPDATE table_name SET ... WHERE ...: 用于更新表格中的数据,指定要更新的列和条件,以确定要更新的行。

删除数据

DELETE FROM table_name
WHERE condition;

DELETE FROM table_name WHERE ...: 用于从表格中删除数据,指定要删除的行的条件。

选择数据

SELECT column1, column2, ...
FROM table_name
WHERE condition;

SELECT ... FROM table_name WHERE ...: 用于从表格中检索数据,可以指定要选择的列和筛选条件。

排序数据

SELECT column1, column2, ...
FROM table_name
ORDER BY column1 ASC, column2 DESC;

ORDER BY column1 ASC, column2 DESC: 用于对检索的数据进行排序,ASC表示升序,DESC表示降序。

聚合函数

  • 求和:SUM(column_name)
  • 平均值:AVG(column_name)
  • 最大值:MAX(column_name)
  • 最小值:MIN(column_name)
  • 计数:COUNT(column_name)

分组和分组函数

SELECT column1, COUNT(*)
FROM table_name
GROUP BY column1;

GROUP BY column1: 用于将结果集按列分组,以便应用分组函数来计算每个组的统计信息。

连接表格

  • 内连接:INNER JOIN
  • 左连接:LEFT JOIN
  • 右连接:RIGHT JOIN
  • 全外连接:FULL OUTER JOIN

子查询

SELECT column1
FROM table_name
WHERE column2 = (SELECT column3 FROM another_table WHERE condition);

子查询嵌套在主查询中,可用于根据其他查询的结果进行进一步的操作,例如根据子查询的结果筛选数据。

创建索引

CREATE INDEX index_name ON table_name (column1, column2, ...);

CREATE INDEX index_name ON table_name (...): 用于在一个或多个列上创建索引,以加速数据检索。

更改表格结构

  • 添加列:ALTER TABLE table_name ADD column_name datatype;
  • 删除列:ALTER TABLE table_name DROP COLUMN column_name;
  • 修改列:ALTER TABLE table_name ALTER COLUMN column_name new_datatype;

删除表格

DROP TABLE table_name;

DROP TABLE table_name;: 用于删除整个表格以及其数据。

你可能感兴趣的:(数据库,数据库,sql,笔记)