SQL(Structured Query Language)是用于管理和处理关系数据库的标准语言,广泛应用于各类数据库系统,如MySQL、Oracle、SQL Server等。本篇文章将详细讲解最常用的SQL查询语句,涵盖简单查询、联合查询和连接查询。
一、简单查询
1. 查询列和表:`SELECT`语句用于从数据库中提取数据,基本格式为`SELECT column_name FROM table_name`。例如,`SELECT nickname, email FROM testtable`将显示`testtable`表中`nickname`和`email`列的所有数据。
2. `ALL`与`DISTINCT`:`ALL`用于显示所有行,`DISTINCT`则去除重复行。默认情况下,`SELECT`操作会显示所有行,除非指定了`DISTINCT`。
3. 限制返回行数:`TOP`关键字用于限制返回的行数,如`SELECT TOP 2 * FROM testtable`将返回`testtable`的前两行数据。`TOP 20 PERCENT`则表示返回总行数的20%。
二、FROM子句
FROM子句用于指定查询涉及的表或视图,例如`SELECT * FROM usertable`。多表查询时,可以使用逗号分隔多个表,或者通过别名简化语法,如`SELECT username, b.cityid FROM usertable, citytable AS b`。
三、WHERE子句
WHERE子句用于设置查询条件,支持各种比较和逻辑运算符。例如,`SELECT * FROM usertable WHERE age > 20`将返回年龄大于20岁的用户。逻辑运算符的优先级为`NOT` > `AND` > `OR`。
四、ORDER BY子句
`ORDER BY`用于对查询结果进行排序,可以指定升序(`ASC`)或降序(`DESC`)。例如,`SELECT * FROM usertable ORDER BY age DESC, userid ASC`将首先按年龄降序排列,相同年龄的用户再按userid升序排列。
五、联合查询
联合查询(UNION)用于合并两个或更多`SELECT`语句的结果集。`UNION ALL`会包含所有行,而`UNION`会移除重复行。例如:
```sql
SELECT column FROM table1
UNION
SELECT column FROM table2
```
六、连接查询
连接查询允许在多个表之间建立联系,以获取跨表的数据。SQL-92标准定义了三种连接类型:
1. 内连接(INNER JOIN):只返回满足连接条件的行。例如:
```sql
SELECT p1.pub_id, p2.pub_id, p1.pr_info
FROM pub_info AS p1
INNER JOIN pub_info AS p2
ON DATALENGTH(p1.pr_info) = DATALENGTH(p2.pr_info)
```
2. 外连接(OUTER JOIN):分为左连接(LEFT JOIN)、右连接(RIGHT JOIN)和全外连接(FULL OUTER JOIN)。外连接会返回所有满足条件的行,以及连接列不匹配的另一侧的行。例如:
```sql
SELECT a.username, b.username
FROM city AS a
FULL OUTER JOIN user AS b
ON a.username = b.username
```
3. 交叉连接(CROSS JOIN):返回所有可能的行组合,不带任何条件。例如:
```sql
SELECT a.*, b.*
FROM table1 AS a
CROSS JOIN table2 AS b
```
通过熟练掌握这些基本的SQL查询语句,开发者能够有效地从数据库中获取、筛选、排序和组合数据,以满足各种业务需求。在实际应用中,还可以结合子查询、聚合函数、分组(GROUP BY)等更高级的特性,实现更复杂的查询逻辑。