SQL基础及常用命令介绍
发布时间: 2024-01-18 03:17:18 阅读量: 37 订阅数: 46
Oracle基础介绍及常用相关sql*plus命令
# 1. SQL基础介绍
## 1.1 什么是SQL
SQL(Structured Query Language)是一种用于管理关系数据库系统的特殊目的编程语言。它允许用户执行诸如查询数据、插入新数据、更新现有数据、删除数据等操作。
## 1.2 SQL的作用和应用领域
SQL被广泛应用于各种数据库管理系统中,如MySQL、PostgreSQL、Oracle、SQL Server等,它可以用来处理大量的数据,为企业提供数据管理和数据分析支持。
## 1.3 SQL的发展历史
SQL最早可以追溯到20世纪70年代初,当时,IBM公司的一些研究人员提出了一种用于数据操作的编程语言SEQUEL,在经过多年的发展和标准化,SQL逐渐成为数据库领域的事实标准编程语言。
# 2. SQL常用命令介绍
### 2.1 SELECT:查询数据
SELECT语句是SQL中最常用的命令之一,用于从数据库中查询数据并返回结果集。它的基本语法如下:
```sql
SELECT 列名1, 列名2, ... FROM 表名;
```
其中,列名指定了希望查询的字段,可以一次查询多个字段,用逗号分隔。表名指定了要查询的数据库表。例如,假设有一个名为"users"的表,包含了"id"、"name"和"age"三个字段,我们可以使用如下SELECT语句查询所有用户的姓名和年龄:
```sql
SELECT name, age FROM users;
```
这样,数据库会返回一个结果集,包含了所有用户的姓名和年龄。
### 2.2 INSERT:插入数据
INSERT语句用于向数据库表中插入新的记录。它的基本语法如下:
```sql
INSERT INTO 表名 (列名1, 列名2, ...) VALUES (值1, 值2, ...);
```
其中,表名指定了要插入数据的数据库表,列名指定了要插入数据的字段,VALUES子句指定了要插入的具体值。例如,假设有一个名为"users"的表,包含了"name"和"age"两个字段,我们可以使用如下INSERT语句插入一条新的用户记录:
```sql
INSERT INTO users (name, age) VALUES ('John', 25);
```
这样,一个名为"John"、年龄为25的用户记录就被插入到了"users"表中。
### 2.3 UPDATE:更新数据
UPDATE语句用于更新数据库表中的记录。它的基本语法如下:
```sql
UPDATE 表名 SET 列名1 = 值1, 列名2 = 值2, ... WHERE 条件;
```
其中,表名指定了要更新数据的数据库表,SET子句指定了要更新的字段及其对应的新值,WHERE子句指定了更新条件。例如,假设有一个名为"users"的表,包含了"name"和"age"两个字段,我们可以使用如下UPDATE语句将名字为"John"的用户年龄更新为30:
```sql
UPDATE users SET age = 30 WHERE name = 'John';
```
这样,表中名字为"John"的用户的年龄就被更新为了30。
### 2.4 DELETE:删除数据
DELETE语句用于从数据库表中删除记录。它的基本语法如下:
```sql
DELETE FROM 表名 WHERE 条件;
```
其中,表名指定了要删除数据的数据库表,WHERE子句指定了删除条件。通常情况下,我们需要慎重使用DELETE语句,因为它会永久删除数据。例如,假设有一个名为"users"的表,包含了"name"和"age"两个字段,我们可以使用如下DELETE语句删除年龄大于等于30的用户记录:
```sql
DELETE FROM users WHERE age >= 30;
```
这样,年龄大于等于30的用户记录就被从"users"表中删除了。
以上是SQL常用的命令介绍,通过使用SELECT、INSERT、UPDATE和DELETE,我们可以实现对数据库中数据的查询、插入、更新和删除操作。在实际的数据库应用中,这些命令经常被用到,对于学习和掌握SQL语言来说,它们是必不可少的基础知识。
# 3. SQL条件筛选
在SQL查询中,我们经常需要对数据进行条件筛选,以便从数据库中获取符合特定条件的数据。在本章中,我们将介绍SQL条件筛选的相关知识,包括WHERE子句的使用、比较运算符、逻辑运算符以及通配符的应用。
### 3.1 WHERE子句的使用
在SQL中,WHERE子句用于过滤满足特定条件的行。它的一般语法如下:
```sql
SELECT column1, column2, ...
FROM table
WHERE condition;
```
其中,column1, column2, ... 表示要查询的列名;table表示要查询的表名;condition表示要筛选的条件。
下面是一个示例,假设我们有一个名为"employees"的表,包含了员工的信息,现在我们想查询年龄小于30岁的员工:
```sql
SELECT *
FROM employees
WHERE age < 30;
```
上述查询语句中的WHERE条件为"age < 30",表示筛选年龄小于30岁的员工。通过执行上述查询,我们可以获取到年龄小于30岁的员工信息。
### 3.2 比较运算符
在WHERE子句中,我们可以使用比较运算符来进行条件判断。常见的比较运算符包括:
- 等于(=):判断两个值是否相等。
- 不等于(<>或!=):判断两个值是否不相等。
- 大于(>):判断一个值是否大于另一个值。
- 小于(<):判断一个值是否小于另一个值。
- 大于等于(>=):判断一个值是否大于或等于另一个值。
- 小于等于(<=):判断一个值是否小于或等于另一个值。
### 3.3 逻辑运算符
除了比较运算符外,我们还可以使用逻辑运算符来组合多个条件进行筛选。常见的逻辑运算符有:
- AND:表示逻辑与,要求同时满足多个条件。
- OR:表示逻辑或,只要满足其中一个条件即可。
- NOT:表示逻辑非,取反一个条件的结果。
通过结合比较运算符和逻辑运算符,我们可以实现更为复杂的条件筛选。
### 3.4 通配符的应用
通配符是用于匹配模式的特殊字符,常用于WHERE子句中的条件筛选。在SQL中,常用的通配符有两种:
- 百分号(%):表示任意字符出现任意次数。
- 下划线(_):表示任意单个字符。
下面是一个示例,假设我们有一个名为"customers"的表,包含了顾客信息,现在我们想查询所有以字母"A"开头的顾客名字:
```sql
SELECT *
FROM customers
WHERE name LIKE 'A%';
```
上述查询语句中的WHERE条件为"name LIKE 'A%'",表示筛选名字以字母"A"开头的顾客。通过执行上述查询,我们可以获取到满足条件的顾客信息。
以上就是SQL条件筛选的相关知识介绍。通过学习和掌握这些知识,我们可以灵活运用SQL进行数据的筛选和查询操作。在实际应用中,根据具体的需求,我们可以结合比较运算符和逻辑运算符,以及通配符的应用,来构建复杂的查询条件。
# 4. SQL聚合函数
在SQL中,聚合函数对数据进行统计和计算。它们对一组数据进行操作,返回一个单一的值作为结果。在这一章节中,我们将介绍几个常用的聚合函数及其用法。
### 4.1 COUNT:统计行数
COUNT函数用于统计某个列或整个表中的行数。它的语法如下:
```sql
SELECT COUNT(column_name)
FROM table_name
```
其中,`column_name`为要统计的列名,`table_name`为要统计的表名。COUNT函数将返回满足条件的行数。
示例1:统计表中的行数
```sql
SELECT COUNT(*)
FROM students
```
结果:
```
+----------+
| COUNT(*) |
+----------+
| 100 |
+----------+
```
示例2:统计某个列中的非空值数量
```sql
SELECT COUNT(course)
FROM students
```
结果:
```
+---------------+
| COUNT(course) |
+---------------+
| 90 |
+---------------+
```
### 4.2 SUM:求和
SUM函数用于计算某个列的数值总和。它的语法如下:
```sql
SELECT SUM(column_name)
FROM table_name
```
其中,`column_name`为要求和的列名,`table_name`为要操作的表名。SUM函数将返回列中所有数值的总和。
示例:计算某个列的数值总和
```sql
SELECT SUM(score)
FROM students
```
结果:
```
+-----------+
| SUM(score)|
+-----------+
| 850 |
+-----------+
```
### 4.3 AVG:平均值
AVG函数用于计算某个列的数值平均值。它的语法如下:
```sql
SELECT AVG(column_name)
FROM table_name
```
其中,`column_name`为要计算平均值的列名,`table_name`为要操作的表名。AVG函数将返回列中所有数值的平均值。
示例:计算某个列的平均值
```sql
SELECT AVG(score)
FROM students
```
结果:
```
+-----------+
| AVG(score)|
+-----------+
| 85 |
+-----------+
```
### 4.4 MAX和MIN:最大最小值
MAX函数用于获取某个列的最大值,MIN函数用于获取某个列的最小值。它们的语法如下:
```sql
SELECT MAX(column_name)
FROM table_name
```
```sql
SELECT MIN(column_name)
FROM table_name
```
其中,`column_name`为要获取最大最小值的列名,`table_name`为要操作的表名。MAX函数将返回列中的最大值,MIN函数将返回列中的最小值。
示例1:获取某个列的最大值
```sql
SELECT MAX(age)
FROM students
```
结果:
```
+---------+
| MAX(age)|
+---------+
| 25 |
+---------+
```
示例2:获取某个列的最小值
```sql
SELECT MIN(age)
FROM students
```
结果:
```
+---------+
| MIN(age)|
+---------+
| 18 |
+---------+
```
本章我们介绍了一些常用的SQL聚合函数,包括COUNT、SUM、AVG、MAX和MIN。通过这些函数,我们可以对数据进行统计、求和、求平均值以及获取最大最小值,为数据分析和决策提供了便利。接下来,我们将继续介绍SQL中的表连接操作。
# 5. SQL表连接
在实际的数据库操作中,有时候我们需要从多个表中获取数据,这就需要使用到表连接(Join)。SQL支持多种类型的表连接,包括内连接、外连接和自连接。接下来我们将逐一介绍这些常用的表连接方式。
### 5.1 内连接
内连接是最常用的连接方式之一,它用于根据两个表中的共同字段的值来结合这两个表。内连接的语法如下:
```sql
SELECT column_name(s)
FROM table1
JOIN table2 ON table1.column_name = table2.column_name;
```
其中,`table1` 和 `table2` 是需要连接的表,`column_name` 是用来进行连接的字段名。内连接会返回表1和表2中符合连接条件的行。
### 5.2 外连接
外连接又分为左外连接、右外连接和全外连接。左外连接(Left Join)返回左表(table1)中的所有记录和右表(table2)中匹配的记录。右外连接(Right Join)则相反,返回右表中的所有记录和左表中匹配的记录。全外连接(Full Join)返回左表和右表中的所有记录,当某条记录在另一张表中没有匹配记录时,用 NULL 值填充。
外连接的语法如下:
```sql
-- 左外连接
SELECT column_name(s)
FROM table1
LEFT JOIN table2 ON table1.column_name = table2.column_name;
-- 右外连接
SELECT column_name(s)
FROM table1
RIGHT JOIN table2 ON table1.column_name = table2.column_name;
-- 全外连接
SELECT column_name(s)
FROM table1
FULL JOIN table2 ON table1.column_name = table2.column_name;
```
### 5.3 自连接
自连接是指在同一表中进行连接操作。在实际应用中,自连接常用于对包含层次结构的表进行查询,比如员工表中包含员工ID和其上级领导的ID,我们可以使用自连接来找到员工和他们的直接上级。
自连接的语法如下:
```sql
SELECT e1.employee_name, e2.employee_name as supervisor
FROM employee e1
JOIN employee e2 ON e1.supervisor_id = e2.employee_id;
```
以上就是SQL表连接的基本介绍,通过合理运用表连接,可以更灵活地从多个表中获取所需的数据,提升数据库操作的效率和适用性。
# 6. SQL数据排序和分组
## 6.1 ORDER BY子句的使用
ORDER BY子句用于对查询结果进行排序。可以根据一个或多个列对结果进行排序,也可以指定排序方式(升序或降序)。
### 6.1.1 单列排序
语法格式:
```sql
SELECT 列名1, 列名2, ...
FROM 表名
ORDER BY 列名 [ASC|DESC];
```
示例:
```sql
SELECT * FROM Students
ORDER BY age ASC;
```
注释:以上示例将按照学生年龄的升序对学生表进行排序,返回结果。
### 6.1.2 多列排序
语法格式:
```sql
SELECT 列名1, 列名2, ...
FROM 表名
ORDER BY 列名1 [ASC|DESC], 列名2 [ASC|DESC], ...;
```
示例:
```sql
SELECT * FROM Students
ORDER BY grade DESC, age ASC;
```
注释:以上示例将先按照学生的年级降序排列,如果年级相同,则按照年龄升序排列。
## 6.2 GROUP BY子句的作用
GROUP BY子句用于对查询结果进行分组。可以根据一个或多个列对结果进行分组,并对每个分组进行聚合操作。
语法格式:
```sql
SELECT 列名1, 列名2, ...
FROM 表名
GROUP BY 列名1, 列名2, ...;
```
示例:
```sql
SELECT grade, COUNT(*) as count
FROM Students
GROUP BY grade;
```
注释:以上示例将按照学生的年级进行分组,并统计每个年级的学生数量。
## 6.3 HAVING子句的应用
HAVING子句用于对分组后的结果进行筛选。可以使用聚合函数和比较运算符对分组结果进行筛选。
语法格式:
```sql
SELECT 列名1, 列名2, ...
FROM 表名
GROUP BY 列名1, 列名2, ...
HAVING 条件;
```
示例:
```sql
SELECT grade, AVG(score) as avg_score
FROM Students
GROUP BY grade
HAVING AVG(score) > 80;
```
注释:以上示例将按照学生的年级进行分组,计算每个年级的平均成绩,并筛选出平均成绩大于80的年级。
以上是SQL数据排序和分组的内容,通过ORDER BY子句可以实现对查询结果的排序,GROUP BY子句用于对结果进行分组,HAVING子句用于对分组结果进行筛选。根据具体的需求可以结合使用这些子句来获取需要的结果。
0
0