SQL回顾总结
2016-10-23 本文已影响45人
李作
整理自菜鸟教程
什么是SQL
SQL 指结构化查询语言,全称是 Structured Query Language,是用于访问和处理数据库的标准的计算机语言。
SQL能做什么
- SQL 面向数据库执行查询
- SQL 可从数据库取回数据
- SQL 可在数据库中插入新的记录
- SQL 可更新数据库中的数据
- SQL 可从数据库删除记录
- SQL 可创建新数据库
- SQL 可在数据库中创建新表
- SQL 可在数据库中创建存储过程
- SQL 可在数据库中创建视图
- SQL 可以设置表、存储过程和视图的权限
SQL语法汇总
- 选择数据库
use database;
- 设置使用的字符集
set name utf8;
- 读取表中信息
SELECT * FROM table;
- 返回唯一不同的值
SELECT DISTINCT column_name FROM table;
- 提取满足要求的记录
SELECT column_name,
FROM table
WHERE column_name operator value;
WHERE子句中的运算符WHERE子句中的运算符
- 基于一个以上的条件对记录进行过滤
SELECT * FROM table
WHERE country='CN'
AND|OR alexa > 50;
如果第一个条件和第二个条件都成立,则 AND 运算符显示一条记录。
如果第一个条件和第二个条件中只要有一个成立,则 OR 运算符显示一条记录
- 对结果集进行排序。
SELECT column_name,column_name
FROM table_name
ORDER BY column_name,column_name ASC|DESC; #默认升序,DESC降序
- 向表中插入新记录
INSERT INTO table_name
VALUES (value1,value2,value3,...);#无需指定要插入数据的列名,只需提供被插入的值即可:
INSERT INTO table_name (column1,column2,column3,...)
VALUES (value1,value2,value3,...);#指定列名及被插入的值
- 更新表中的记录
UPDATE table_name
SET column1=value1,column2=value2,...
WHERE some_column=some_value;
- 删除表中的记录
DELETE FROM table_name
WHERE some_column=some_value;
- 规定要返回的记录的数目
SELECT TOP number|percent column_name(s)
FROM table_name;#SQL Server / MS Access 语法
SELECT column_name(s)
FROM table_name
LIMIT number;#MySQL 语法
- LIKE 操作符用于在 WHERE 子句中搜索列中的指定模式
SELECT column_name(s)
FROM table_name
WHERE column_name LIKE pattern;
通配符SQL 通配符
通配符可用于替代字符串中的任何其他字符,常与LIKE一起使用
MySQL 中使用 REGEXP 或 NOT REGEXP 运算符 (或 RLIKE 和 NOT RLIKE) 来操作正则表达式。
- 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 AS alias_name
FROM table_name;#列的 SQL 别名语法
SELECT column_name(s)
FROM table_name AS alias_name;#表的 SQL 别名语法
- SQL 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;
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 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 操作符选取不同的值。如果允许重复的值,请使用 UNION ALL
SELECT column_name(s) FROM table1
UNION ALL
SELECT column_name(s) FROM table2;
- SELECT INTO 语句从一个表复制数据,然后把数据插入到另一个新表中
SELECT *
INTO newtable [IN externaldb]
FROM table1;
SELECT column_name(s)
INTO newtable [IN externaldb]
FROM table1;
- INSERT INTO SELECT 语句从一个表复制数据,然后把数据插入到一个已存在的表中。目标表中任何已存在的行都不会受影响。
INSERT INTO table2
SELECT * FROM table1;
INSERT INTO table2
(column_name(s))
SELECT column_name(s)
FROM table1;
- 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 语句用于在表中创建索引。
CREATE INDEX index_name
ON table_name (column_name)
- DROP INDEX 语句用于删除表中的索引
ALTER TABLE table_name DROP INDEX index_name;
- 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;#删除表中的列
ALTER TABLE table_name
ALTER COLUMN column_name;#修改表中的列
- AUTO INCREMENT 字段会在新记录插入表中时生成一个唯一的数字,与SQL约束用法相似,在创建表时添加
ALTER TABLE Persons AUTO_INCREMENT=100;#设定起始值
- SQL CREATE VIEW 语句用于创建视图
CREATE VIEW view_name AS
SELECT column_name(s)
FROM table_name
WHERE condition;
- SQL 更新视图
CREATE OR REPLACE VIEW view_name AS
SELECT column_name(s)
FROM table_name
WHERE condition;
- SQL 撤销视图
DROP VIEW view_name;
MySQL 中的内建日期函数SQL日期
SQL Date 数据类型:
MySQL 使用下列数据类型在数据库中存储日期或日期/时间值:
- DATE - 格式:YYYY-MM-DD
- DATETIME - 格式:YYYY-MM-DD HH:MM:SS
- TIMESTAMP - 格式:YYYY-MM-DD HH:MM:SS
- YEAR - 格式:YYYY 或 YY
SQL 函数
SQL Aggregate 函数计算从列中取得的值,返回一个单一的值。
- AVG() - 返回平均值
- COUNT() - 返回行数
- FIRST() - 返回第一个记录的值
- LAST() - 返回最后一个记录的值
- MAX() - 返回最大值
- MIN() - 返回最小值
- SUM() - 返回总和
SQL Scalar 函数基于输入值,返回一个单一的值。
- UCASE() - 将某个字段转换为大写
- LCASE() - 将某个字段转换为小写
- MID() - 从某个文本字段提取字符
- LEN() - 返回某个文本字段的长度
- ROUND() - 对某个数值字段进行指定小数位数的四舍五入
- NOW() - 返回当前的系统日期和时间
- FORMAT() - 格式化某个字段的显示方式