select column1, column2,....
from table_name
where condition;
select DISTINCT column1, clumn2,...
from table_name;
工作原理如下:
这种方法适用于任何列,但对于大型数据集可能会产生一些性能开销,因为数据库需要遍历整个列来找到唯一值。
select column1,column2, ...
from table_name
order by column1 [ASC|DESC], column2 [ASC|DESC],...;
insert into table_name (column1, column2, column3...)
values (value1, value2, value3,...);
update table_name
set column1=value1, column2=value2,...
where condition;
delete from table_name
where condition;
create table_name(
column1 datetype,
column2 datatype,
...
);
alter table table_name
add column_name datatype;
alter table table_name
modify column_name datatype;
alter table table_name
drop column_name;
drop table table_name;
创建索引:用于加速查询数据库中的数据,使得系统能够快速定位,范围查询和加速排序和连接目标值。
CREAT INDEX idx_department_id ON employees (department_id);
-- 查询所有部门为101的员工
SELECT * FROM employees where department_id = 101;
在这个查询中,如果 department_id
列上有索引,数据库系统可能会选择使用该索引来加速查询。
这些语法用于处理更复杂的查询需求,例如多表联合查询、汇总统计、条件过滤等。
1. 嵌套查询: 在一个查询中嵌套另一个查询,用于检索嵌套查询的结果。
select column1
from table1
where column2 in (select columns from table2 where condition);
select column1, column2
from table1
inner join table2 on table1.column = table2.column;
其中,select column1, column2: 这部分指定了你希望从结果中集中显示的列。在这个例子中,你选择了表'table1'中的'colum1'和'column2'。
from table1: 指定主要表的部分,既要从中选择数据的表。在这里,主要表是‘table1’。
inner join table2 on?table1.column = table2.column : 这里是连接表的部分。通过使用inner join,你正在执行内连接,这意味着只有在两个表中的指定列的值相匹配的情况下,相关的行才会包含在结果集中。
该查询目的:这个查询的目的是从‘table1’和‘table2’中选择'table1'的'column1'和'column2',并且只选择那些在连接条件中匹配的行。
举例:假设你有两个表,employees包含员工的信息,包括ID(employee_id),姓名(employee_name),和所属部门的ID(departmet_id)。departments包含部门的信息,包括部门ID(department_id)和部门名称(department_name)。
现想要获取每个员工及其所属部门的名称:
# SQL
select employees.employee_id, employees.employee_name, departments.department_name
from employees
inner join departments on employees.department_id = departments.department_id;
这个查询的含义是:
employees
表中选择员工的ID (employee_id
) 和姓名 (employee_name
)。departments
表中选择部门的名称 (department_name
)。INNER JOIN
) 将这两个表连接起来,连接条件是 employees.department_id = departments.department_id
,即员工所属部门的ID要与部门表中的ID相匹配。内连接的好处:
内连接的强大体现在在关系型数据库中从多个表中检索和组合数据,提供了更丰富和有关联的查询结果。
从四个表中连接表后,查询结果的例子:
select t1.column1, t2.column2, t3.column3, t4.column4
from table t1
inner join table2 t2 on t1.common_colum = t2.common_column
inner join table3 t3 on t2.another_common_column = t3.another_common_column
inner join table4 t4 on t3.yet_another_common_column = t4.yet_another_common_column;
外连接分为左外连接(left outer join)、右外连接(right outer join)和全外连接(full outer join)。
举例:假设你有两个表,employees包含员工的信息,包括ID(employee_id),姓名(employee_name),和所属部门的ID(departmet_id)。departments包含部门的信息,包括部门ID(department_id)和部门名称(department_name)。
employees表:
| employee_id | employee_name | department_id |
|-------------|---------------|---------------|
| 1 | John | 101 |
| 2 | Jane | 102 |
| 3 | Bob | 103 |
departments表:
| department_id | department_name |
|---------------|------------------|
| 101 | HR |
| 102 | IT |
| 104 | Marketing |
现打算获取所有员工及其所属部门的名称,包括那些没有匹配到部门的员工。你可以使用左外连接来实现。
select employees.employee_id, employees.employee_name, departments.department_name
from employees
left outer join departments on employees.department_id = departments.departments_id
语句含义:最终会返回employees
表中的所有行,不论它们在 departments
表中是否有匹配的部门信息。如果某个员工没有匹配到部门,departments
表的相关列将会包含 NULL 值。
left outer join结果:
| employee_id | employee_name | department_name |
|-------------|---------------|------------------|
| 1 | John | HR |
| 2 | Jane | IT |
| 3 | Bob | NULL |
右外连接,以返回departments表中所有数据为基准,employees中缺失值补NULL:
SELECT employees.employee_id, employees.employee_name, departments.department_name
FROM employees
RIGHT OUTER JOIN departments ON employees.department_id = departments.department_id;
在这个查询中,RIGHT OUTER JOIN
表示右外连接。这意味着将返回 departments
表中的所有行,不论它们在 employees
表中是否有匹配的员工信息。如果某个部门没有匹配到员工,employees
表的相关列将会包含 NULL 值。
结果如下:
| employee_id | employee_name | department_name |
|-------------|---------------|------------------|
| 1 | John | HR |
| 2 | Jane | IT |
| NULL | NULL | Marketing |
右外连接,以返回employees表和departments表中所有数据为基准,employees和departments中缺失值补NULL:
SELECT employees.employee_id, employees.employee_name, departments.department_name
FROM employees
FULL OUTER JOIN departments ON employees.department_id = departments.department_id;
运行结果:
| employee_id | employee_name | department_name |
|-------------|---------------|------------------|
| 1 | John | HR |
| 2 | Jane | IT |
| 3 | Bob | NULL |
| NULL | NULL | Marketing |
这个结果集包含了 employees
和 departments
表中的所有记录,不论它们在另一个表中是否有匹配。如果某个记录在其中一个表中没有匹配,相应的列将包含 NULL 值。
聚合函数是用于对一组值进行计算并返回单个结果的SQL函数。这些函数通常用于对数据库中的数据进行汇总和统计,提供了对数据集合进行分析的强大工具。
1. SUM:计算某列的总和。
select SUM(column1) from table1;
2. AVG: 计算某列的平均值。
select AVG(column1) from table1;
3. COUNT: 计算某列的行数。
select COUNT(column1) from table1;
4. MAX: 获取某列的最大值。
select max(column1) from table1;
5. MIN: 获取某列的最小值。
select min(column1) from table1;
select column1, COUNT(*)
from table1
group by column1;
解释:
举例1:
| column1 |
|---------|
| A |
| B |
| A |
| A |
| B |
| C |
运行上述查询后,结果可能是:
| column1 | COUNT(*) |
|---------|----------|
| A | 3 |
| B | 2 |
| C | 1 |
解释结果:
这种查询对于了解数据分布、查找出现频率最高的项等情况非常有用。
举例2:
table1包含以下数据:
| column1 | column2 |
|---------|---------|
| A | X |
| B | Y |
| A | X |
| A | Z |
| B | Z |
| C | Y |
运行以下查询:
SELECT column1, column2, COUNT(*)
FROM table1
GROUP BY column1, column2;
可能的结果是:
| column1 | column2 | COUNT(*) |
|---------|---------|----------|
| A | X | 2 |
| B | Y | 1 |
| A | Z | 1 |
| B | Z | 1 |
| C | Y | 1 |
这表示按照 column1
和 column2
的组合进行分组,然后计算每个组合的行数。例如,"A" 和 "X" 的组合出现了 2 次,"B" 和 "Y" 的组合出现了 1 次,以此类推。
select column1, COUNT(*)
from table1
group by coumn1
having count(*) > 1;
解释:
这是一个带有having子句的sql查询语句,用于从表table1中选择出现次数大于1的不同column1值以及它们的出现次数。
column1
列的值对结果进行分组。这意味着查询将返回每个不同的 column1
值以及该值出现的次数。HAVING COUNT(*) > 1
: 通过 HAVING
子句筛选出现次数大于 1 的分组。这样,结果将只包含那些在 column1
列中出现次数大于 1 的值。
举例:
table1如下:
| column1 |
|---------|
| A |
| B |
| A |
| A |
| B |
| C |
运行上面查询语句的结果可能是:
| column1 | COUNT(*) |
|---------|----------|
| A | 3 |
| B | 2 |
这表示在 column1
列中,只有 "A" 和 "B" 出现的次数大于 1。这种查询常用于查找具有重复出现的特定值的情况。
假如有table1:
| column1 | column2 | some_numeric_column |
|---------|---------|---------------------|
| A | X | 10 |
| B | Y | 5 |
| A | X | 7 |
| A | Z | 3 |
| B | Z | 8 |
| C | Y | 12 |
运行:
SELECT column1, column2, SUM(some_numeric_column)
FROM table1
GROUP BY column1, column2;
可能的结果:
| column1 | column2 | SUM(some_numeric_column) |
|---------|---------|---------------------------|
| A | X | 17 |
| B | Y | 5 |
| A | Z | 3 |
| B | Z | 8 |
| C | Y | 12 |
这表示按照 column1
和 column2
的组合进行分组,并计算每个组合中 some_numeric_column
列的总和。