SQL基础

/ 0评 / 0

SQL 是用于访问和处理数据库的标准的计算机语言。包含数据的增、删、改、查(CURD)操作。数据库中包含数据表,数据表中根据数据的结构存放数据。SQL语句不区分大小写,但是我们一般把SQL的操作关键字大写,更方便我们阅读。

一些SQL命令及用法:

SELECT 从数据库中提取数据
UPDATE 更新数据库中的数据
DELETE 从数据库中删除数据
INSERT INTO 向数据库中插入新数据
CREATE DATABASE 创建新数据库
ALTER DATABASE 修改数据库
CREATE TABLE 创建新表
ALTER TABLE 变更(改变)数据库表
DROP TABLE 删除表
CREATE INDEX 创建索引(搜索键)
DROP INDEX 删除索引

CREATE DATABASE 语句用于创建数据库。
CREATE DATABASE dbname;

CREATE TABLE 语句用于创建数据库中的表。
表由行和列组成,每个表都必须有个表名。
CREATE TABLE table_name(
column_name1 data_type(size),
column_name2 data_type(size),
column_name3 data_type(size),
....
);

SQL 约束用于规定表中的数据规则。
如果存在违反约束的数据行为,行为会被约束终止。
约束可以在创建表时规定(通过 CREATE TABLE 语句),或者在表创建之后规定(通过 ALTER TABLE 语句)。
CREATE TABLE table_name(
column_name1 data_type(size) constraint_name,
column_name2 data_type(size) constraint_name,
column_name3 data_type(size) constraint_name,
....
);
在 SQL 中,我们有如下约束:
NOT NULL - 指示某列不能存储 NULL 值。
UNIQUE - 保证某列的每行必须有唯一的值。
PRIMARY KEY - NOT NULL 和 UNIQUE 的结合。确保某列(或两个列多个列的结合)有唯一标识,有助于更容易更快速地找到表中的一个特定的记录。
FOREIGN KEY - 保证一个表中的数据匹配另一个表中的值的参照完整性。
CHECK - 保证列中的值符合指定的条件。
DEFAULT - 规定没有给列赋值时的默认值。

您可以在表中创建索引,以便更加快速高效地查询数据。用户无法看到索引,它们只能被用来加速搜索/查询。
CREATE INDEX index_name ON table_name (column_name)

在表上创建一个唯一的索引。不允许使用重复的值:唯一的索引意味着两个行不能拥有相同的索引值。
CREATE UNIQUE INDEX index_name ON table_name (column_name)

下面的 SQL 语句从表中选取所有记录:
SELECT * FROM table_name;

查出两列的数据
SELECT column_name,column_name FROM table_name;

一个列可能会包含多个重复值,有时您也许希望仅仅列出不同(distinct)的值。DISTINCT 关键词用于返回唯一不同的值。
SELECT DISTINCT column_name,column_name FROM table_name;

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;
SELECT * FROM Websites WHERE country='USA' OR country='CN';
SELECT * FROM Websites WHERE alexa > 15 AND (country='CN' OR country='USA');

ORDER BY 关键字用于对结果集按照一个列或者多个列进行排序。
ORDER BY 关键字默认按照升序对记录进行排序。如果需要按照降序对记录进行排序,您可以使用 DESC 关键字。
SELECT column_name,column_name FROM table_name ORDER BY column_name,column_name ASC|DESC;

INSERT INTO 语句用于向表中插入新记录。
第一种形式无需指定要插入数据的列名,只需提供被插入的值即可:
INSERT INTO table_name VALUES (value1,value2,value3,...);

第二种形式需要指定列名及被插入的值:
INSERT INTO table_name (column1,column2,column3,...) VALUES (value1,value2,value3,...);

UPDATE 语句用于更新表中已存在的记录。
请注意 SQL UPDATE 语句中的 WHERE 子句!WHERE 子句规定哪条记录或者哪些记录需要更新。如果您省略了 WHERE 子句,所有的记录都将被更新!
UPDATE table_name SET column1=value1,column2=value2,... WHERE some_column=some_value;

DELETE 语句用于删除表中的行。
请注意 SQL DELETE 语句中的 WHERE 子句!WHERE 子句规定哪条记录或者哪些记录需要删除。如果您省略了 WHERE 子句,所有的记录都将被删除!
DELETE FROM table_name WHERE some_column=some_value;

LIKE 操作符用于在 WHERE 子句中搜索列中的指定模式。
SELECT column_name(s) FROM table_name WHERE column_name LIKE pattern;
通过使用 NOT 关键字,您可以选取不匹配模式的记录。
SELECT column_name(s) FROM table_name WHERE column_name NOT LIKE pattern;

