IT评测·应用市场-qidao123.com

标题: 【数据库】SQL语句底子 [打印本页]

作者: 杀鸡焉用牛刀    时间: 2024-12-26 20:14
标题: 【数据库】SQL语句底子
【数据库】SQL语句底子


  
一、SQL与数据库

   SQL(Structured Query Language,结构化查询语言)是一种用于管理和操作关系型数据库的标准编程语言。通过SQL,用户可以进行数据插入、更新、删除、查询等操作。SQL并不依靠于特定的编程语言,而是作为数据库的查询语言,与多种开发语言结合使用(如Python、Java等)以进行数据的操作。
    数据库是一个有组织的、存储和管理数据的系统。它包含一系列的数据表,每个表有多少字段和纪录。数据库用于存储大量的结构化数据,可以高效地进行数据查询、更新、插入和删除操作。数据库管理系统(DBMS)则是用于创建、管理、访问和维护数据库的软件。
  关系型数据库管理系统(RDBMS)
关系型数据库管理系统(RDBMS)是一种基于关系模子的数据库管理系统。在RDBMS中,数据存储在表格形式中,表之间通过主键和外键创建关系。常见的关系型数据库系统包括MySQL、PostgreSQL、Oracle和SQL Server等。RDBMS的主要特点是数据的结构化存储、数据之间的关系、支持ACID(原子性、一致性、隔离性、持久性)特性以及支持SQL查询语言。
常见的数据库管理系统


在正式开始学习SQL之前需要知道一些知识:
SQL本身在大多数数据库系统中是不区分大小写的,特别是在关键字和函数名称方面。比方,SELECT、select、SeLeCt都可以视为相同的。只管云云,表名、列名以及其他标识符(如数据库名)是否区分大小写取决于所使用的数据库系统和其配置。比方:

   因此,在编写SQL时,建议遵循同一的命名规则,以保持代码的可读性和可维护性,包括:
  
  SQL语言的结构通常包括以下几类操作:

   SQL语句的根本结构通常包括:
    
二、 SQL语句类型

SQL语句可以分为多种类型,每种类型用于不同的操作,包括界说数据库结构、操作数据、查询数据和管理数据库权限等。
2.1 数据界说语言(DDL)

   数据界说语言(DDL,Data Definition Language)是SQL的一个子集,主要用于界说、修改和删除数据库结构。DDL语句不直接操作数据,它们影响数据库的结构、表格、索引等对象。常见的DDL语句包括创建数据库、创建表、删除表、修改表结构、删除数据库等。
  1. 创建数据库:CREATE DATABASE

CREATE DATABASE语句用于创建一个新的数据库。它是SQL中最底子的DDL操作之一。创建数据库时,你需要为其指定一个名称,可以选择界说字符集、排序规则等。
语法:
  1. CREATE DATABASE database_name;
复制代码
可以在创建数据库时指定一些属性,比方字符集和排序规则(具体数据库系统大概有所不同)。比方,在MySQL中,指定字符集和排序规则的语法为:
  1. CREATE DATABASE database_name
  2. CHARACTER SET utf8mb4
  3. COLLATE utf8mb4_unicode_ci;
复制代码
示例:
  1. CREATE DATABASE SchoolDB;
复制代码
此语句会创建一个名为SchoolDB的数据库。
2. 创建表:CREATE TABLE

CREATE TABLE语句用于创建一个新表,并界说该表的结构,包括列名、数据类型和束缚。表的结构是数据库筹划的焦点部门,合理筹划表的结构可以确保数据的完整性和查询效率。
语法:
  1. CREATE TABLE table_name (
  2.     column1 datatype [constraint],
  3.     column2 datatype [constraint],
  4.     ...
  5. );
复制代码

示例:
  1. CREATE TABLE Students (
  2.     StudentID INT PRIMARY KEY,
  3.     FirstName VARCHAR(50),
  4.     LastName VARCHAR(50),
  5.     Age INT,
  6.     Email VARCHAR(100) UNIQUE NOT NULL
  7. );
复制代码
此语句创建一个名为Students的表,包含四个列:StudentID(主键)、FirstName、LastName、Age和Email。其中,Email列设置为唯一且不能为空。
3. 删除表:DROP TABLE

DROP TABLE语句用于删除现有的表及其所有数据。删除表后,该表的结构和其中的数据都将永久丢失。因此,在执行此操作时需要非常小心。
语法:
  1. DROP TABLE table_name;
复制代码
示例:
  1. DROP TABLE Students;
复制代码
此语句将删除名为Students的表,而且无法规复其包含的数据。
4. 修改表结构:ALTER TABLE

ALTER TABLE语句用于修改现有表的结构,允许对表进行多种操作,如添加、删除、修改列,修改束缚等。它非常强大,可以对表进行动态调解,而不需要重新创建表。
常见的ALTER TABLE操作有:

