SQL
- 基础关键字使用
- select
- where
- and & or
- order by
- insert into
- update
- delete
- 高级教程_select
- TOP 搜索
- like 模式搜索_select-where
- 通配符_select-where-like
- in 操作符 _select-where
- between 操作符_select-where
- 别名的使用
- join ***
- inner join
- left join
- right join
- full outer join
- union**
- select into**
基础关键字使用
select
SELECT column_name,column_name FROM table_name;
SELECT * FROM table_name;
## distinct 关键字表示返回唯一不同值
SELECT DISTINCT column_name,column_nameFROM table_name;
where
where 用于筛选过滤
SELECT column_name,column_name FROM table_name WHERE column_name operator value;
and & or
用于过滤,and取交集,or取并集
SELECT * FROM Websites WHERE country='CN' AND alexa > 50;
#and和or 同时使用
SELECT * FROM Websites WHERE alexa > 15 AND (country='CN' OR country='USA');
order by
用于排序
ASC:
SELECT column_name,column_name FROM table_name ORDER BY column_name,column_name ASC|DESC;
order by A ,B desc
注意:
排序优先级,先按照第一个列名排序
默认排序按照升序排列 ASC ,可以不写
order by 多列,可以不同列不同排序方式
insert into
INSERT INTO table_name VALUES (value1,value2,value3,...);
INSERT INTO table_name (column1,column2,column3,...) VALUES (value1,value2,value3,...);
update
update 表名 + set修改内容 + 过滤条件where
UPDATE table_name SET column1=value1,column2=value2,...WHERE some_column=some_value;
delete
DELETE FROM table_name WHERE some_column=some_value;
高级教程_select
TOP 搜索
SELECT TOP 子句用于规定要返回的记录的数目。
#SQL Server / MS Access 语法
SELECT TOP number|percent column_name(s) FROM table_name;
#MySQL语法
SELECT column_name(s) FROM table_name LIMIT number;
like 模式搜索_select-where
用于在 WHERE 子句中搜索列中的指定模式。
取反可以使用 not like。
SELECT column_name(s) FROM table_name
WHERE column_name LIKE pattern;
通配符_select-where-like
% 替代 0 个或多个字符
_ 替代一个字符
[charlist] 字符列中的任何单一字符
[^charlist]或 [!charlist] 不在字符列中的任何单一字符
MySQL 中使用 REGEXP 或 NOT REGEXP 运算符 (或 RLIKE 和 NOT RLIKE) 来操作正则表达式。
#选取 name 以 "G"、"F" 或 "s" 开始的
SELECT * FROM Websites WHERE name REGEXP '^[GFs]';
#选取 name 以 A 到 H 字母开头
SELECT * FROM Websites WHERE name REGEXP '^[A-H]';
#选取 name 不以 A 到 H 字母开头的
SELECT * FROM Websites
WHERE name REGEXP '^[^A-H]';
in 操作符 _select-where
SELECT column_name(s) FROM table_name
WHERE column_name IN (value1,value2,...);
between 操作符_select-where
SELECT column_name(s) FROM table_name
WHERE column_name BETWEEN value1 AND value2;
别名的使用
在查询中涉及超过一个表
在查询中使用了函数
列名称很长或者可读性差
需要把两个列或者多个列结合在一起
#列的别名
SELECT column_name AS alias_name FROM table_name;
#表的别名
SELECT column_name(s) FROM table_name AS alias_name;
实例
join ***
个人理解:
join关键字的主要作用是选择不同表的字段连接起来展示
主要通过on关键字将不同表联系起来
第一个出现为左表,第二个为右表,按照这个顺序
left join 以左表的关键字为基准,若右表没有匹配到内容则用null填充。right join 一样
inner join ,join 和 full join 效果是差不多的,左表或右表没有匹配内容则填充为null
关键字:join - on
SQL JOIN 子句用于把来自两个或多个表的行结合起来,基于这些表之间的共同字段。
演示数据库
表名:Websites,access_log
字段:id,name,count,date
两个表相同的字段:id = site_id
INNER JOIN:如果表中有至少一个匹配,则返回行
LEFT JOIN:即使右表中没有匹配,也从左表返回所有的行
RIGHT JOIN:即使左表中没有匹配,也从右表返回所有的行
FULL JOIN:只要其中一个表中存在匹配,则返回行
inner join
SELECT column_name(s)
FROM table1
INNER JOIN table2
ON table1.column_name=table2.column_name;
#或
SELECT column_name(s)
FROM table1
JOIN table2
ON table1.column_name=table2.column_name;
inner join 等同于 join
注释:INNER JOIN 关键字在表中存在至少一个匹配时返回行。如果 “Websites” 表中的行在 “access_log” 中没有匹配,则不会列出这些行。
left join
LEFT JOIN 关键字从左表(table1)返回所有的行,即使右表(table2)中没有匹配。如果右表中没有匹配,则结果为 NULL。
注释:在某些数据库中,LEFT JOIN 称为 LEFT OUTER JOIN。
SELECT column_name(s)
FROM table1
LEFT JOIN table2
ON table1.column_name=table2.column_name;
#或:
SELECT column_name(s)
FROM table1
LEFT OUTER JOIN table2
ON table1.column_name=table2.column_name;
right join
RIGHT JOIN 关键字从右表(table2)返回所有的行,即使左表(table1)中没有匹配。如果左表中没有匹配,则结果为 NULL。
注释:在某些数据库中,RIGHT JOIN 称为 RIGHT OUTER JOIN。
SELECT column_name(s)
FROM table1
RIGHT JOIN table2
ON table1.column_name=table2.column_name;
#或:
SELECT column_name(s)
FROM table1
RIGHT OUTER JOIN table2
ON table1.column_name=table2.column_name;
full outer join
FULL OUTER JOIN 关键字只要左表(table1)和右表(table2)其中一个表中存在匹配,则返回行.
FULL OUTER JOIN 关键字结合了 LEFT JOIN 和 RIGHT JOIN 的结果。
如果左表或右表没有数据,则填充null
注释:MySQL中不支持 FULL OUTER JOIN
union**
个人理解:
union合并两个select 语句的结果,上下合并。因此两个select语句选择的列数量相同,数据类型相同
对比join,join语句是左右连接
注释:默认地,UNION 操作符选取不同的值(去重)。如果允许重复的值,请使用 UNION ALL。
注释:UNION 结果集中的列名总是等于 UNION 中第一个 SELECT 语句中的列名。
#SQL UNION 语法
SELECT column_name(s) FROM table1
UNION
SELECT column_name(s) FROM table2;
#SQL UNION ALL 语法
SELECT column_name(s) FROM table1
UNION ALL
SELECT column_name(s) FROM table2;
select into**
通过 SQL,您可以从一个表复制信息到另一个表。
SELECT INTO 语句从一个表复制数据,然后把数据插入到另一个新表中。
注意:MySQL不支持,但是支持INSERT INTO … SELECT 。
SELECT *
INTO newtable [IN externaldb]
FROM table1;
SELECT column_name(s)
INTO newtable [IN externaldb]
FROM table1;
#示例
SELECT Websites.name, access_log.count, access_log.date
INTO WebsitesBackup2016
FROM Websites
LEFT JOIN access_log
ON Websites.id=access_log.site_id;
新表将会使用 SELECT 语句中定义的列名称和类型进行创建。可以使用 AS 子句来应用新名称。
更多推荐
SQL_菜鸟教程_select
发布评论