这里的pattern是通配符,用以下模式书写

通配符 描述
% 替代 0 个或多个字符
_ 替代一个字符
[charlist] 字符列中的任何单一字符
[^charlist] 或 [!charlist] 不在字符列中的任何单一字符

下面的 SQL 语句选取 url 以字母 "https" 开始的所有网站:
SELECT * FROM Websites WHERE url LIKE 'https%';
下面的 SQL 语句选取 url 包含模式 "oo" 的所有网站:
SELECT * FROM Websites WHERE url LIKE '%oo%';
下面的 SQL 语句选取 name 以 "G" 开始,然后是一个任意字符,然后是 "o",然后是一个任意字符,然后是 "le" 的所有网站:
SELECT * FROM WebsitesWHERE name LIKE 'G_o_le';
下面的 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 子句中规定多个值。
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;

SELECT column_name(s) FROM table_name WHERE column_name NOT BETWEEN value1 AND value2;

通过使用 SQL,可以为表名称或列名称指定别名。基本上,创建别名是为了让列名称的可读性更强。
SELECT column_name AS alias_name FROM table_name;

SELECT column_name(s) FROM table_name AS alias_name;

SQL JOIN 子句用于把来自两个或多个表的行结合起来,基于这些表之间的共同字段。
INNER JOIN:如果表中有至少一个匹配,则返回行
LEFT JOIN:即使右表中没有匹配,也从左表返回所有的行
RIGHT JOIN:即使左表中没有匹配,也从右表返回所有的行
FULL JOIN:只要其中一个表中存在匹配,则返回行

INNER JOIN 关键字在表中存在至少一个匹配时返回行。INNER JOIN 与 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;

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;

RIGHT JOIN 关键字从右表(table2)返回所有的行,即使左表(table1)中没有匹配。如果左表中没有匹配,则结果为 NULL。
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 关键字只要左表(table1)和右表(table2)其中一个表中存在匹配,则返回行.
FULL OUTER JOIN 关键字结合了 LEFT JOIN 和 RIGHT JOIN 的结果。
SELECT column_name(s) FROM table1 FULL OUTER JOIN table2 ON table1.column_name=table2.column_name;

UNION 操作符用于合并两个或多个 SELECT 语句的结果集。
请注意,UNION 内部的每个 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每个 SELECT 语句中的列的顺序必须相同。

SELECT column_name(s) FROM table1 UNION SELECT column_name(s) FROM table2;
如果允许重复的值,请使用 UNION ALL。
SELECT column_name(s) FROM table1 UNION ALL SELECT column_name(s) FROM table2;
UNION 结果集中的列名总是等于 UNION 中第一个 SELECT 语句中的列名。

通过使用 DROP 语句,可以轻松地删除索引、表和数据库。
DROP INDEX 语句用于删除表中的索引。

DROP TABLE 语句用于删除表。
DROP TABLE table_name

DROP DATABASE 语句用于删除数据库。
DROP DATABASE database_name

如果我们仅仅需要删除表内的数据,但并不删除表本身,请使用 TRUNCATE TABLE 语句:
TRUNCATE TABLE table_name

ALTER TABLE 语句用于在已有的表中添加、删除或修改列。
如需在表中添加列,请使用下面的语法:
ALTER TABLE table_name ADD column_name datatype

如需删除表中的列,请使用下面的语法(请注意,某些数据库系统不允许这种在数据库表中删除列的方式):
ALTER TABLE table_name DROP COLUMN column_name

Auto-increment 会在新记录插入表中时生成一个唯一的数字。

SQL中的函数
SQL Aggregate 函数计算从列中取得的值,返回一个单一的值。有用的 Aggregate 函数:

AVG() 返回平均值
COUNT() 返回行数
FIRST() 返回第一个记录的值
LAST() 返回最后一个记录的值
MAX() 返回最大值
MIN() 返回最小值
SUM() 返回总和
GROUP BY 语句用于结合聚合函数,根据一个或多个列对结果集进行分组
HAVING 子句可以让我们筛选分组后的各组数据。在 SQL 中增加 HAVING 子句原因是,WHERE 关键字无法与聚合函数一起使用

SQL Scalar 函数基于输入值,返回一个单一的值。有用的 Scalar 函数:

UCASE() 将某个字段转换为大写
LCASE() 将某个字段转换为小写
MID() 从某个文本字段提取字符
LEN() 返回某个文本字段的长度
ROUND() 对某个数值字段进行指定小数位数的四舍五入
NOW() 返回当前的系统日期和时间
FORMAT() 格式化某个字段的显示方式

评论已关闭。