注意事项

  1. 在进行查询的时候,一定要想到 查询结果为空 有重复数据 数据中含有NULL !

SQL 命令基本结构

1
2
3
4
5
6
7
8
select <select_list>
from <table_name>
<join_type> join <join_table> on <join_condition>
where <where_condition> -- 对笛卡尔积后的表进行过滤
group by <group_by_list> -- 对制定的列的现有组合方式为依据进行分组,非分组依据的列,需要使用聚合函数来显示
having <having_condition> -- 对分组后的数据进行过滤,此时可以使用列别名
order by <order_by_condition> -- 对结果进行排序
limit <limt_number> -- 对结果进行分页,只看部分结果

注释

1
2
3
单行注释:# 注释文字(MySQL特有的方式)
单行注释:-- 注释文字(--后面必须包含一个空格。)
多行注释:/* 注释文字 */

关键词冲突

当名字、数据和 Mysql 关键词冲突的时候,可以使用 `` 来包裹它(着重号),比如:

1
SELECT * FROM `user` # user 是关键词 

导入数据库文件

在导入 .sql 文件:

1
source D:/downlaod/websites.sql;

别名 AS

as 是 SQL 语句中的别名,用来给列或者表起一个新的名字。

列的别名

比如把两个列相加产生的新数据重新命名为 12sum:

1
select column1+column2 as 12sum from "table";

在比如把合并的几个字符串产生的新字符串命名为 12add:

1
select comcat(column1,column2) as 12add from "table";

需要知道的是,因为 where 的计算优先级高于 select,所以在执行 where 的时候 还没有生效,因此无法在 where 中使用设置的别名。如果需要对别名的列进行过滤,则在 where 后面用 having 语句。having 优先级低于 select,此时已经生成了别名列,就可以使用别名了。

表的别名

可以给表起一个别名:

1
2
3
SELECT emp.last_name, dep.department_name
FROM employees AS emp, departments AS dep
WHERE emp.department_id = dep.department_id;

但是需要记住的是,from 语句的执行优先级是最高的,所以表名在最开始就覆盖为了别名,后面就只能使用别名。

数据去重 distinct

在 SELECT 后和列名前添加 DISTINCT 关键词,会对后面所有 列名的组合 进行去重。

1
2
SELECT DISTINCT department_id,salary 
FROM employees;

合并查询结果 UNION

1
2
3
SELECT column,... FROM table1
UNION [ALL]
SELECT column,... FROM table2

将两个 SELECT 返回的查询结果进行合并为一个结果。合并的两个查询结果对应的列数和数据类型必须相同。可以用来实现 FULL JOIN 的效果。

  • UNION 对结果进行去重。
  • UNION ALL 对结果不去重(建议考虑使用,效率高!)