文章目录
一、单表查询
1.select 定义语句
SELECT [ ALL | DISTINCT ] 输出列表达式…
[ FROM 表名1 [ , 表名2 ]… ]
[WHERE 条件 ]
[ORDER BY 列名 表达式 列编号 [ASC | DESC],…
[ HAVING 条件 ]
[ORDER BY 列名 表达式 列编号 [ ASC| DESC,… ]
[LIMIT [偏移量,] 行数 行数 OFFSET 偏移量]
1.1选择指定的列
SELECT 表达式
1.2定义列别名
SELECT 列名 [ AS ] 别名
1.3替换查询结果中的数据
CASE
WHEN 条件1 THEN 表达式1
WHEN 条件2 THEN 表达式2
…
ELSE 表达式n
END
1.4计算列值
例子:对sell表中已发货的记录计算订购金额(订购金额=订购册数*订购单价),并显示图书编号和订购金额。代码如下:
SELECT 图书编号,ROUND(订购册数*订购单价,2) AS 订购金额
FROM sell
WHERE 是否发货='已发货';
1.5消除结果集中的重复行
SELECT DISTINCT 列名1 ,列名2 …
2.WHERE子句
2.1比较运算
表达式 { = | < | <= |>|>=|<=>|<>|!=} 表达式
2.2逻辑运算
逻辑运算可以将多个判定运算的结果通过逻辑运算符(AND、OR、XOR 和 NOT)组成更为复杂的查询条件。
例子:查询book表中清华大学出版社、北京大学出版社出版的价格大于等于35元的书。代码如下:
SELECT*FROM book
WHERE (出版社='清华大学出版社'OR出版社='北京大学出版社')
AND 单价>=35;
2.3模式匹配
表达式 [NOT] LIKE 表达式
2.4范围匹配
表达式 [NOT] BETWEEN 表达式1 AND 表达式2
2.5空值比较
表达式 IS [NOT ] NULL
二、多表查询
1.FROM子句
FROM 表名1 AS 别名1 表名2 AS 别名2
JOIN 子句
2.多表连接
(1)全连接:是指将每个表的每行都与其他表中的每行交叉,以产生所有可能的组合,列包含了所有表中出现的列,也就是笛卡儿积。
(2)内连接:全连接产生的表在大多数情况下都没有意义。在这样的情形下,通常要设定条件来得到结果集减少且有意义的表,这样的连接即为内连接。如果设定的条件是等值条件,则也叫等值连接。
(3)外连接:包括左外连接(LEFT OUTER JOIN)和右外连接(RIGHT OUTER JOIN )两种。
左外连接:结果表中除了匹配行外,还包括左表有但右表中不匹配的行,对于这样的行,从右表中选择的列被设置为NULL。
右外连接:结果表中除了匹配行外,还包括右表有但左表中不匹配的行,对于这样的行,从左表中选择的列被设置为NULL。
3.JOIN连接
表名1 INNER JOIN 表名2
表名1 LEFT | RIGHT | OUTER JOIN 表名2
ON 连接条件 | USING (列名)
4.子查询
4.1IN子查询
表达式 [NOT] IN (子查询)
4.2比较子查询
表达式 {<|<=|=|>|>=|!=|<>} {ALL | SOME | ANY}
表达式:与子查询结果集进行比较的表达式 ALL|SOME|ANY:说明比较运算的限制 如果子查询的结果集只返回一行数据,可以通过比较运算符直接比较;如果子查询的结果集返回多行数据,则需要用{ALL|SOME|ANY }来限定。 ALL指定表达式要与子查询结果集中的每个值都进行比较,当表达式的每个值都满足比较的关系时,才返回TRUE,否则返回FALSE。 SOME 和 ANY 是同义词,表示表达式只要与子查询结果集中的某个值满足比较的关系,就返回TRUE,否则返回 FALSE。
4.3EXISTS子查询
[NOT] EXISTS
5.联合查询
SELECT 语句1 UNION [UNION选项] SELECT语句2;
UNION 选项:分为 ALL和 DISTINCT,联合查询时默认为DISTINCT,去掉结果集中的重复行;如果要保留结果集中的所有行,必须指定 ALL。