1. WHERE子句中的”<>”
<>
运算符表示不等于,是SQL的标准符号。!=
也是表示不等于,在大部分关系型数据库中都适用。
表示不等于也可以用关键字NOT
。例如WHERE id <> 5
等价于WHERE NOT id = 5
。
2. 关于NULL值的查询
SQL 中,NULL
用于表示缺失的值。数据表中的 NULL
值表示该值所处的字段为空。NULL
值与 0 或者包含空白(spaces)的字段是不同的。
在SQL中查询某个字段是否为空值,使用比较运算符(例如=,<或<>)来测试NULL
值是不可行的。应当使用关键字IS NULL
或IS NOT NULL
,例如:SELECT * FROM t_test WHERE test_id IS NOT NULL
3. 关于JOIN的查询
JOIN
用于把来自两个或多个表的行结合起来,即所谓联表查询。
JOIN
与INNER JOIN
等效,表示内部连接:如果表中有至少一个匹配,则返回行;否则返回NULLLEFT JOIN
,左连接:返回左表(表1)中的所有行,即使在右表(表2)中没有匹配RIGHT JOIN
,右连接:返回右表(table2)的所有行,即使在左表(table1)上没有匹配FULL OUTER JOIN
,完整外部连接:当左(表1)或右(表2)表记录至少有一条匹配时,将返回所有记录。相当于LEFT JOIN
和RIGHT JOIN
的结合版
JOIN
的语法为(其余的也类似):1
2
3SELECT column_name(s)
FROM table1
JOIN table2 ON table1.column_name = table2.column_name;
SELF JOIN
自连接,表示自己连接自己,有时候确实会有这样的需求,会利用某表的数据在同一表中进行数据筛选,语法与上面的JOIN
语法有差别:1
2
3SELECT column_name(s)
FROM table1 T1, table1 T2
WHERE condition;
4. SELECT INTO 和 INSERT INTO SELECT
SELECT INTO
从一个表中复制数据,然后将数据插入到另一个新表中。
语法为:1
2
3
4
5SELECT column_name(s)
INTO newtable [IN externaldb]
FROM table1;INSERT INTO SELECT
从表中复制数据,并将数据插入现有的表中。
语法为:1
2
3
4
5
6INSERT INTO table2
(column_name(s))
SELECT column_name(s)
FROM table1;
5. HAVING子句
HAVING
子句使你能够指定过滤条件,从而控制查询结果中哪些组可以出现在最终结果里面。
WHERE
子句对被选择的列施加条件,而 HAVING
子句则对 GROUP BY
子句所产生的组施加条件。
HAVING子句在SELECT中的位置1
2
3
4
5
6SELECT
FROM
WHERE
GROUP BY
HAVING
ORDER BY
6. NOT AND OR 的运算优先级
当查询的条件语句中同时含有NOT
、AND
、OR
时,一定要注意其中的运算顺序。
关系型运算符优先级高到低为:NOT >AND >OR,运算顺序是从右往左
如果WHERE
后面有OR
条件的话,则OR
自动会把左右的查询条件分开。请使用括号进行区分。
举例:1
2SELECT * FROM dbo.City
WHERE ParentId = 2 OR Id = 2 AND Name='广州'
等效于1
2SELECT * FROM dbo.City
WHERE ParentId = 2 OR (Id = 2 AND Name='广州')
- 本文参考了 w3cschool sql教程
Copyright © 2018, GDUT CSCW back-end Kanarien, All Rights Reserved