5. 删除数据库:DROP DATABASE

DROP DATABASE语句用于删除数据库及其所有对象(包括所有表、视图、索引等)。这是一项不可逆的操作,删除数据库后,所有相干数据将被丢失。
语法:
  1. DROP DATABASE database_name;
复制代码
示例:
  1. DROP DATABASE SchoolDB;
复制代码
此语句会删除SchoolDB数据库以及其中所有的表和数据。

2.2 数据操作语言(DML)

   数据操作语言(DML,Data Manipulation Language)用于操作数据库中的数据,包括插入、更新、删除和清除数据。与数据界说语言(DDL)不同,DML不涉及表结构的更改,而是专注于数据的增、删、改、查等操作。DML语句是日常数据库操作的焦点部门,帮助用户有效地管理和操作数据。
  1. 插入数据:INSERT INTO

INSERT INTO语句用于向表中插入一行或多行数据。可以插入指定列的数据,也可以插入所有列的数据。如果插入数据时未指定某列,数据库将使用该列的默认值(如果有的话)。
语法:
  1. INSERT INTO table_name (column1, column2, ...)
  2. VALUES (value1, value2, ...);
复制代码

示例:
  1. INSERT INTO Students (StudentID, FirstName, LastName, Age)
  2. VALUES (1, 'John', 'Doe', 20);
复制代码
该语句将一行数据插入到Students表中,其中包含StudentID为1,FirstName为"John",LastName为"Doe",Age为20的纪录。
插入多行数据:
可以一次插入多行数据,使用逗号分隔各行数据:
  1. INSERT INTO Students (StudentID, FirstName, LastName, Age)
  2. VALUES
  3. (2, 'Jane', 'Smith', 22),
  4. (3, 'Mike', 'Johnson', 21),
  5. (4, 'Emily', 'Brown', 23);
复制代码
2. 更新数据:UPDATE

UPDATE语句用于修改表中已存在的纪录。可以更新一个或多个列的值,但必须指定更新条件,以制止不小心更新所有纪录。
语法:
  1. UPDATE table_name
  2. SET column1 = value1, column2 = value2, ...
  3. WHERE [condition];
复制代码

示例:
  1. UPDATE Students
  2. SET Age = 21
  3. WHERE StudentID = 1;
复制代码
该语句将更新Students表中StudentID为1的纪录,将Age列的值修改为21。
留意事项:

3. 删除数据:DELETE

DELETE语句用于从表中删除满足特定条件的纪录。删除操作是不可规复的,因此在执行DELETE时需要审慎。DELETE会逐行删除数据,但保留表结构不变。
语法:
  1. DELETE FROM table_name
  2. WHERE [condition];
复制代码

示例:
  1. DELETE FROM Students
  2. WHERE StudentID = 1;
复制代码
该语句会删除Students表中StudentID为1的纪录。
留意事项:

4. 清除数据:TRUNCATE TABLE

TRUNCATE TABLE语句用于删除表中的所有数据,但与DELETE不同,它不逐行删除数据,而是通过更高效的方式清空整个表。TRUNCATE通常比DELETE速度更快,但也有一些区别:

语法:
  1. TRUNCATE TABLE table_name;
复制代码
示例:
  1. TRUNCATE TABLE Students;
复制代码
该语句会删除Students表中的所有纪录,但表的结构保持不变。TRUNCATE通常用于快速清空表数据,尤其是在需要删除大量数据时。
留意事项:


2.3 数据查询语言(DQL)

   数据查询语言(DQL,Data Query Language)主要用于从数据库中查询数据。SELECT语句是DQL中最常用的语句,它用于从一个或多个表中提取信息。DQL的焦点功能是查询和提取数据,结合其他SQL语句可以非常灵活地操作和展示数据。
  1. 查询数据:SELECT

SELECT语句用于从一个或多个表中检索数据。可以指定要查询的列、表和条件,还可以使用排序、去重、聚合等功能。
根本语法:
  1. SELECT column1, column2, ...
  2. FROM table_name
  3. WHERE [condition];
复制代码

示例:
  1. SELECT FirstName, LastName
  2. FROM Students
  3. WHERE Age > 18;
复制代码
该语句查询Students表中,年事大于18的学生的名字和姓氏。
查询所有列:
  1. SELECT *
  2. FROM Students;
复制代码
该语句返回Students表中的所有数据。
2. 去除重复数据:DISTINCT

DISTINCT关键字用于返回查询结果中不重复的值。它实用于需要排除重复数据的场景。
语法:
  1. SELECT DISTINCT column_name
  2. FROM table_name;
复制代码
示例:
  1. SELECT DISTINCT Age
  2. FROM Students;
