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
?
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
?
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排序
?
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,…)
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 要慎重,再慎重。
DELETE 语句用于删除表中的行。
SQL DELETE
DELETE FROM table_name
WHERE some_column=some_value;
?
注意
WHERE 子句规定哪条记录或者哪些记录需要删除。如果您省略了 WHERE 子句,所有的记录都将被删除!
MySQL 支持 LIMIT 语句来选取指定的条数数据
SQL LIMIT
SELECT column_name(s)
FROM table_name
LIMIT number;
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 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]‘;
IN 操作符允许您在 WHERE 子句中规定多个值。
SQL IN
SELECT column_name(s)
FROM table_name
WHERE column_name IN (value1,value2,...);
?
BETWEEN 操作符选取介于两个值之间的数据范围内的值。这些值可以是数值、文本或者日期。
SELECT column_name(s)
FROM table_name
WHERE column_name BETWEEN value1 AND value2;
?
通过使用 SQL,可以为表名称或列名称指定别名。
基本上,创建别名是为了让列名称的可读性更强。
列的SQL别名语法
SELECT column_name AS alias_name
FROM table_name;
表的SQL别名语法
SELECT column_name(s)
FROM table_name AS alias_name;
?
在下面的情况下,使用别名很有用:
?
SQL join 用于把来自两个或多个表的行结合起来。
下图展示了 LEFT JOIN、RIGHT JOIN、INNER JOIN、OUTER JOIN 相关的 7 种用法。
?
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 关键字从左表(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 操作符合并两个或多个 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 语句中的列名。
?
实例
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 Aggregate 函数计算从列中取得的值,返回一个单一的值。
有用的 Aggregate 函数:
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;
?
GROUP BY 语句用于结合聚合函数,根据一个或多个列对结果集进行分组。
?
SELECT column_name, aggregate_function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name;
?
在 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) |
原文:https://www.cnblogs.com/kexinxin/p/11622454.html