SQL--查询

  • 1. SQL的应用
  • 2. 插入查询(INSERT INTO)
  • 3. 选择查询(SELECT)
  • 4. SQL 语法
  • 4.1 where
  • 4.2 AND 和 OR
  • 4.3 LIKE
  • 4.4 TOP
  • 4.5 ORDER BY
  • 4.6 GROUP BY
  • 4.7 DISTINCT
  • 参考


1. SQL的应用

SQL是结构化查询语言,它是一种用于存储,处理和检索关系数据库中存储的数据的计算机语言。

SQL是关系数据库系统的标准语言。所有关系数据库管理系统(RDMS),例如MySQL,MS Access,Oracle,Sybase,Informix,Postgres和SQL Server,都使用SQL作为其标准数据库语言。

SQL的应用:

  • 允许用户访问关系数据库管理系统中的数据。
  • 允许用户描述数据。
  • 允许用户定义数据库中的数据并处理该数据。
  • 允许使用SQL模块,库和预编译器嵌入其他语言。
  • 允许用户创建和删除数据库和表。
  • 允许用户在数据库中创建视图,存储过程,函数。
  • 允许用户设置对表,过程和视图的权限。

2. 插入查询(INSERT INTO)

SQL INSERT INTO语句用于将新的数据行添加到数据库中。

语法:

INSERT INTO TABLE_NAME (column1, column2, column3,...columnN)  
VALUES (value1, value2, value3,...valueN);

如果要为表的所有列添加值,则可能不需要在SQL查询中指定列名称。但是,请确保值的顺序与表中各列的顺序相同。

INSERT INTO TABLE_NAME VALUES (value1,value2,value3,...valueN);

例1:
以下语句将在CUSTOMERS表中创建六个记录。

INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (1, 'Ramesh', 32, 'Ahmedabad', 2000.00 );

INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (2, 'Khilan', 25, 'Delhi', 1500.00 );

INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (3, 'kaushik', 23, 'Kota', 2000.00 );

INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (4, 'Chaitali', 25, 'Mumbai', 6500.00 );

INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (5, 'Hardik', 27, 'Bhopal', 8500.00 );

INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (6, 'Komal', 22, 'MP', 4500.00 );

或者使用第二种语法在CUSTOMERS表中创建一条记录,如下所示。

INSERT INTO CUSTOMERS 
VALUES (7, 'Muffy', 24, 'Indore', 10000.00 );

上述所有语句将在CUSTOMERS表中产生以下记录,如下所示。

ID

NAME

AGE

ADDRESS

SALARY

1

Ramesh

32

Ahmedabad

2000.00

2

Khilan

25

Delhi

1500.00

3

kaushik

23

Kota

2000.00

4

Chaitali

25

Mumbai

6500.00

5

Hardik

27

Bhopal

8500.00

6

Komal

22

MP

4500.00

7

Muffy

24

Indore

10000.00

3. 选择查询(SELECT)

SQL SELECT语句用于从数据库表中获取数据,该数据库表以结果表的形式返回该数据。这些结果表称为结果集。

语法:
SELECT语句的基本语法如下:

SELECT column1, column2, columnN FROM table_name;

在这里,column1,column2 …是要获取其值的表的字段。如果要获取该字段中所有可用的字段,则可以使用以下语法。

SELECT * FROM table_name;

例2:
考虑具有以下记录的CUSTOMERS表:

ID

NAME

AGE

ADDRESS

SALARY

1

Ramesh

32

Ahmedabad

2000.00

2

Khilan

25

Delhi

1500.00

3

kaushik

23

Kota

2000.00

4

Chaitali

25

Mumbai

6500.00

5

Hardik

27

Bhopal

8500.00

6

Komal

22

MP

4500.00

7

Muffy

24

Indore

10000.00

获取CUSTOMERS表中可用客户的ID,名称和薪水字段。

//SQL
SQL> SELECT ID, NAME, SALARY FROM CUSTOMERS;

返回的结果为:

ID

NAME

SALARY

1

Ramesh

2000.00

2

Khilan

1500.00

3

kaushik

2000.00

4

Chaitali

6500.00

5

Hardik

8500.00

6

Komal

4500.00

7

Muffy

10000.00

要获取表中所有字段,应使用以下语句:

SQL> SELECT * FROM CUSTOMERS;

4. SQL 语法

4.1 where

SQL WHERE子句用于在从单个表或通过与多个表联接中获取数据时指定条件。如果满足给定条件,则只有它从表中返回特定值。可以使用WHERE子句来过滤记录并仅提取必要的记录。
WHERE子句不仅在SELECT语句中使用,还在UPDATE,DELETE语句等中使用。