复制代码
该语句返回Students表中不重复的年事。
3. 排序查询:ORDER BY

ORDER BY用于对查询结果进行排序。默认环境下,排序是按升序(ASC)排列的。如果需要降序排列,可以使用DESC关键字。
语法:
  1. SELECT column1, column2, ...
  2. FROM table_name
  3. ORDER BY column_name [ASC|DESC];
复制代码

示例:
  1. SELECT FirstName, LastName
  2. FROM Students
  3. ORDER BY Age DESC;
复制代码
该语句根据Age列的值降序排列Students表中的数据。
4. 聚合函数:COUNT(), AVG(), SUM(), MIN(), MAX()

聚合函数用于对查询结果进行计算,通常用在需要统计、计算总数、求均匀数等场景。

语法:
  1. SELECT COUNT(*) FROM table_name;
  2. SELECT AVG(column_name) FROM table_name;
  3. SELECT SUM(column_name) FROM table_name;
  4. SELECT MIN(column_name) FROM table_name;
  5. SELECT MAX(column_name) FROM table_name;
复制代码
示例:
  1. SELECT COUNT(*) FROM Students;
复制代码
该语句返回Students表中纪录的总数。
  1. SELECT AVG(Age) FROM Students;
复制代码
该语句返回Students表中学生的均匀年事。
5. 分组查询:GROUP BY

GROUP BY用于根据一个或多个列将查询结果分组,通常与聚合函数一起使用。它用于统计各个分组的数据。
语法:
  1. SELECT column, COUNT(*)
  2. FROM table_name
  3. GROUP BY column;
复制代码
示例:
  1. SELECT Age, COUNT(*)
  2. FROM Students
  3. GROUP BY Age;
复制代码
该语句会按Age列对Students表中的数据进行分组,并统计每个年事段的学生人数。
6. 条件查询:WHERE, AND, OR

WHERE用于筛选查询结果,指定一个或多个条件。AND和OR用于连接多个条件,进行更复杂的筛选。
语法:
  1. SELECT column1, column2
  2. FROM table_name
  3. WHERE [condition1] AND|OR [condition2];
复制代码
示例:
  1. SELECT FirstName, LastName
  2. FROM Students
  3. WHERE Age > 18 AND LastName = 'Doe';
复制代码
该语句查询Students表中年事大于18而且姓氏为’Doe’的学生。
使用OR连接条件:
  1. SELECT FirstName, LastName
  2. FROM Students
  3. WHERE Age > 18 OR LastName = 'Doe';
复制代码
该语句查询Students表中年事大于18或姓氏为’Doe’的学生。
7. 分页查询:LIMIT 和 OFFSET

分页查询用于限定查询返回的纪录数,常用于在Web应用中显示查询结果时进行分页。LIMIT指定返回的纪录数,OFFSET指定从哪一条纪录开始返回。
语法:
  1. SELECT column1, column2
  2. FROM table_name
  3. LIMIT number_of_records OFFSET start_position;
复制代码

示例:
  1. SELECT * FROM Students
  2. LIMIT 10 OFFSET 20;
复制代码
该语句返回Students表中从第21条纪录到第30条纪录的数据(留意,OFFSET是从0开始计算的)。
8. 内连接查询:INNER JOIN

INNER JOIN用于返回两个或多个表中匹配的纪录。如果表中没有匹配的纪录,则不会返回任何结果。
语法:
  1. SELECT columns
  2. FROM table1
  3. INNER JOIN table2
  4. ON table1.column_name = table2.column_name;
复制代码
示例:
  1. SELECT Students.FirstName, Students.LastName, Courses.CourseName
  2. FROM Students
  3. INNER JOIN Enrollments ON Students.StudentID = Enrollments.StudentID
  4. INNER JOIN Courses ON Enrollments.CourseID = Courses.CourseID;
复制代码
该语句查询所有注册课程的学生的名字、姓氏以及课程名称。
9. 外连接查询:LEFT JOIN, RIGHT JOIN

外连接用于返回两个表中匹配的数据以及不匹配的数据。LEFT JOIN返回左表的所有纪录以及匹配的右表纪录,RIGHT JOIN则返回右表的所有纪录以及匹配的左表纪录。

语法:
  1. SELECT columns
  2. FROM table1
  3. LEFT JOIN table2
  4. ON table1.column_name = table2.column_name;
复制代码
示例:
  1. SELECT Students.FirstName, Students.LastName, Courses.CourseName
  2. FROM Students
  3. LEFT JOIN Enrollments ON Students.StudentID = Enrollments.StudentID
  4. LEFT JOIN Courses ON Enrollments.CourseID = Courses.CourseID;
复制代码
该语句查询所有学生的名字、姓氏以及他们注册的课程。如果某个学生没有注册课程,查询结果中该学生的课程名称将为空。
10. 子查询

