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