语法:
带有WHERE子句的SELECT语句的基本语法如下所示。(可以使用比较或逻辑运算符(例如>,<,=,LIKE,NOT等)指定条件)

SELECT column1, column2, columnN 
FROM table_name
WHERE [condition]

例3.1
考虑具有以下记录的CUSTOMERS表:

ID

NAME

AGE

ADDRESS

SALARY

1

Ramesh

32

Ahmedabad

2000.00

2

Khilan

25

Delhi

1500.00

3

kaushik

23

Kota

2000.00

4

Chaitali

25

Mumbai

6500.00

5

Hardik

27

Bhopal

8500.00

6

Komal

22

MP

4500.00

7

Muffy

24

Indore

10000.00

将从薪水大于2000的CUSTOMERS表中获取ID,名称和薪水字段:

SQL> SELECT ID, NAME, SALARY 
FROM CUSTOMERS
WHERE SALARY > 2000;

返回的结果集:

ID

NAME

SALARY

4

Chaitali

6500.00

5

Hardik

8500.00

6

Komal

4500.00

7

Muffy

10000.00

将从CUSTOMERS表中获取名称为Hardik的客户的ID,Name和Salary字段。在此,重要的是要注意,所有字符串都应在单引号(’ ')中给出。但是,如上例所示,数值应不带引号。

SQL> SELECT ID, NAME, SALARY 
FROM CUSTOMERS
WHERE NAME = 'Hardik';

产生的结果集:

ID

NAME

SALARY

5

Hardik

8500.00

4.2 AND 和 OR

SQL AND&OR运算符用于组合多个条件以缩小SQL语句中的数据。这两个运算符称为合取运算符。这些运算符提供了在同一SQL语句中与不同运算符进行多次比较的方法。

AND语法
带WHERE子句的AND运算符的基本语法如下:

SELECT column1, column2, columnN 
FROM table_name
WHERE [condition1] AND [condition2]...AND [conditionN];

OR语法
带WHERE子句的OR运算符的基本语法如下:

SELECT column1, column2, columnN 
FROM table_name
WHERE [condition1] OR [condition2]...OR [conditionN]

4.3 LIKE

SQL LIKE子句用于使用通配符运算符将值与相似值进行比较。与LIKE运算符一起使用两个通配符。

  • 百分号(%)
  • 下划线(_)

百分号代表零个,一个或多个字符。下划线表示单个数字或字符。这些符号可以组合使用。

语法

SELECT FROM table_name
WHERE column LIKE 'XXXX%'
//在某一个column查找以XXXX开头的值
or 
SELECT FROM table_name
WHERE column LIKE '%XXXX%'
//在某一个column查找在任何位置具有XXXX的值
or
SELECT FROM table_name
WHERE column LIKE 'XXXX_'
//在某一个column查找以XXXX开头的值
or
SELECT FROM table_name
WHERE column LIKE '_XX%'
//在某一个column查找第二三位置为XX的任何值
or
SELECT FROM table_name
WHERE column LIKE 'X_%_%'
//在某一个column查找以X开头且长度至少为3个字符的任何值

可以使用AND或OR运算符组合N个条件。在此,XXXX可以是任何数字或字符串值。
例3.3
考虑具有如下所示记录的CUSTOMERS表。

ID

NAME

AGE

ADDRESS

SALARY

1

Ramesh

32

Ahmedabad

2000.00

2

Khilan

25

Delhi

1500.00

3

kaushik

23

Kota

2000.00

4

Chaitali

25

Mumbai

6500.00

5

Hardik

27

Bhopal

8500.00

6

Komal

22

MP

4500.00

7

Muffy

24

Indore

10000.00

显示CUSTOMERS表中的所有记录,其中SALARY以200开头。

SQL> SELECT * FROM CUSTOMERS
WHERE SALARY LIKE '200%';

产生的结果集是:

ID

NAME

AGE

ADDRESS

SALARY

1

Ramesh

32

Ahmedabad

2000.00

3

kaushik

23

Kota

2000.00

4.4 TOP

SQL TOP子句用于从表中获取TOP N个数字或百分之X的记录。

注 : 所有数据库都不支持TOP子句。例如,MySQL支持LIMIT子句来获取有限数量的记录,而Oracle使用ROWNUM命令来获取有限数量的记录。
语法
带有SELECT语句的TOP子句的基本语法如下。

SELECT TOP number|percent column_name(s)
FROM table_name
WHERE [condition]

例3.4
考虑具有以下记录的CUSTOMERS表。

ID

NAME

AGE

ADDRESS

SALARY

1

Ramesh

32

Ahmedabad

2000.00

2

Khilan

25

Delhi

1500.00

3

kaushik

23

Kota

2000.00

4

Chaitali

25

Mumbai

6500.00

5

Hardik

27

Bhopal

8500.00

6

Komal

22

MP

4500.00

7

Muffy

24

Indore

10000.00

以下查询是SQL Server上的示例,它将从CUSTOMERS表中获取前3条记录。

SQL> SELECT TOP 3 * FROM CUSTOMERS;

产生的结果集:

ID

NAME

AGE

ADDRESS

SALARY

1

Ramesh

32

Ahmedabad

2000.00

2

Khilan

25

Delhi

1500.00

3

kaushik

23

Kota

2000.00

MySQL数据库等效示例:

SQL> SELECT * FROM CUSTOMERS
LIMIT 3;

Oracle数据库等效示例:

SQL> SELECT * FROM CUSTOMERS
WHERE ROWNUM <= 3;

4.5 ORDER BY

SQL ORDER BY子句用于根据一列或多列对数据进行升序或降序排序。默认情况下,某些数据库以升序对查询结果进行排序。

语法
可以在ORDER BY子句中使用多个列。确保用于排序该列的任何列均应在column-list中。

SELECT column-list 
FROM table_name 
[WHERE condition] 
[ORDER BY column1, column2, .. columnN] [ASC | DESC];

例3.5
考虑具有以下记录的CUSTOMERS表:

ID

NAME

AGE

ADDRESS

SALARY

1

Ramesh

32

Ahmedabad

2000.00

2

Khilan

25

Delhi

1500.00

3

kaushik

23

Kota

2000.00

4

Chaitali

25

Mumbai

6500.00

5

Hardik

27

Bhopal

8500.00

6

Komal

22

MP

4500.00

7

Muffy

24

Indore

10000.00

以下代码块有一个排序示例:

//将按NAME和SALARY的升序对结果进行排序
SQL> SELECT * FROM CUSTOMERS
   ORDER BY NAME, SALARY;
//将按NAME的降序对结果进行排序   
SQL> SELECT * FROM CUSTOMERS
   ORDER BY NAME DESC;

4.6 GROUP BY

SQL GROUP BY子句与SELECT语句配合使用,以将相同的数据分组。该GROUP BY子句在SELECT语句中的WHERE子句之后,并在ORDER BY子句之前。

语法

SELECT column1, column2
FROM table_name
WHERE [ conditions ]
GROUP BY column1, column2
ORDER BY column1, column2

例3.6
考虑具有以下记录的CUSTOMERS表:

ID

NAME

AGE

ADDRESS

SALARY

1

Ramesh

32

Ahmedabad

2000.00

2

Khilan

25

Delhi

1500.00

3

kaushik

23

Kota

2000.00

4

Chaitali

25

Mumbai

6500.00

5

Hardik

27

Bhopal

8500.00

6

Komal

22

MP

4500.00

7

Muffy

24

Indore

10000.00

如果您想知道每个客户的工资总额,那么GROUP BY查询将如下所示。

SQL> SELECT NAME, SUM(SALARY) FROM CUSTOMERS
   GROUP BY NAME;

这将产生以下结果:

NAME

SUM(SALARY)

Chaitali

6500.00

Hardik

8500.00

kaushik

2000.00

Khilan

1500.00

Komal

4500.00

Muffy

10000.00

Ramesh

2000.00

当NAME出现重复项时,对SALARY进行求和。

4.7 DISTINCT

SQL DISTINCT关键字与SELECT语句结合使用,以消除所有重复的记录并仅获取唯一的记录。

当一个表中有多个重复记录时,可能会出现这种情况。在获取此类记录时,更有意义的是仅获取那些唯一记录,而不是获取重复记录。

语法

SELECT DISTINCT column1, column2,.....columnN 
FROM table_name
WHERE [condition]

例3.7
考虑具有以下记录的CUSTOMERS表:

ID

NAME

AGE

ADDRESS

SALARY

1

Ramesh

32

Ahmedabad

2000.00

2

Khilan

25

Delhi

1500.00

3

kaushik

23

Kota

2000.00

4

Chaitali

25

Mumbai

6500.00

5

Hardik

27

Bhopal

8500.00

6

Komal

22

MP

4500.00

7

Muffy

24

Indore

10000.00

在SELECT查询中使用DISTINCT关键字,

SQL> SELECT DISTINCT SALARY FROM CUSTOMERS
   ORDER BY SALARY;

产生的结果如下:

SALARY

1500.00

2000.00

4500.00

6500.00

8500.00

10000.00

参考

https://www.tutorialspoint.com/sql/index.htm