SQL语句
SQL SELECT 语句
SQL SELECT
SELECT column_name,column_name FROM table_name
与
SELECT * FROM table_name
SQL SELECT DISTINCT
在表中,一个列可能会包含多个重复值,有时希望仅仅列出不同(distinct)的值
DISTINCT关键词用于返回唯一不同的值
SELECT DISTINCT column_name,column_name FROM table_name
SQL WHERE语句
WHERE 子句用于过滤记录
SQL WHERE
SELECT column_name,column_name FROM table_name WHERE column_name operator value;
WHERE子句中的运算符(operator)
运算符 |
描述 |
= |
等于 |
<> |
不等于 |
> |
大于 |
< |
小于 |
>= |
大于等于 |
<= |
小于等于 |
BETWEEN |
在某个范围内 |
LIKE |
搜索某种模式 |
IN |
指定针对某个列的多个可能值 |
文本字段 vs 数值字段
SQL使用单引号来环绕文本值(大部分数据库系统也接受双引号)
如果是数值字段,请不要使用引号
SELECT * FROM Websites WHERE country='CN'
SELECT * FROM Websites WHERE id=1
SQL AND & OR 运算符
SELECT * FROM Websites WHERE country='CN' AND alexa>50
SQL ORDER BY语句
ORDER BY关键字用于对结果集按照一列或者多列进行排序
ORDER BY 关键字默认按照升序对记录进行排序。如果需要按照降序对记录进行排序,可以使用DESC关键字
SQL ORDER BY
SELECT column_name,column_name FROM table_name ORDER BY column_name, column_name ASC|DESC;
ORDER BY多列的时候,先按照第一个column name排序,再按照第二个column name排序
SQL INSERT INTO语句
INSERT INTO语句用于向表中插入新记录
SQL INSERT INTO
INSERT INTO语句可以有两种编码形式
第一种形式无需指定要插入数据的列名,只需提供被插入的值即可:
INSERT INTO table_name VALUES (value1,value2,value3,…)
第二种形式需要指定列名及被插入的值:
INSERT INTO table_name (column1,column2,column3,…) VALUES (value1,value2,value3,…)
SQL UPDATE语句
UPDATE 语句用于更新表中已存在的记录。
SQL UPDATE
UPDATE table_name
SET column1=value1,column2=value2,...
WHERE some_column=some_value;
注意
在更新记录时要格外小心!在上面的实例中,如果我们省略了 WHERE 子句,如下所示:
UPDATE Websites
SET alexa='5000', country='USA'
执行以上代码会将 Websites 表中所有数据的 alexa 改为 5000,country 改为 USA。
执行没有 WHERE 子句的 UPDATE 要慎重,再慎重。
SQL DELETE语句
DELETE 语句用于删除表中的行。
SQL DELETE
DELETE FROM table_name
WHERE some_column=some_value;
注意
WHERE 子句规定哪条记录或者哪些记录需要删除。如果您省略了 WHERE 子句,所有的记录都将被删除!
SQL LIMIT子句
MySQL 支持 LIMIT 语句来选取指定的条数数据
SQL LIMIT
SELECT column_name(s)
FROM table_name
LIMIT number;
SQL LIKE操作
LIKE 操作符用于在 WHERE 子句中搜索列中的指定模式。
SQL LIKE
SELECT column_name(s)
FROM table_name
WHERE column_name LIKE pattern;
实例
SELECT * FROM Websites
WHERE name LIKE 'G%';
"%" 符号用于在模式的前后定义通配符(默认字母)。
通过使用 NOT 关键字,您可以选取不匹配模式的记录。
下面的 SQL 语句选取 name 不包含模式 "oo" 的所有客户:
SELECT * FROM Websites
WHERE name NOT LIKE '%oo%';
SQL 通配符
在 SQL 中,通配符与 SQL LIKE 操作符一起使用。
SQL 通配符用于搜索表中的数据。
在 SQL 中,可使用以下通配符:
实例
选取 url 以字母 "https" 开始的所有网站
SELECT * FROM Websites
WHERE url LIKE 'https%';
选取 name 以一个任意字符开始,然后是 "oogle" 的所有客户:
SELECT * FROM Websites
WHERE name LIKE '_oogle';
MySQL 中使用 REGEXP 或 NOT REGEXP 运算符 (或 RLIKE 和 NOT RLIKE) 来操作正则表达式。
下面的 SQL 语句选取 name 以 "G"、"F" 或 "s" 开始的所有网站:
SELECT * FROM Websites
WHERE name REGEXP '^[GFs]';
下面的 SQL 语句选取 name 以 A 到 H 字母开头的网站:
SELECT * FROM Websites
WHERE name REGEXP '^[A-H]';
下面的 SQL 语句选取 name 不以 A 到 H 字母开头的网站:
SELECT * FROM Websites
WHERE name REGEXP '^[^A-H]';
SQL IN操作符
IN 操作符允许您在 WHERE 子句中规定多个值。
SQL IN
SELECT column_name(s)
FROM table_name
WHERE column_name IN (value1,value2,...);
SQL BETWEEN操作符
BETWEEN 操作符选取介于两个值之间的数据范围内的值。这些值可以是数值、文本或者日期。
SELECT column_name(s)
FROM table_name
WHERE column_name BETWEEN value1 AND value2;
SQL 别名
通过使用 SQL,可以为表名称或列名称指定别名。
基本上,创建别名是为了让列名称的可读性更强。
列的SQL别名语法
SELECT column_name AS alias_name
FROM table_name;
表的SQL别名语法
SELECT column_name(s)
FROM table_name AS alias_name;
在下面的情况下,使用别名很有用:
- 在查询中涉及超过一个表
- 在查询中使用了函数
- 列名称很长或者可读性差
- 需要把两个列或者多个列结合在一起
SQL 连接
SQL join 用于把来自两个或多个表的行结合起来。
下图展示了 LEFT JOIN、RIGHT JOIN、INNER JOIN、OUTER JOIN 相关的 7 种用法。
INNER 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 是相同的。
LEFT JOIN 关键字
LEFT JOIN 关键字从左表(table1)返回所有的行,即使右表(table2)中没有匹配。如果右表中没有匹配,则结果为 NULL。
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;
注释:在某些数据库中,LEFT JOIN 称为 LEFT OUTER JOIN。
SQL UNION操作符
SQL UNION 操作符合并两个或多个 SELECT 语句的结果。
UNION 操作符用于合并两个或多个 SELECT 语句的结果集。
请注意,UNION 内部的每个 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每个 SELECT 语句中的列的顺序必须相同。
SELECT column_name(s) FROM table1
UNION
SELECT column_name(s) FROM table2;
注释:默认地,UNION 操作符选取不同的值。如果允许重复的值,请使用 UNION ALL。
SELECT column_name(s) FROM table1
UNION ALL
SELECT column_name(s) FROM table2;
注释:UNION 结果集中的列名总是等于 UNION 中第一个 SELECT 语句中的列名。
实例
SQLINSERT INTO SELECT语句
INSERT INTO SELECT 语句从一个表复制数据,然后把数据插入到一个已存在的表中。目标表中任何已存在的行都不会受影响。
INSERT INTO table2
SELECT * FROM table1;
或
INSERT INTO table2
(column_name(s))
SELECT column_name(s)
FROM table1;
数据库创建相关语句
CREATE DATABASE dbname;
CREATE TABLE Persons
(
PersonID int,
LastName varchar(255),
FirstName varchar(255),
Address varchar(255),
City varchar(255)
);
NOT NULL约束
主键约束
数据库索引
CREATE INDEX index_name
ON table_name (column_name)
SQL 聚合函数
SQL Aggregate 函数计算从列中取得的值,返回一个单一的值。
有用的 Aggregate 函数:
- AVG() - 返回平均值
- COUNT() - 返回行数
- MAX() - 返回最大值
- MIN() - 返回最小值
- SUM() - 返回总和
SELECT AVG(column_name) FROM table_name
COUNT(column_name) 函数返回指定列的值的数目(NULL 不计入):
SELECT COUNT(column_name) FROM table_name;
COUNT(*) 函数返回表中的记录数:
SELECT COUNT(*) FROM table_name;
COUNT(DISTINCT column_name) 函数返回指定列的不同值的数目:
SELECT COUNT(DISTINCT column_name) FROM table_name;
SQL GROUP BY语句
GROUP BY 语句用于结合聚合函数,根据一个或多个列对结果集进行分组。
SELECT column_name, aggregate_function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name;
SQL HAVING子句
在 SQL 中增加 HAVING 子句原因是,WHERE 关键字无法与聚合函数一起使用。
HAVING 子句可以让我们筛选分组后的各组数据。
SELECT column_name, aggregate_function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name
HAVING aggregate_function(column_name) operator value;
快速参考
SQL 语句 |
语法 |
AND / OR |
SELECT column_name(s) |
ALTER TABLE |
ALTER TABLE table_name or ALTER TABLE table_name |
AS (alias) |
SELECT column_name AS column_alias or SELECT column_name |
BETWEEN |
SELECT column_name(s) |
CREATE DATABASE |
CREATE DATABASE database_name |
CREATE TABLE |
CREATE TABLE table_name |
CREATE INDEX |
CREATE INDEX index_name or CREATE UNIQUE INDEX index_name |
CREATE VIEW |
CREATE VIEW view_name AS |
DELETE |
DELETE FROM table_name or DELETE FROM table_name DELETE * FROM table_name |
DROP DATABASE |
DROP DATABASE database_name |
DROP INDEX |
DROP INDEX table_name.index_name (SQL Server) |
DROP TABLE |
DROP TABLE table_name |
GROUP BY |
SELECT column_name, aggregate_function(column_name) |
HAVING |
SELECT column_name, aggregate_function(column_name) |
IN |
SELECT column_name(s) |
INSERT INTO |
INSERT INTO table_name or INSERT INTO table_name |
INNER JOIN |
SELECT column_name(s) |
LEFT JOIN |
SELECT column_name(s) |
RIGHT JOIN |
SELECT column_name(s) |
FULL JOIN |
SELECT column_name(s) |
LIKE |
SELECT column_name(s) |
ORDER BY |
SELECT column_name(s) |
SELECT |
SELECT column_name(s) |
SELECT * |
SELECT * |
SELECT DISTINCT |
SELECT DISTINCT column_name(s) |
SELECT INTO |
SELECT * or SELECT column_name(s) |
SELECT TOP |
SELECT TOP number|percent column_name(s) |
TRUNCATE TABLE |
TRUNCATE TABLE table_name |
UNION |
SELECT column_name(s) FROM table_name1 |
UNION ALL |
SELECT column_name(s) FROM table_name1 |
UPDATE |
UPDATE table_name |
WHERE |
SELECT column_name(s) |