sql高级回顾

SQL SELECT TOP 子句

SQL SELECT TOP 子句用于限制返回的结果集中的行数,通常用于只需查询几行数据的情况,数据集非常大时,可以显著提高查询性能。

说明

  • SELECT TOP 在 SQL Server 和 MS Access 中使用,而在 MySQL 和 PostgreSQL 中使用 LIMIT 关键字。
  • Oracle 在 12c 版本之前没有直接等效的关键字,可以通过 ROWNUM 实现类似功能,但在 12c 及以上版本中引入了 FETCH FIRST。
  • 当使用 TOP 或 LIMIT 时,最好结合 ORDER BY 子句,以确保返回的行是特定顺序的前几行。

SQL Server / MS Access 语法

SELECT TOP number | percent column1, column2,...
FROM table_name

number|percent:指定返回的行数或百分比。

  • number:具体的行数。
  • percent:数据集的百分比。
    MySQL 语法
SELECT column1,column2,...
FROM table_name
LIMIT number;

Oracle语法

SELECT column1,column2,...
FROM table_name
FETCH FITST namber RPWS PMLY;

PostgeSQL语法

SELECT column1,column2,...
FROM table_name
LIMIT number;

SQL LIKE 操作符

LINE操作符用于在WHERE子句中搜索列中的指定模式
LIKE 操作符是 SQL 中用于在 WHERE 子句中进行模糊查询的关键字,它允许我们根据模式匹配来选择数据,通常与 % 和 _ 通配符一起使用。

SQL LIKE 语法

SELECT column1, column2,...
FROM table_name
WHERE column_name LIKE pettern;

参数说明:

  • column1, column2, ...:要选择的字段名称,可以为多个字段。如果不指定字段名称,则会选择所有字段。
  • table_name:要查询的表名称。
  • column:要搜索的字段名称。
  • pattern:搜索模式。

SQL 通赔符

在 SQL 中,通配符与 SQL LIKE 操作符一起使用。
SQL 通配符用于搜索表中的数据。
在 SQL 中,可使用以下通配符:

%:匹配任意字符(包括零个字符)。
_:匹配单个字符。

SQL IN 操作符

IN 操作符允许您在 WHERE 子句中规定多个值。

SELECT column1, column2, ...
FROM table_name
WHERE column IN (value1, value2, ...);

SQL BETWEEN 操作符

BETWEEN 操作符选取介于两个值之间的数据范围内的值,这些值可以是数值、文本或者日期。

SELECT column1,column2,....
FROM table_name
WHERE column BETWEEN value1 AND value2;

参数说明:

  • column1, column2, ...:要选择的字段名称,可以为多个字段。如果不指定字段名称,则会选择所有字段。

  • table_name:要查询的表名称。

  • column:要查询的字段名称。

  • value1:范围的起始值。

  • value2:范围的结束值。

    SQL 别名

    通过使用 SQL,可以为表名称或列名称指定别名。
    列的 SQL 别名语法:

    SELECT colummn_name AS alias_name
    FORM table_name;
    

    表的 SQL 别名语法:

    SELECT colummn_name(s)
    FORM table_name AS alias_name;
    

SQL UNION 操作符

SQL UNION 操作符合并两个或多个 SELECT 语句的结果。
UNION 操作符用于合并两个或多个 SELECT 语句的结果集。它可以从多个表中选择数据,并将结果集组合成一个结果集。使用 UNION 时,每个 SELECT 语句必须具有相同数量的列,且对应列的数据类型必须相似。

SQL UNION 操作符语法:

SELECT column1, column2,..
FROM table1
UNION
SELECT column1, column2...
FROM table2;

SQL SELECT INTO 语句

SELECT INTO 语句从一个表复制数据,然后把数据插入到另一个新表中。

CREATE TABLE 新表
AS
SELECT * FROM 旧表 

使用注意事项

表结构:

  • SELECT INTO 会创建一个新表,并且新表的结构将基于选择的列和数据类型。
  • 如果新表已经存在,SELECT INTO 语句将失败。在这种情况下,可以使用 INSERT INTO ... SELECT 语句。

数据库支持:

  • SELECT INTO 语句在 SQL Server 中非常常用,但在 MySQL 和 PostgreSQL 中通常使用 CREATE TABLE ... AS SELECT 语句。

    SQL INSERT INTO SELECT 语句

    SQL INSERT INTO SELECT 语句从一个表复制数据,然后把数据插入到一个已存在的表中。目标表中任何已存在的行都不会受影响。

SQL INSERT INTO SELECT 语法

我们可以从一个表中复制所有的列插入到另一个已存在的表中:

INSERT INTO table2
SELECT * FROM table1;

或者我们可以只复制指定的列插入到另一个已存在的表中:

INSERT INTO table2
(column_name(s))
SELECT column_name(s)
FROM table1;
  • 两者的主要区别为: select into from 要求目标表不存在,因为在插入时会自动创建;insert into select from 要求目标表存在。

    SQL CREATE DATABASE 语句

    SQL CREATE DATABASE 语句用于创建数据库。
      CREATE DATABASE dbname;
    
    

    SQL CREATE TABLE 语句

    CREATE TABLE 语句用于创建数据库中的表,表由行和列组成,每个表都必须有个表名。
    CREATE TABLE table_name
      (
      column_name1 data_type(size),
      column_name2 data_type(size),
      column_name3 data_type(size),
      ....
      );
    
    

    SQL 约束(Constraints)

    SQL 约束用于规定表中的数据规则。

    SQL CREATE TABLE + CONSTRAINT 语法:

      CREATE TABLE table_name
      (
      column_name1 data_type(size) constraint_name,
      column_name2 data_type(size) constraint_name,
      column_name3 data_type(size) constraint_name,
      ....
      );
    
    在 SQL 中,我们有如下约束:
  • NOT NULL - 指示某列不能存储 NULL 值。
  • UNIQUE - 保证某列的每行必须有唯一的值。
  • PRIMARY KEY - NOT NULL 和 UNIQUE 的结合。确保某列(或两个列多个列的结合)有唯一标识,有助于更容易更快速地找到表中的一个特定的记录。
  • FOREIGN KEY - 保证一个表中的数据匹配另一个表中的值的参照完整性。
  • CHECK - 保证列中的值符合指定的条件。
  • DEFAULT - 规定没有给列赋值时的默认值。
  • INDEX - 用于快速访问数据库表中的数据。