创建数据库:CREATE DATABASE database_name
使用数据库:use database_name
创建数据表:
CREATE TABLE table_name
(
column_name1 data_type,
column_name2 data_type,
column_name2 data_type,
...
)
约束(CONSTRAINT):
NOT NULL - 指示某列不能存储 NULL 值。
where条件判断
IS NULL
IS NOT NULL
ISNULL(column_name, value)、NVL()、IFNULL(column_name, value) 和 COALESCE(column_name, value) 函数
计算时若值为null时,取值为value
UNIQUE - 保证某列的每行必须有唯一的值。
CHECK - 保证列中的值符合指定的条件。
P_Id int NOT NULL CHECK (P_Id>0),
DEFAULT - 规定没有给列赋值时的默认值。
City varchar(255) DEFAULT 'Sandnes'
PRIMARY KEY - NOT NULL 和 UNIQUE 的结合。确保某列(或两个列多个列的结合)有唯一标识,有助于更容易更快速地找到表中的一个特定的记录。
CONSTRAINT connstarint_name PRIMARY KEY (column1,column2,...)
FOREIGN KEY - 保证一个表中的数据匹配另一个表中的值的参照完整性。
CONSTRAINT 外键约束名 FOREIGN KEY (column1,column2,... column_n)
REFERENCES 外键依赖的表 (column1,column2,...column_n)
ON DELETE CASCADE--级联删除
创建索引:
CREATE INDEX index_name
ON table_name (column_name)
CREATE UNIQUE INDEX index_name
ON table_name (column_name)
创建视图:
CREATE VIEW view_name AS
SELECT column_name(s)
FROM table_name
WHERE condition
更新视图:
CREATE OR REPLACE VIEW view_name AS
SELECT column_name(s)
FROM table_name
WHERE condition
撤销视图:
DROP VIEW view_name
删除数据库:DROP DATABASE database_name
删除数据表:DROP TABLE table_name
删除索引:DROP INDEX table_name.index_name(SQL Server)
DROP INDEX index_name (MySQL)
ALTER TABLE 语句用于在已有的表中添加、删除或修改列。
添加列:
ALTER TABLE table_name
DD column_name datatype
删除表中的列:
ALTER TABLE table_name
DROP COLUMN column_name
改变表中列的数据类型:
SQL Server / MS Access:
ALTER TABLE table_name
ALTER COLUMN column_name datatype
My SQL / Oracle:
ALTER TABLE table_name
MODIFY COLUMN column_name datatype
查:
SELECT column_name,column_name
FROM table_name;
SELECT * FROM table_name;
别名;
列:SELECT column_name AS alias_name
FROM table_name;
表:SELECT column_name(s)
FROM table_name AS alias_name;
去重:
SELECT DISTINCT column_name,column_name
FROM table_name;
WHERE 子句
SELECT column_name,column_name
FROM table_name
WHERE column_name operator value;
operator:
= 等于
<> 不等于。注释:在 SQL 的一些版本中,该操作符可被写成 !=
> 大于
< 小于
>= 大于等于
<= 小于等于
BETWEEN AND 在某个范围内
LIKE 搜索某种模式:% 表示多个字值,_ 下划线表示一个字符;
IN 指定针对某个列的多个可能值
逻辑运算: () not and or
空值判断: is null
LIKE 操作符:
SELECT column_name(s)
FROM table_name
WHERE column_name LIKE pattern;
SELECT column_name(s)
FROM table_name
WHERE column_name REGEXP '[charlist]';(正则匹配)
通配符:
% 替代 0 个或多个字符
_ 替代一个字符
[charlist] 字符列中的任何单一字符
[^charlist]或[!charlist] 不在字符列中的任何单一字符
REGEXP 或 NOT REGEXP 运算符
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;
排序:
SELECT column_name,column_name
FROM table_name
ORDER BY column_name,column_name ASC|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)
SELECT column_name(s)
FROM table_name
LIMIT number;(MYSQL)
SELECT column_name(s)
FROM table_name
WHERE ROWNUM <= number;(Oracle )
连接(JOIN):
join 用于把来自两个或多个表的行结合起来。
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;
LEFT JOIN:
SELECT column_name(s)
FROM table1
LEFT JOIN table2
ON table1.column_name=table2.column_name;
RIGHT JOIN:
SELECT column_name(s)
FROM table1
RIGHT JOIN table2
ON table1.column_name=table2.column_name;
FULL OUTER JOIN:
SELECT column_name(s)
FROM table1
FULL OUTER JOIN table2
ON table1.column_name=table2.column_name;
UNION 操作符
UNION 操作符合并两个或多个 SELECT 语句的结果。
UNION 内部的每个 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每个 SELECT 语句中的列的顺序必须相同。
UNION 结果集中的列名总是等于 UNION 中第一个 SELECT 语句中的列名
UNION(选取不同的值):
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;
SELECT INTO 语句
从一个表复制数据,然后把数据插入到另一个新表中
SELECT column_name(s)
INTO newtable [IN externaldb]
FROM table1;
MySQL:
CREATE TABLE 新表
AS
SELECT * FROM 旧表
SELECT INTO 语句可用于通过另一种模式创建一个新的空表。只需要添加促使查询没有数据返回的 WHERE 子句即可:
SELECT *
INTO newtable
FROM table1
WHERE 1=0;
INSERT INTO SELECT 语句
从一个表复制数据,然后把数据插入到一个已存在的表中,目标表中任何已存在的行都不会受影响
INSERT INTO table2
SELECT * FROM table1;
MySQL Date 函数
NOW() 返回当前的日期和时间
CURDATE() 返回当前的日期
CURTIME() 返回当前的时间
DATE() 提取日期或日期/时间表达式的日期部分
EXTRACT() 返回日期/时间的单独部分
DATE_ADD() 向日期添加指定的时间间隔
DATE_SUB() 从日期减去指定的时间间隔
DATEDIFF() 返回两个日期之间的天数
DATE_FORMAT() 用不同的格式显示日期/时间
导出数据(MYSQL):
SELECT ... INTO OUTFILE
将数据表 runoob_tbl 数据导出到 /tmp/runoob.txt
SELECT * FROM runoob_tbl
INTO OUTFILE '/tmp/runoob.txt';
生成一个文件,各值用逗号隔开:
SELECT a,b,a+b INTO OUTFILE '/tmp/result.text'
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\n'
FROM test_table;
导出表作为原始数据(不带数据):
将数据表 runoob_tbl 导出到 /tmp 目录中
mysqldump -u root -p --no-create-info --tab=/tmp RUNOOB runoob_tbl
password *****
导出 SQL 格式的数据(带数据,不带表名时,导出当前数据库所有数据):
mysqldump -u root -p database_name [table_name] > dump.txt
password *****
导入数据(MySQL):
mysql -u用户名 -p密码 < 要导入的数据库数据(runoob.sql)
source 命令导入
mysql> create database abc; # 创建数据库
mysql> use abc; # 使用已创建的数据库
mysql> set names utf8; # 设置编码
mysql> source /home/abc/abc.sql # 导入备份数据库
使用 LOAD DATA 导入数据:
从当前目录中读取文件 dump.txt ,将该文件中的数据插入到当前数据库的 mytbl 表中。
mysql> LOAD DATA LOCAL INFILE 'dump.txt' INTO TABLE mytbl;
如果指定LOCAL关键词,则表明从客户主机上按路径读取文件。如果没有指定,则文件在服务器上按路径读取文件。
mysql> LOAD DATA LOCAL INFILE 'dump.txt' INTO TABLE mytbl
-> FIELDS TERMINATED BY ':'
-> LINES TERMINATED BY '\r\n';
使用 mysqlimport 导入数据: