SQL语言入门(非常详细)零基础入门到精通,收藏这一篇就够了

一、SQL 概述

1、什么是 SQL

SQL 指结构化查询语言,全称是 Structured Query Language。

SQL 让您可以访问和处理数据库,包括数据插入、查询、更新和删除。

SQL 在1986年成为 ANSI(American National Standards Institute 美国国家标准化组织)的一项标准,在 1987 年成为国际标准化组织(ISO)标准。

2、SQL语言的版本历史

在1970年代初,由IBM公司San Jose,California研究实验室的埃德加·科德发表将数据组成表格的应用原则(Codd’s Relational Algebra)。1974年,同一实验室的D.D.Chamberlin和R.F. Boyce对Codd’s Relational Algebra在研制关系数据库管理系统System R中,研制出一套规范语言-SEQUEL(Structured English QUEry Language),并在1976年11月的IBM Journal of R&D上公布新版本的SQL(叫SEQUEL/2)。1980年改名为SQL。

1979年ORACLE公司首先提供商用的SQL,IBM公司在DB2 和SQL/DS数据库系统中也实现了SQL。

1986年10月,美国ANSI采用SQL作为关系数据库管理系统的标准语言(ANSI X3. 135-1986),后为国际标准化组织(ISO)采纳为国际标准。

1989年,美国ANSI采纳在ANSI X3.135-1989报告中定义的关系数据库管理系统的SQL标准语言,称为ANSI SQL 89, 该标准替代ANSI X3.135-1986版本。该标准为下列组织所采纳:

国际标准化组织(ISO),为ISO 9075-1989报告“Database Language SQL With Integrity Enhancement”

美国联邦政府,发布在The Federal Information Processing Standard Publication(FIPS PUB)127

目前,所有主要的关系数据库管理系统支持某些形式的SQL, 大部分数据库打算遵守ANSI SQL89标准。

3、SQL语句基础语法规范

SQL(Structured Query Language)是用于管理关系型数据库的标准语言。它的基本语法规范包括以下几个关键部分:

1. SELECT 语句:这是最基本的SQL语句,用于从数据库中选择数据。格式通常是 `SELECT column_name(s) FROM table_name WHERE condition`,其中 `column_name(s)` 是要查询的列,`table_name` 是数据表名,`condition` 是筛选条件。

2. INSERT INTO 语句:用于向表中插入新记录,格式为 `INSERT INTO table_name (column1, column2,…) VALUES (value1, value2,…)`。

3. UPDATE 语句:用来更新表中的数据,格式为 `UPDATE table_name SET column = new_value WHERE condition`。

4. DELETE FROM 语句:删除表中满足特定条件的行,例如 `DELETE FROM table_name WHERE condition`。

5. CREATE TABLE 语句:用于创建新的表,定义列名、数据类型等信息。

6. JOIN 语句:连接两个或多个表,如 INNER JOIN, LEFT JOIN, RIGHT JOIN 等,用于获取多个表之间的关联数据。

7. WHERE 子句:用于指定查询条件,过滤返回的结果。

8. GROUP BY 和 HAVING 子句:用于对查询结果进行分组和过滤聚合。

9. ORDER BY 子句:按照指定列对查询结果进行排序。

10. COMMIT 和 ROLLBACK 命令:前者提交事务,后者回滚事务以撤销更改。

二、SQL 分类:DDL、DML、DCL、DQL

01、DDL(Data Definition Languages)语句: 即数据库定义语句,用来创建数据库中的表、索引、视图、存储过程、触发器等对象。SQLServer DLL语法是指SQL Server 数据库定义域发的语法规则集合,主要包括创建、修改和删除数据库对象的语句。

常用的语句关键字有:

【create table 创建表】、【alter table 修改表】、【drop table 删除表】、【truncate table 删除表中所有行】、【create index 创建索引】、【drop index 删除索引】、【comment 注释】、【rename table 修改表名】

02、DML(Data Manipulation Language)语句: 指的是用于管理数据库中数据的操作,用来查询(Select)、添加(Insert)、更新(Update)、删除(Delete)等

03、DCL(Data Control Language)语句: 即数据控制语句,用于授权/撤销数据库及其字段的权限。

常用的语句关键字有:

grant授权

revoke取消授权

04、DQL:(Data QueryLanguage)语句: 数据查询语言

常用的语句关键字有:

selet 获取

where、group by、having、ofder by等过滤条件

事务控制语言

SAVEPOINT 设置保存点

ROLLBACK 回滚

SET TRANSACTION

三、DDL(Data Definition Language):数据定义语言

1、基本操作

1.1操作数据库:创建库CREATE DATABASE,删除库DROP DATABASE,修改库ALTER DATABASE。

CREATE DATABASE TestDB;
DROP DATABASE TestDB;
ALTER DATABASE TestDB COLLATE Chinese_PRC_CI_AS;

1.2 数据类型:数字型(int,tinyint,decimal,float等)、日期和时间类型(Date,TIME等)、字符串类型(char,varchar等)。

CREATE TABLE NumTable (
    id INT,
    smallNum TINYINT,
    money DECIMAL(10, 2),
    size FLOAT
);
CREATE TABLE DateTable (
    date_column DATE,
    time_column TIME
);
CREATE TABLE StringTable (
    fixed_length_name CHAR(50),
    variable_length_address VARCHAR(255)
);

1.3 操作表:创建表CREATE TABLE,删除表DROP TABLE,修改表ALTER TABLE,重命名表 RENAME TABLE。、

CREATE TABLE EmployeeTable (
    ID int,
    Name varchar(255),
    Age int
);

DROP TABLE EmployeeTable;

ALTER TABLE EmployeeTable ADD Email varchar(255);
ALTER TABLE EmployeeTable MODIFY COLUMN Age smallint;
ALTER TABLE EmployeeTable DROP COLUMN Age;

RENAME TABLE EmployeeTable TO StaffTable;

四、DML(Data Manipulation Language):数据操作语言

4.1 插入数据:利用INSERT INTO语句添加一条或多条记录。

INSERT INTO employees (id, name, department_id) VALUES (1, 'Li Ming', 101);    
(向employees表中插入一条新的员工记录,id为1, 名字是'Li Ming', 部门id是101)

INSERT INTO employees (name, department_id) VALUES ('Wang Gang', 102);      
(向employees表中插入一条新的员工记录, id将自动生成,名字是'Wang Gang', 部门id是102)

INSERT INTO employees VALUES (3, 'Zhang San', 103);            
(向employees表中插入一条新的员工记录,id为3, 名字是'Zhang San', 部门id是103)

4.2 修改数据:用UPDATE语句可以修改表中的数据。

UPDATE employees SET department_id = 201 WHERE name = 'Li Ming';             
(修改名为'Li Ming'的员工的部门id为201)

UPDATE employees SET name = 'Liu Yan' WHERE id = 2;               
(修改id为2的员工的名字为'Liu Yan')

UPDATE employees SET name = 'Zhu Rongji', department_id = 202 WHERE id = 3;                  
(修改id为3的员工的名字为'Zhu Rongji'和部门id为202)

4.3 删除数据:DELETE FROM语句用于在表中删除一条或者多条记录。

DELETE FROM employees WHERE id = 1;                
(删除id为1的员工记录)

DELETE FROM employees WHERE name = 'Wang Gang';                   
(删除名字为'Wang Gang'的员工记录)

DELETE FROM employees WHERE department_id = 202;                 
(删除部门id为202的所有员工记录)

五、DCL(Data Control Language):数据控制语言

5.1 创建用户:使用CREATE USER语句创建新的数据库用户。

CREATE USER 'newuser'@'localhost' IDENTIFIED BY 'password';
(在"localhost"上创建一个名为"newuser"的新用户,密码是"password"。)

5.2 给用户授权:使用GRANT语句为用户分配访问权限。

GRANT SELECT, INSERT, DELETE ON database_name.table_name TO 'username'@'localhost';
(在localhost上给"username"用户赋予运database_name数据库中table_name表的SELECT,INSERT和DELETE权限。)

5.3 撤销授权:使用REVOKE语句撤销用户的访问权限。

REVOKE INSERT ON database_name.table_name FROM 'username'@'localhost';
(在localhost上撤销"username"用户对database_name数据库中table_name表的INSERT权限。)

5.4 查看用户权限:使用SHOW GRANTS语句查看用户当前的权限列表。

SHOW GRANTS FOR 'username'@'localhost';
(显示"localhost"上"username"用户的所有权限。)

5.5 删除用户:用DROP USER语句来删除一个用户。

DROP USER 'username'@'localhost';
(删除"localhost"上名为"username"的用户。)

5.6 修改用户密码(以root身份):通过ALTER USER语句可以修改用户的密码。

ALTER USER 'username'@'localhost' IDENTIFIED BY 'newpassword';
(修改在"localhost"上username用户的密码为"newpassword"。)

六、DQL(Data Query Language):数据查询语言

6.1 基础查询:利用SELECT 语句可以查询数据库中的数据。

SELECT * 
FROM Employee;  
(查询Employees表中的所有记录)

SELECT FirstName, LastName 
FROM Employee;  
(查询Employee表中的FirstName和LastName字段所有记录)

6.2 条件查询:通过使用WHERE子句来设定查询条件。

SELECT * 
FROM Employee 
WHERE Salary > 5000; 
(查询Employee表中Salary大于5000的所有记录)

SELECT FirstName, LastName 
FROM Employee 
WHERE Age <= 30; 
(查询Employee表中年龄小于等于30的员工的firstName和lastName字段记录)

SELECT * 
FROM Employee 
WHERE Salary > 5000 
AND Age <= 30; 
(查询Employee表中Salary大于5000且年龄小于等于30的所有记录)

SELECT * 
FROM Employee 
WHERE Salary > 5000 
OR Age <= 30; 
(查询Employee表中Salary大于5000或年龄小于等于30的所有记录)

6.3 模糊查询:使用LIKE子句,配合通配符%和_进行模糊查询。

SELECT * 
FROM Employee 
WHERE FirstName LIKE 'John%'; 
(查询Employee表中FirstName以John开头的所有记录)

SELECT * 
FROM Employee 
WHERE FirstName LIKE '%John%'; 
(查询Employee表中FirstName包含John的所有记录)

SELECT FirstName, LastName 
FROM Employee 
WHERE LastName LIKE '%son_'; 
(查询Employee表中LastName以son+一个任意字符结束的所有记录)

6.4 字段控制查询:运用DISTINCT关键字进行去重查询。

SELECT DISTINCT City 
FROM Employee; 
(查询Employee表中,City字段去重之后的所有城市记录)

SELECT DISTINCT Age, Salary 
FROM Employee 
WHERE Age<50; 
(查询Employee表中,Age小于50岁的员工的Age和Salary字段组合记录,并进行去重处理)

6.5 排序:用ORDER BY子句按照一个或多个列进行排序。

单列排序:

SELECT * 
FROM Employee 
ORDER BY Salary; 
(按'工资'列的升序返回Employee表中的所有行。)

多列排序:

SELECT * 
FROM Employee 
ORDER BY Salary, Age DESC;
(首先根据'工资'列的升序对Employee表中的行进行排序,然后在工资相同的情况下,根据'Age'列的降序进行排序。)

6.6 聚合函数:包括COUNT,SUM,MAX,MIN,AVG等函数。

COUNT:

SELECT COUNT(*) 
FROM Employee;
(返回Employee表的总行数。)

SUM:

SELECT SUM(Salary) 
FROM Employee;
(返回Employee表中所有员工的薪水总和。)

MAX:

SELECT MAX(Age)` `FROM Employee;``(返回Employee表中员工的最大年龄。)

MIN:

SELECT MIN(Age)` `FROM Employee;``(返回Employee表中员工的最小年龄。)

AVG:

SELECT AVG(Salary)` `FROM Employee;``(返回Employee表中员工的平均薪水。)

6.7 分组查询:GROUP BY子句是用于结合聚合函数,依据一个或多个列进行分组。

按单列分组:

SELECT Department, COUNT(*)` `FROM Employee` `GROUP BY Department;``(返回每个部门的员工数量。)

按多列分组:

SELECT Department, JobTitle, AVG(Salary)` `FROM Employee` `GROUP BY Department, JobTitle;``(返回每个部门及职位下员工的平均薪水。)

分组后过滤:

SELECT Department, JobTitle, AVG(Salary)` `FROM Employee` `GROUP BY Department, JobTitle``HAVING AVG(Salary) > 5000;``(返回每个部门及职位下员工的平均薪水大于5000的部分。)

6.8 LIMIT:用来限定查询结果的起始行,以及总行数。

简单LIMIT:

SELECT *` `FROM Employee` `ORDER BY Salary DESC` `LIMIT 10;``(返回前10个工资最高的员工。)

带偏移量的LIMIT:

SELECT *` `FROM Employee` `ORDER BY Salary DESC` `LIMIT 10 OFFSET 5;``(返回工资排名第6到第15的10个员工。)

6.9 多表连接查询:

内连接:INNER JOIN

SELECT Orders.OrderID, Customers.CustomerName``FROM Orders``INNER JOIN Customers``ON Orders.CustomerID = Customers.CustomerID;

左连接:LEFT JOIN

SELECT Customers.CustomerName, Orders.OrderID``FROM Customers``LEFT JOIN Orders``ON Customers.CustomerID = Orders.CustomerID;

右连接:RIGHT JOIN

SELECT Orders.OrderID, Customers.CustomerName``FROM Orders``RIGHT JOIN Customers``ON Orders.CustomerID = Customers.CustomerID;

全外连接:FULL JOIN

SELECT Customers.CustomerName, Orders.OrderID``FROM Customers``FULL JOIN Orders``ON Customers.CustomerID = Orders.CustomerID;

笛卡尔积:CROSS JOIN

SELECT Products.ProductName, Suppliers.SupplierName``FROM Products``CROSS JOIN Suppliers;

网络安全学习路线

如果你对网络安全入门感兴趣,那么你需要的话可以点击这里网络安全重磅福利:入门&进阶全套282G学习资源包免费分享!

或者扫描下方csdn官方合作二维码获取哦!

在这里插入图片描述

这是一份网络安全从零基础到进阶的学习路线大纲全览,小伙伴们记得点个收藏!

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

阶段一:基础入门

img

网络安全导论

渗透测试基础

网络基础

操作系统基础

Web安全基础

数据库基础

编程基础

CTF基础

该阶段学完年薪15w+没有问题

阶段二:技术进阶(到了这一步你才算入门)

img

弱口令与口令爆破

XSS漏洞

CSRF漏洞

SSRF漏洞

XXE漏洞

SQL注入

任意文件操作漏洞

业务逻辑漏洞

该阶段学完年薪25w+

阶段三:高阶提升

img

反序列化漏洞

RCE

综合靶场实操项目

内网渗透

流量分析

日志分析

恶意代码分析

应急响应

实战训练

该阶段学完即可年薪30w+

阶段四:蓝队课程

img

蓝队基础

蓝队进阶

该部分主攻蓝队的防御,即更容易被大家理解的网络安全工程师。

攻防兼备,年薪收入可以达到40w+

阶段五:面试指南&阶段六:升级内容

img

需要上述路线图对应的网络安全配套视频、源码以及更多网络安全相关书籍&面试题等内容可在文章后方领取。

在这里插入图片描述

如果你对网络安全入门感兴趣,那么你需要的话可以点击这里网络安全重磅福利:入门&进阶全套282G学习资源包免费分享!

或者扫描下方csdn官方合作二维码获取哦!

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

感谢您观看我的文章,谢谢!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值