子查询是一个嵌套在其他查询中的查询。根据返回的结果不同,子查询可以分为以下几种类型:


2.4 数据控制语言(DCL)

   数据控制语言(DCL,Data Control Language)用于管理数据库中的访问权限、用户管理以及控制数据操作的权限。DCL语句确保数据库的安全性和合理的访问控制,主要包括用户的创建、权限的授予与撤销。常见的DCL语句有CREATE USER、DROP USER、GRANT和REVOKE。
  1. 管理用户:CREATE USER, DROP USER


2. 权限管理:GRANT, REVOKE

权限管理语句用于授予或撤销用户对数据库中对象的访问权限(如表、视图、数据库等)。使用这些语句可以控制用户能否执行某些操作,比方读取、插入、更新、删除数据等。

3. 刷新权限:FLUSH PRIVILEGES

当使用GRANT或REVOKE修改用户权限时,修改的权限会在下次用户连接时生效。在某些环境下,可以使用FLUSH PRIVILEGES语句强制数据库立即重新加载权限表,从而立即生效。
语法:
  1. FLUSH PRIVILEGES;
复制代码
此语句会重新加载权限表,确保所有权限更改立即生效。
4. 查看权限:SHOW GRANTS

SHOW GRANTS语句用于查看某个用户的权限。可以查询特定用户的权限环境,以确认用户当前拥有的操作权限。
语法:
  1. SHOW GRANTS FOR 'username'@'host';
复制代码
示例:
  1. SHOW GRANTS FOR 'new_user'@'localhost';
复制代码
该语句将显示new_user用户在localhost主机上拥有的所有权限。
5. 权限类型

常见的权限类型有:


三、 SQL关键字与操作符

SQL中有许多关键字与操作符,它们用于帮助进行更灵活的查询和数据操作。以下是一些常见的SQL关键字与操作符。
关键字/操作符描述示例LIKE用于在WHERE子句中进行含糊查询,可以匹配指定模式的字符串。通常与通配符%和_一起使用。%表示零个或多个字符,_表示单个字符。SELECT * FROM Students WHERE FirstName LIKE 'J%';
(查找所有名字以’J’开头的学生)IN用于查抄某个值是否在指定的值列表或子查询返回的结果会集。它简化了多个OR条件的写法。SELECT * FROM Students WHERE Age IN (18, 19, 20);
(查找年事为18、19或20岁的学生)BETWEEN用于查抄某个值是否在一个范围内。包括范围的两个边界。SELECT * FROM Students WHERE Age BETWEEN 18 AND 22;
(查找年事在18到22岁之间的学生)AS用于给列或表指定别名,通常用于结果的展示,增强可读性。SELECT FirstName AS Name, Age FROM Students;
(将FirstName列重命名为Name)JOIN用于从两个或多个表中查询相干数据,连接表的方式有多种(如INNER JOIN、LEFT JOIN等)。SELECT Students.FirstName, Courses.CourseName FROM Students INNER JOIN Enrollments ON Students.StudentID = Enrollments.StudentID;
(查找学生和他们选修的课程)UNION用于归并多个SELECT语句的结果集。默认环境下,UNION去除重复的纪录。如果想保留所有纪录,可以使用UNION ALL。SELECT FirstName FROM Students WHERE Age > 18 UNION SELECT FirstName FROM Students WHERE Age < 18;
(查找所有学生的名字)NOT NULL用于指定某列的数据不允许为NULL,常用于字段束缚。CREATE TABLE Students (StudentID INT, FirstName VARCHAR(50) NOT NULL);
(FirstName列不能为空)VIEW用于创建一个虚拟表,该表包含一个SQL查询的结果集,方便多次查询使用,且不存储现实数据。CREATE VIEW StudentAgeView AS SELECT FirstName, Age FROM Students WHERE Age > 18;
(创建一个视图StudentAgeView,显示所有年事大于18岁的学生)
四、 常用SQL函数

   SQL提供了多种函数,用于执行各种数据处理任务。常用的函数包括聚合函数、字符串处理函数和日期函数。
  1. 聚合函数

聚合函数用于对一组值执行计算并返回单一的结果。常见的聚合函数有:

这些聚合函数通常与GROUP BY语句结合使用,用于对查询结果进行分组后进行计算。比方,SELECT Department, AVG(Salary) FROM Employees GROUP BY Department; 返回每个部门的均匀工资。
2. 字符串处理函数

字符串函数用于对字符串数据进行操作和处理。常见的字符串处理函数有:

3. 日期函数

日期函数用于处理日期和时间数据。常见的日期函数有:



免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 IT评测·应用市场-qidao123.com (https://dis.qidao123.com/) Powered by Discuz! X3.4