黑狐家游戏

关系数据库标准语言SQL笔记总结,关系数据库标准语言sql笔记

欧气 4 0

本文目录导读:

  1. SQL概述
  2. 数据定义语言(DDL)
  3. 数据操作语言(DML)
  4. 数据查询语言(DQL)
  5. 数据控制语言(DCL)
  6. 视图(VIEW)
  7. 存储过程(PROCEDURE)
  8. 索引(INDEX)

《关系数据库标准语言SQL笔记总结》

关系数据库标准语言SQL笔记总结,关系数据库标准语言sql笔记

图片来源于网络,如有侵权联系删除

SQL概述

SQL(Structured Query Language),即结构化查询语言,是用于管理关系数据库的标准语言,它具有功能强大、简单易学等特点,通过SQL,可以实现对数据库中数据的定义、操作、控制等多方面的管理。

(一)SQL的发展历程

SQL的发展经历了多个阶段,早期为满足关系数据库管理的需求而产生,随着数据库技术的不断发展,SQL的标准也在不断更新完善,从最初的基本功能到如今支持复杂的数据分析、事务处理等高级功能。

(二)SQL的优点

1、非过程化语言

- 使用者不需要指出“怎么做”,只需说明“做什么”,在查询学生表中所有成绩大于80分的学生记录时,只需要编写一个简单的SELECT语句,而不需要详细描述数据库管理系统如何去查找这些记录的具体步骤。

2、统一的语法结构

- 无论是对哪种关系数据库管理系统(如MySQL、Oracle、SQL Server等),SQL的基本语法都是相似的,这使得数据库开发人员能够很容易地在不同的数据库系统之间切换,创建一个表的CREATE TABLE语句在大多数关系数据库中都遵循类似的语法规则,只是在数据类型等细节上可能存在一些差异。

数据定义语言(DDL)

(一)创建表(CREATE TABLE)

1、基本语法

CREATE TABLE语句用于创建新的表,创建一个名为students的表,包含id(学号,为主键)、name(姓名)、age(年龄)和grade(年级)等字段:

```sql

CREATE TABLE students (

id INT PRIMARY KEY,

name VARCHAR(50),

age INT,

grade VARCHAR(20)

);

```

- INTVARCHAR是数据类型,PRIMARY KEY用于指定主键约束,确保id字段的值在表中是唯一且非空的。

2、表约束

- 除了主键约束,还可以有其他约束,如NOT NULL(非空约束)、UNIQUE(唯一约束)、FOREIGN KEY(外键约束)等,要确保name字段非空,可以修改name字段的定义为name VARCHAR(50) NOT NULL

(二)修改表(ALTER TABLE)

1、添加列

- 使用ALTER TABLE语句可以对已存在的表进行修改,要给students表添加一个major(专业)字段,可以使用以下语句:

```sql

ALTER TABLE students ADD major VARCHAR(30);

```

2、修改列的数据类型或约束

- 如果要修改age字段的数据类型为SMALLINT,可以使用:

```sql

ALTER TABLE students MODIFY age SMALLINT;

```

3、删除列

- 要删除刚刚添加的major列,可以使用:

```sql

ALTER TABLE students DROP COLUMN major;

```

(三)删除表(DROP TABLE)

- 当不再需要某个表时,可以使用DROP TABLE语句将其删除,要删除students表,可以使用:

DROP TABLE students;

数据操作语言(DML)

(一)插入数据(INSERT)

1、基本插入

- 向students表中插入一条记录的示例:

```sql

INSERT INTO students (id, name, age, grade) VALUES (1, 'John', 18, 'Freshman');

```

- 这里按照表中字段的顺序提供了要插入的值,如果要插入所有列的值,并且按照表定义的列顺序,可以省略列名,

```sql

INSERT INTO students VALUES (2, 'Alice', 19, 'Sophomore');

```

2、批量插入

- 可以一次性插入多条记录。

```sql

INSERT INTO students (id, name, age, grade) VALUES

(3, 'Bob', 20, 'Junior'),

(4, 'Ella', 18, 'Freshman');

```

(二)更新数据(UPDATE)

1、基本更新

- 如果要将students表中id为1的学生的年龄更新为19岁,可以使用:

```sql

UPDATE students SET age = 19 WHERE id = 1;

```

WHERE子句用于指定更新的条件,如果省略WHERE子句,则会更新表中的所有记录。

2、多列更新

- 要同时更新namegrade字段,可以使用:

```sql

UPDATE students SET name = 'Jack', grade = 'Senior' WHERE id = 2;

```

关系数据库标准语言SQL笔记总结,关系数据库标准语言sql笔记

图片来源于网络,如有侵权联系删除

(三)删除数据(DELETE)

1、基本删除

- 要删除students表中id为3的学生记录,可以使用:

```sql

DELETE FROM students WHERE id = 3;

```

- 同样,如果省略WHERE子句,将删除表中的所有记录,所以在执行DELETE操作时要特别小心。

数据查询语言(DQL)

(一)基本查询(SELECT)

1、简单查询

- 查询students表中的所有记录:

```sql

SELECT * FROM students;

```

- 查询students表中的namegrade字段:

```sql

SELECT name, grade FROM students;

```

2、条件查询

- 查询age大于18岁的学生的nameage

```sql

SELECT name, age FROM students WHERE age > 18;

```

3、排序查询(ORDER BY)

- 按照age字段对查询结果进行升序排列:

```sql

SELECT * FROM students ORDER BY age;

```

- 如果要进行降序排列,可以使用ORDER BY age DESC

(二)多表查询

1、内连接(INNER JOIN)

- 假设有一个courses表,包含course_id(课程号)、course_name(课程名)和teacher(教师)字段,还有一个student_courses表,包含student_id(学生号)、course_id(课程号)和score(成绩)字段,要查询学生的姓名、所选课程名和成绩,可以使用内连接:

