sql常用操作
创建数据库: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 导入数据: