Test1 database

数据库知识点

概念

DB,database,数据库

DBS,database system 数据库系统

DBMS,database system manage system 数据库管理系统

DBA,database administrator 数据库管理员

完整性约束

Null,空

unique约束,唯一,只能出现一次

check约束

primary key主键约束

foreign key外键约束,需要同主键保持一致

default约束,设置默认值

查询语句

对表格

增删改查

增,create

删,delete from

改,update

对数据库

增,add,create

删,drop

改,alter

常用SQL命令

select,一次可以给多个变量赋值

select,一次可以输出多个变量

declare,一次定义一个变量

print,一次输出一个变量

四大故障

事务内部的故障

系统故障

介质故障

计算机病毒

事务的特性

ACID

原子性,Atomicity

一致性,Consistency

隔离性,Isolation

持久性,Durability

数据库SQL语句

SELECT # COUNT(), SUM(), AVG(), MAX(), MIN()
FROM # JOIN ON, LEFT JOIN ON, RIGHT JOIN ON
WHERE # IS NULL, IN, NOT IN,
GROUP BY
HAVING ON
ORDER BY #降序DESC, 升序ASC
desc(descend)降序

asc(ascend )升序

例题1怎么查找在一个表内有而在另一个表内没有的数据?

要查找在一个表内有而在另一个表内没有的数据,可以使用 SQL 的 LEFT JOINIS NULL 语句。假设有两个表 table1table2,它们都有一个共同的字段 id,我们想要找出在 table1 中有但在 table2 中没有的数据,可以使用以下 SQL 语句:

SELECT table1.*
FROM table1
LEFT JOIN table2 ON table1.id = table2.id
WHERE table2.id IS NULL;

LEFT JOIN 是一种 SQL 连接操作,用于从两个或多个表中返回匹配的行。它会返回左表(第一个表)的所有行,以及右表(第二个表)中与左表匹配的行。如果在右表中没有匹配的行,则结果集中的右表列将包含 NULL 值。

具体来说,LEFT JOIN 的效果如下:

  1. 返回左表中的所有记录,即使右表中没有匹配的记录。
  2. 如果右表中有匹配的记录,那么左表和右表的匹配记录将被合并在一起。
  3. 如果右表中没有匹配的记录,那么左表的记录将与右表的所有列一起显示,其中右表的列值为 NULL。

例题2升序,降序怎么表示?

在SQL中,升序和降序可以通过关键字ASC(升序)和DESC(降序)来表示。这些关键字通常与ORDER BY子句一起使用,用于对查询结果进行排序。

例如,假设我们有一个名为employees的表,其中包含员工的信息,包括姓名(name)和工资(salary)。如果我们想要按照工资从低到高的顺序显示所有员工的信息,可以使用以下查询:

SELECT * FROM employees
ORDER BY salary ASC;

如果我们想要按照工资从高到低的顺序显示所有员工的信息,可以使用以下查询:

SELECT * FROM employees
ORDER BY salary DESC;

此外,还可以同时按多个列进行排序。例如,如果我们想要先按照部门(department)进行升序排序,然后在每个部门内按照工资进行降序排序,可以使用以下查询:

SELECT * FROM employees
ORDER BY department ASC, salary DESC;

在这个例子中,首先按照部门进行升序排序,然后在每个部门内部按照工资进行降序排序。

例题3怎么连接两张表?

在SQL中,可以使用JOIN语句来连接两张表。JOIN语句允许你根据两个或多个表中的共享列将它们组合在一起,以便在一个查询中检索相关数据。

以下是几种常见的JOIN类型:

  1. INNER JOIN(内连接):返回两个表中匹配的行。只有当两个表中的指定列都有匹配值时,才会返回结果。 示例:查询员工和部门的信息,只显示有对应部门的员工。

    SELECT employees.name, departments.department_name
    FROM employees
    INNER JOIN departments ON employees.department_id = departments.department_id;
    
  2. LEFT JOIN(左连接):返回左表中的所有行,以及右表中与左表匹配的行。如果右表中没有匹配的行,则结果集中的右表列将包含NULL值。 示例:查询所有部门及其对应的员工信息,即使某些部门没有员工。

    SELECT departments.department_name, employees.name
    FROM departments
    LEFT JOIN employees ON departments.department_id = employees.department_id;
    
  3. RIGHT JOIN(右连接):返回右表中的所有行,以及左表中与右表匹配的行。如果左表中没有匹配的行,则结果集中的左表列将包含NULL值。 示例:查询所有员工及其对应的部门信息,即使某些员工没有部门。

    SELECT employees.name, departments.department_name
    FROM employees
    RIGHT JOIN departments ON employees.department_id = departments.department_id;
    
  4. FULL JOIN(全连接):返回两个表中所有的行。如果没有匹配的行,则结果集中的列将包含NULL值。 示例:查询所有员工及其对应的部门信息,包括没有员工的部门和没有部门的

限制查询结果SQL语句

  1. HAVING子句:HAVING子句用于对分组后的结果进行过滤。它通常与GROUP BY子句一起使用,用于筛选满足特定条件的分组。
  2. LIMIT子句:LIMIT子句用于限制查询结果的行数。它可以指定返回的最大行数或者从指定的起始位置开始返回一定数量的行。
  3. OFFSET子句:OFFSET子句与LIMIT子句一起使用,用于指定从哪一行开始返回结果。例如,LIMIT 10 OFFSET 5表示从第6行开始返回10行结果。
  4. IN子句:IN子句用于指定一个值列表,查询结果将只包含列中值在这个列表中的行。
  5. NOT IN子句:NOT IN子句与IN子句相反,用于排除列中值在指定列表中的行。
  6. EXISTS子句:EXISTS子句用于检查子查询是否至少返回一行数据,如果存在至少一行数据,则整个查询条件为真。
  7. NOT EXISTS子句:NOT EXISTS子句与EXISTS子句相反,用于检查子查询是否没有返回任何数据,如果没有数据,则整个查询条件为真。

分组SQL语句

HAVING子句用于对分组后的结果进行过滤,通常与GROUP BY子句一起使用。以下是一些常见的分组语句和例子:

  1. COUNT()函数:计算每个分组中的行数。 示例:查询每个部门的员工数量。
    SELECT department, COUNT(*) as employee_count
    FROM employees
    GROUP BY department;
    
  2. SUM()函数:计算每个分组中某列的总和。 示例:查询每个部门的总工资。

    SELECT department, SUM(salary) as total_salary
    FROM employees
    GROUP BY department;
    
  3. AVG()函数:计算每个分组中某列的平均值。 示例:查询每个部门的平均工资。
    SELECT department, AVG(salary) as average_salary
    FROM employees
    GROUP BY department;
    
  4. MIN()函数:返回每个分组中某列的最小值。 示例:查询每个部门的最低工资。
    SELECT department, MIN(salary) as min_salary
    FROM employees
    GROUP BY department;
    
  5. MAX()函数:返回每个分组中某列的最大值。 示例:查询每个部门的最高工资。
    SELECT department, MAX(salary) as max_salary
    FROM employees
    GROUP BY department;
    
  6. HAVING子句:在GROUP BY之后使用HAVING子句来进一步筛选满足特定条件的分组。 示例:查询员工数量超过10人的部门。

    SELECT department, COUNT(*) as employee_count
    FROM employees
    GROUP BY department
    HAVING COUNT(*) > 10;