```sql

SELECT students.name, courses.course_name, student_courses.score

FROM students

INNER JOIN student_courses ON students.id = student_courses.student_id

INNER JOIN courses ON student_courses.course_id = courses.course_id;

```

2、外连接(LEFT JOIN、RIGHT JOIN)

- 左外连接(LEFT JOIN)会返回左表中的所有记录以及与右表匹配的记录,要查询所有学生以及他们所选的课程(即使有些学生没有选课):

```sql

SELECT students.name, courses.course_name

FROM students

LEFT JOIN student_courses ON students.id = student_courses.student_id

LEFT JOIN courses ON student_courses.course_id = courses.course_id;

```

- 右外连接(RIGHT JOIN)则相反,会返回右表中的所有记录以及与左表匹配的记录。

(三)聚合函数

1、常用聚合函数

COUNT:用于计算记录的数量,查询students表中的学生数量:

```sql

SELECT COUNT(*) FROM students;

```

SUM:用于计算数值字段的总和,如果student_courses表中有score字段,要计算所有学生的总成绩,可以使用:

```sql

SELECT SUM(score) FROM student_courses;

```

AVG:计算平均值,计算所有学生的平均成绩:

```sql

SELECT AVG(score) FROM student_courses;

```

MAXMIN:分别用于获取最大值和最小值,查询students表中年龄最大和最小的学生年龄:

```sql

SELECT MAX(age), MIN(age) FROM students;

```

2、分组查询(GROUP BY)

- 要按照年级统计学生数量,可以使用:

```sql

SELECT grade, COUNT(*) FROM students GROUP BY grade;

```

关系数据库标准语言SQL笔记总结,关系数据库标准语言sql笔记

图片来源于网络,如有侵权联系删除

- 在使用GROUP BY时,SELECT子句中只能出现分组字段和聚合函数,如果要对分组结果进行筛选,可以使用HAVING子句,

```sql

SELECT grade, COUNT(*)

FROM students

GROUP BY grade

HAVING COUNT(*) > 10;

```

数据控制语言(DCL)

(一)用户权限管理

1、创建用户

- 在不同的数据库管理系统中,创建用户的语法有所不同,以MySQL为例,创建一个名为user1的用户:

```sql

CREATE USER 'user1'@'localhost' IDENTIFIED BY 'password1';

```

- 这里指定了用户名为user1,只能从localhost连接,密码为password1

2、授予权限(GRANT)

- 授予user1students表的SELECT权限:

```sql

GRANT SELECT ON students TO 'user1'@'localhost';

```

- 可以授予多种权限,如INSERTUPDATEDELETE等,也可以授予对整个数据库的权限。

3、收回权限(REVOKE)

- 如果要收回user1students表的SELECT权限,可以使用:

```sql

REVOKE SELECT ON students FROM 'user1'@'localhost';

```

视图(VIEW)

1、创建视图

- 视图是一个虚拟的表,它是基于一个或多个实际表的查询结果,创建一个视图young_students,显示年龄小于20岁的学生:

```sql

CREATE VIEW young_students AS

SELECT * FROM students WHERE age < 20;

```

2、使用视图

- 可以像使用普通表一样使用视图,查询young_students视图中的所有记录:

```sql

SELECT * FROM young_students;

```

3、视图的优点

- 简化复杂查询:对于一些复杂的多表连接和条件查询,可以创建视图来简化后续的查询操作。

- 提高数据安全性:可以通过视图只暴露部分数据给用户,隐藏敏感信息,创建一个视图只显示学生的姓名和年级,而不显示年龄等其他信息。

存储过程(PROCEDURE)

1、创建存储过程

- 存储过程是一组预编译的SQL语句,创建一个存储过程get_student_count,用于获取学生的数量:

```sql

DELIMITER //

CREATE PROCEDURE get_student_count()

BEGIN

SELECT COUNT(*) FROM students;

END //

DELIMITER ;

```

- 在MySQL中,使用DELIMITER来改变语句结束符,因为存储过程中包含多条SQL语句,需要用不同的结束符来区分。

2、调用存储过程

- 调用get_student_count存储过程:

```sql

CALL get_student_count();

```

3、存储过程的优点

- 提高性能:存储过程在数据库中预编译,执行时不需要再次编译,提高了执行效率。

- 可维护性:将一些复杂的业务逻辑封装在存储过程中,便于维护和修改,如果查询学生数量的逻辑发生变化,只需要修改存储过程中的SQL语句即可,而不需要在多个应用程序代码中进行修改。

索引(INDEX)

1、创建索引

- 索引可以提高查询的速度,在students表的name字段上创建索引:

```sql

CREATE INDEX name_index ON students (name);

```

2、索引的类型

- 常见的索引类型有普通索引、唯一索引、主键索引等,主键索引是一种特殊的唯一索引,用于标识表中的每一行记录,唯一索引确保索引列的值是唯一的。

3、索引的使用原则

- 虽然索引可以提高查询速度,但过多的索引也会增加数据库的维护成本,降低数据插入、更新和删除的速度,应该根据实际的查询需求有选择地创建索引,对于经常在WHERE子句中使用的字段创建索引。

关系数据库标准语言SQL在数据库管理中起着至关重要的作用,通过掌握SQL的各个方面,包括数据定义、操作、查询、控制以及高级特性如视图、存储过程和索引等,可以有效地管理关系数据库,满足各种应用场景下的数据管理和处理需求,无论是开发数据库应用程序还是进行数据分析等工作,SQL都是不可或缺的工具。

标签: #关系数据库 #标准语言 #SQL #笔记

黑狐家游戏
  • 评论列表

留言评论